__ __ __ __ _____ _ _ _____ _ _ _ | \/ | \ \ / / | __ \ (_) | | / ____| | | | | | \ / |_ __\ V / | |__) | __ ___ ____ _| |_ ___ | (___ | |__ ___| | | | |\/| | '__|> < | ___/ '__| \ \ / / _` | __/ _ \ \___ \| '_ \ / _ \ | | | | | | |_ / . \ | | | | | |\ V / (_| | || __/ ____) | | | | __/ | | |_| |_|_(_)_/ \_\ |_| |_| |_| \_/ \__,_|\__\___| |_____/|_| |_|\___V 2.1 if you need WebShell for Seo everyday contact me on Telegram Telegram Address : @jackleetFor_More_Tools:
/* SPDX-License-Identifier: GPL-2.0 */ /* * Copyright IBM Corp. 1999, 2011 * * Author(s): Martin Schwidefsky <[email protected]>, */ #ifndef __ASM_CMPXCHG_H #define __ASM_CMPXCHG_H #include <linux/mmdebug.h> #include <linux/types.h> #include <linux/bug.h> #include <asm/asm.h> void __cmpxchg_called_with_bad_pointer(void); static __always_inline u32 __cs_asm(u64 ptr, u32 old, u32 new) { asm volatile( " cs %[old],%[new],%[ptr]\n" : [old] "+d" (old), [ptr] "+Q" (*(u32 *)ptr) : [new] "d" (new) : "memory", "cc"); return old; } static __always_inline u64 __csg_asm(u64 ptr, u64 old, u64 new) { asm volatile( " csg %[old],%[new],%[ptr]\n" : [old] "+d" (old), [ptr] "+QS" (*(u64 *)ptr) : [new] "d" (new) : "memory", "cc"); return old; } static inline u8 __arch_cmpxchg1(u64 ptr, u8 old, u8 new) { union { u8 b[4]; u32 w; } old32, new32; u32 prev; int i; i = ptr & 3; ptr &= ~0x3; prev = READ_ONCE(*(u32 *)ptr); do { old32.w = prev; if (old32.b[i] != old) return old32.b[i]; new32.w = old32.w; new32.b[i] = new; prev = __cs_asm(ptr, old32.w, new32.w); } while (prev != old32.w); return old; } static inline u16 __arch_cmpxchg2(u64 ptr, u16 old, u16 new) { union { u16 b[2]; u32 w; } old32, new32; u32 prev; int i; i = (ptr & 3) >> 1; ptr &= ~0x3; prev = READ_ONCE(*(u32 *)ptr); do { old32.w = prev; if (old32.b[i] != old) return old32.b[i]; new32.w = old32.w; new32.b[i] = new; prev = __cs_asm(ptr, old32.w, new32.w); } while (prev != old32.w); return old; } static __always_inline u64 __arch_cmpxchg(u64 ptr, u64 old, u64 new, int size) { switch (size) { case 1: return __arch_cmpxchg1(ptr, old & 0xff, new & 0xff); case 2: return __arch_cmpxchg2(ptr, old & 0xffff, new & 0xffff); case 4: return __cs_asm(ptr, old & 0xffffffff, new & 0xffffffff); case 8: return __csg_asm(ptr, old, new); default: __cmpxchg_called_with_bad_pointer(); } return old; } #define arch_cmpxchg(ptr, o, n) \ ({ \ (__typeof__(*(ptr)))__arch_cmpxchg((unsigned long)(ptr), \ (unsigned long)(o), \ (unsigned long)(n), \ sizeof(*(ptr))); \ }) #define arch_cmpxchg64 arch_cmpxchg #define arch_cmpxchg_local arch_cmpxchg #define arch_cmpxchg64_local arch_cmpxchg #ifdef __HAVE_ASM_FLAG_OUTPUTS__ #define arch_try_cmpxchg(ptr, oldp, new) \ ({ \ __typeof__(ptr) __oldp = (__typeof__(ptr))(oldp); \ __typeof__(*(ptr)) __old = *__oldp; \ __typeof__(*(ptr)) __new = (new); \ __typeof__(*(ptr)) __prev; \ int __cc; \ \ switch (sizeof(*(ptr))) { \ case 1: \ case 2: { \ __prev = arch_cmpxchg((ptr), (__old), (__new)); \ __cc = (__prev != __old); \ if (unlikely(__cc)) \ *__oldp = __prev; \ break; \ } \ case 4: { \ asm volatile( \ " cs %[__old],%[__new],%[__ptr]\n" \ : [__old] "+d" (*__oldp), \ [__ptr] "+Q" (*(ptr)), \ "=@cc" (__cc) \ : [__new] "d" (__new) \ : "memory"); \ break; \ } \ case 8: { \ asm volatile( \ " csg %[__old],%[__new],%[__ptr]\n" \ : [__old] "+d" (*__oldp), \ [__ptr] "+QS" (*(ptr)), \ "=@cc" (__cc) \ : [__new] "d" (__new) \ : "memory"); \ break; \ } \ default: \ __cmpxchg_called_with_bad_pointer(); \ } \ likely(__cc == 0); \ }) #else /* __HAVE_ASM_FLAG_OUTPUTS__ */ #define arch_try_cmpxchg(ptr, oldp, new) \ ({ \ __typeof__((ptr)) __oldp = (__typeof__(ptr))(oldp); \ __typeof__(*(ptr)) __old = *__oldp; \ __typeof__(*(ptr)) __new = (new); \ __typeof__(*(ptr)) __prev; \ \ __prev = arch_cmpxchg((ptr), (__old), (__new)); \ if (unlikely(__prev != __old)) \ *__oldp = __prev; \ likely(__prev == __old); \ }) #endif /* __HAVE_ASM_FLAG_OUTPUTS__ */ #define arch_try_cmpxchg64 arch_try_cmpxchg #define arch_try_cmpxchg_local arch_try_cmpxchg #define arch_try_cmpxchg64_local arch_try_cmpxchg void __xchg_called_with_bad_pointer(void); static inline u8 __arch_xchg1(u64 ptr, u8 x) { int shift = (3 ^ (ptr & 3)) << 3; u32 mask, old, new; ptr &= ~0x3; mask = ~(0xff << shift); old = READ_ONCE(*(u32 *)ptr); do { new = old & mask; new |= x << shift; } while (!arch_try_cmpxchg((u32 *)ptr, &old, new)); return old >> shift; } static inline u16 __arch_xchg2(u64 ptr, u16 x) { int shift = (2 ^ (ptr & 2)) << 3; u32 mask, old, new; ptr &= ~0x3; mask = ~(0xffff << shift); old = READ_ONCE(*(u32 *)ptr); do { new = old & mask; new |= x << shift; } while (!arch_try_cmpxchg((u32 *)ptr, &old, new)); return old >> shift; } static __always_inline u64 __arch_xchg(u64 ptr, u64 x, int size) { switch (size) { case 1: return __arch_xchg1(ptr, x & 0xff); case 2: return __arch_xchg2(ptr, x & 0xffff); case 4: { u32 old = READ_ONCE(*(u32 *)ptr); do { } while (!arch_try_cmpxchg((u32 *)ptr, &old, x & 0xffffffff)); return old; } case 8: { u64 old = READ_ONCE(*(u64 *)ptr); do { } while (!arch_try_cmpxchg((u64 *)ptr, &old, x)); return old; } } __xchg_called_with_bad_pointer(); return x; } #define arch_xchg(ptr, x) \ ({ \ (__typeof__(*(ptr)))__arch_xchg((unsigned long)(ptr), \ (unsigned long)(x), \ sizeof(*(ptr))); \ }) #define system_has_cmpxchg128() 1 static __always_inline u128 arch_cmpxchg128(volatile u128 *ptr, u128 old, u128 new) { asm volatile( " cdsg %[old],%[new],%[ptr]\n" : [old] "+d" (old), [ptr] "+QS" (*ptr) : [new] "d" (new) : "memory", "cc"); return old; } #define arch_cmpxchg128 arch_cmpxchg128 #define arch_cmpxchg128_local arch_cmpxchg128 #ifdef __HAVE_ASM_FLAG_OUTPUTS__ static __always_inline bool arch_try_cmpxchg128(volatile u128 *ptr, u128 *oldp, u128 new) { int cc; asm volatile( " cdsg %[old],%[new],%[ptr]\n" : [old] "+d" (*oldp), [ptr] "+QS" (*ptr), "=@cc" (cc) : [new] "d" (new) : "memory"); return likely(cc == 0); } #define arch_try_cmpxchg128 arch_try_cmpxchg128 #define arch_try_cmpxchg128_local arch_try_cmpxchg128 #endif /* __HAVE_ASM_FLAG_OUTPUTS__ */ #endif /* __ASM_CMPXCHG_H */
| Name | Type | Size | Permission | Actions |
|---|---|---|---|---|
| trace | Folder | 0755 |
|
|
| vdso | Folder | 0755 |
|
|
| Kbuild | File | 253 B | 0644 |
|
| abs_lowcore.h | File | 703 B | 0644 |
|
| access-regs.h | File | 806 B | 0644 |
|
| airq.h | File | 3.29 KB | 0644 |
|
| alternative.h | File | 7.2 KB | 0644 |
|
| ap.h | File | 15.71 KB | 0644 |
|
| appldata.h | File | 1.57 KB | 0644 |
|
| arch_hweight.h | File | 1.66 KB | 0644 |
|
| archrandom.h | File | 947 B | 0644 |
|
| asm-const.h | File | 376 B | 0644 |
|
| asm-extable.h | File | 3.29 KB | 0644 |
|
| asm-prototypes.h | File | 384 B | 0644 |
|
| asm.h | File | 1.84 KB | 0644 |
|
| atomic.h | File | 6.61 KB | 0644 |
|
| atomic_ops.h | File | 7.12 KB | 0644 |
|
| barrier.h | File | 1.93 KB | 0644 |
|
| bitops.h | File | 6.69 KB | 0644 |
|
| boot_data.h | File | 1.62 KB | 0644 |
|
| bug.h | File | 1.5 KB | 0644 |
|
| cache.h | File | 389 B | 0644 |
|
| ccwdev.h | File | 8.33 KB | 0644 |
|
| ccwgroup.h | File | 2.25 KB | 0644 |
|
| checksum.h | File | 3.18 KB | 0644 |
|
| chpid.h | File | 979 B | 0644 |
|
| chsc.h | File | 1.7 KB | 0644 |
|
| cio.h | File | 9.01 KB | 0644 |
|
| clocksource.h | File | 184 B | 0644 |
|
| clp.h | File | 1.39 KB | 0644 |
|
| cmb.h | File | 425 B | 0644 |
|
| cmpxchg.h | File | 6.04 KB | 0644 |
|
| compat.h | File | 2.78 KB | 0644 |
|
| cpacf.h | File | 21.03 KB | 0644 |
|
| cpcmd.h | File | 1.11 KB | 0644 |
|
| cpu.h | File | 620 B | 0644 |
|
| cpu_mf-insn.h | File | 478 B | 0644 |
|
| cpu_mf.h | File | 8.49 KB | 0644 |
|
| cpufeature.h | File | 464 B | 0644 |
|
| cputime.h | File | 393 B | 0644 |
|
| crw.h | File | 1.81 KB | 0644 |
|
| css_chars.h | File | 904 B | 0644 |
|
| ctlreg.h | File | 7.82 KB | 0644 |
|
| current.h | File | 407 B | 0644 |
|
| dat-bits.h | File | 4.91 KB | 0644 |
|
| debug.h | File | 14.36 KB | 0644 |
|
| delay.h | File | 647 B | 0644 |
|
| diag.h | File | 7.72 KB | 0644 |
|
| dis.h | File | 636 B | 0644 |
|
| dma-types.h | File | 2.5 KB | 0644 |
|
| dma.h | File | 359 B | 0644 |
|
| dwarf.h | File | 952 B | 0644 |
|
| eadm.h | File | 2.07 KB | 0644 |
|
| ebcdic.h | File | 1.4 KB | 0644 |
|
| elf.h | File | 11.2 KB | 0644 |
|
| entry-common.h | File | 1.43 KB | 0644 |
|
| exec.h | File | 269 B | 0644 |
|
| extable.h | File | 1.88 KB | 0644 |
|
| extmem.h | File | 1.04 KB | 0644 |
|
| facility.h | File | 3.41 KB | 0644 |
|
| fault.h | File | 730 B | 0644 |
|
| fcx.h | File | 7.96 KB | 0644 |
|
| fprobe.h | File | 229 B | 0644 |
|
| fpu-insn-asm.h | File | 15.4 KB | 0644 |
|
| fpu-insn.h | File | 11.35 KB | 0644 |
|
| fpu-types.h | File | 1.06 KB | 0644 |
|
| fpu.h | File | 8.18 KB | 0644 |
|
| ftrace.h | File | 4.32 KB | 0644 |
|
| ftrace.lds.h | File | 720 B | 0644 |
|
| futex.h | File | 2.56 KB | 0644 |
|
| gmap.h | File | 6.31 KB | 0644 |
|
| hardirq.h | File | 783 B | 0644 |
|
| hiperdispatch.h | File | 295 B | 0644 |
|
| hugetlb.h | File | 2.81 KB | 0644 |
|
| hw_irq.h | File | 210 B | 0644 |
|
| idals.h | File | 6.1 KB | 0644 |
|
| idle.h | File | 614 B | 0644 |
|
| io.h | File | 2.49 KB | 0644 |
|
| ipl.h | File | 4.05 KB | 0644 |
|
| irq.h | File | 2.55 KB | 0644 |
|
| irq_work.h | File | 204 B | 0644 |
|
| irqflags.h | File | 2.07 KB | 0644 |
|
| isc.h | File | 1.01 KB | 0644 |
|
| itcw.h | File | 950 B | 0644 |
|
| jump_label.h | File | 1.32 KB | 0644 |
|
| kasan.h | File | 460 B | 0644 |
|
| kdebug.h | File | 397 B | 0644 |
|
| kexec.h | File | 3.17 KB | 0644 |
|
| kfence.h | File | 1.13 KB | 0644 |
|
| kmsan.h | File | 1.54 KB | 0644 |
|
| kprobes.h | File | 2.02 KB | 0644 |
|
| kvm_host.h | File | 27.71 KB | 0644 |
|
| kvm_para.h | File | 3.67 KB | 0644 |
|
| linkage.h | File | 223 B | 0644 |
|
| lowcore.h | File | 7.22 KB | 0644 |
|
| maccess.h | File | 564 B | 0644 |
|
| march.h | File | 722 B | 0644 |
|
| mem_encrypt.h | File | 304 B | 0644 |
|
| mmu.h | File | 1.38 KB | 0644 |
|
| mmu_context.h | File | 3.42 KB | 0644 |
|
| module.h | File | 1.54 KB | 0644 |
|
| msi.h | File | 527 B | 0644 |
|
| nmi.h | File | 3.51 KB | 0644 |
|
| nospec-branch.h | File | 1.18 KB | 0644 |
|
| nospec-insn.h | File | 2.43 KB | 0644 |
|
| numa.h | File | 386 B | 0644 |
|
| os_info.h | File | 1.67 KB | 0644 |
|
| page-states.h | File | 1.75 KB | 0644 |
|
| page.h | File | 6.76 KB | 0644 |
|
| pai.h | File | 2.03 KB | 0644 |
|
| pci.h | File | 8.64 KB | 0644 |
|
| pci_clp.h | File | 5.35 KB | 0644 |
|
| pci_debug.h | File | 722 B | 0644 |
|
| pci_dma.h | File | 2.89 KB | 0644 |
|
| pci_insn.h | File | 3.99 KB | 0644 |
|
| pci_io.h | File | 4.28 KB | 0644 |
|
| percpu.h | File | 6.33 KB | 0644 |
|
| perf_event.h | File | 1.93 KB | 0644 |
|
| pfault.h | File | 461 B | 0644 |
|
| pgalloc.h | File | 4.39 KB | 0644 |
|
| pgtable.h | File | 60.39 KB | 0644 |
|
| physmem_info.h | File | 4.92 KB | 0644 |
|
| pkey.h | File | 754 B | 0644 |
|
| pnet.h | File | 325 B | 0644 |
|
| preempt.h | File | 3.51 KB | 0644 |
|
| processor.h | File | 10.96 KB | 0644 |
|
| ptrace.h | File | 7.56 KB | 0644 |
|
| purgatory.h | File | 329 B | 0644 |
|
| qdio.h | File | 9.92 KB | 0644 |
|
| runtime-const.h | File | 1.92 KB | 0644 |
|
| runtime_instr.h | File | 634 B | 0644 |
|
| rwonce.h | File | 691 B | 0644 |
|
| schid.h | File | 525 B | 0644 |
|
| sclp.h | File | 4.97 KB | 0644 |
|
| scsw.h | File | 25.06 KB | 0644 |
|
| seccomp.h | File | 808 B | 0644 |
|
| sections.h | File | 1.03 KB | 0644 |
|
| set_memory.h | File | 2.12 KB | 0644 |
|
| setup.h | File | 4.8 KB | 0644 |
|
| signal.h | File | 644 B | 0644 |
|
| sigp.h | File | 1.87 KB | 0644 |
|
| smp.h | File | 2.06 KB | 0644 |
|
| softirq_stack.h | File | 372 B | 0644 |
|
| sparsemem.h | File | 506 B | 0644 |
|
| spinlock.h | File | 3.31 KB | 0644 |
|
| spinlock_types.h | File | 413 B | 0644 |
|
| stacktrace.h | File | 7.88 KB | 0644 |
|
| stp.h | File | 1.69 KB | 0644 |
|
| string.h | File | 5.49 KB | 0644 |
|
| syscall.h | File | 3.81 KB | 0644 |
|
| syscall_wrapper.h | File | 4.67 KB | 0644 |
|
| sysinfo.h | File | 4.33 KB | 0644 |
|
| text-patching.h | File | 301 B | 0644 |
|
| thread_info.h | File | 3.74 KB | 0644 |
|
| timex.h | File | 6.6 KB | 0644 |
|
| tlb.h | File | 4.68 KB | 0644 |
|
| tlbflush.h | File | 2.98 KB | 0644 |
|
| topology.h | File | 2.91 KB | 0644 |
|
| tpi.h | File | 736 B | 0644 |
|
| types.h | File | 318 B | 0644 |
|
| uaccess.h | File | 18.89 KB | 0644 |
|
| unistd.h | File | 1.01 KB | 0644 |
|
| unwind.h | File | 3.3 KB | 0644 |
|
| uprobes.h | File | 588 B | 0644 |
|
| user.h | File | 3.16 KB | 0644 |
|
| uv.h | File | 16.12 KB | 0644 |
|
| vdso-symbols.h | File | 499 B | 0644 |
|
| vdso.h | File | 326 B | 0644 |
|
| vmalloc.h | File | 90 B | 0644 |
|
| vmlinux.lds.h | File | 1.14 KB | 0644 |
|
| vtime.h | File | 612 B | 0644 |
|
| vtimer.h | File | 830 B | 0644 |
|
| word-at-a-time.h | File | 1.52 KB | 0644 |
|
| xor.h | File | 454 B | 0644 |
|