__  __    __   __  _____      _            _          _____ _          _ _ 
 |  \/  |   \ \ / / |  __ \    (_)          | |        / ____| |        | | |
 | \  / |_ __\ V /  | |__) | __ ___   ____ _| |_ ___  | (___ | |__   ___| | |
 | |\/| | '__|> <   |  ___/ '__| \ \ / / _` | __/ _ \  \___ \| '_ \ / _ \ | |
 | |  | | |_ / . \  | |   | |  | |\ V / (_| | ||  __/  ____) | | | |  __/ | |
 |_|  |_|_(_)_/ \_\ |_|   |_|  |_| \_/ \__,_|\__\___| |_____/|_| |_|\___V 2.1
 if you need WebShell for Seo everyday contact me on Telegram
 Telegram Address : @jackleet
        
        
For_More_Tools: Telegram: @jackleet | Bulk Smtp support mail sender | Business Mail Collector | Mail Bouncer All Mail | Bulk Office Mail Validator | Html Letter private



Upload:

Command:

[email protected]: ~ $
/* SPDX-License-Identifier: GPL-2.0 */

#ifndef __ASM_CSKY_CMPXCHG_H
#define __ASM_CSKY_CMPXCHG_H

#ifdef CONFIG_SMP
#include <linux/bug.h>
#include <asm/barrier.h>
#include <linux/cmpxchg-emu.h>

#define __xchg_relaxed(new, ptr, size)				\
({								\
	__typeof__(ptr) __ptr = (ptr);				\
	__typeof__(new) __new = (new);				\
	__typeof__(*(ptr)) __ret;				\
	unsigned long tmp;					\
	switch (size) {						\
	case 2: {						\
		u32 ret;					\
		u32 shif = ((ulong)__ptr & 2) ? 16 : 0;		\
		u32 mask = 0xffff << shif;			\
		__ptr = (__typeof__(ptr))((ulong)__ptr & ~2);	\
		__asm__ __volatile__ (				\
			"1:	ldex.w %0, (%4)\n"		\
			"	and    %1, %0, %2\n"		\
			"	or     %1, %1, %3\n"		\
			"	stex.w %1, (%4)\n"		\
			"	bez    %1, 1b\n"		\
			: "=&r" (ret), "=&r" (tmp)		\
			: "r" (~mask),				\
			  "r" ((u32)__new << shif),		\
			  "r" (__ptr)				\
			: "memory");				\
		__ret = (__typeof__(*(ptr)))			\
			((ret & mask) >> shif);			\
		break;						\
	}							\
	case 4:							\
		asm volatile (					\
		"1:	ldex.w		%0, (%3) \n"		\
		"	mov		%1, %2   \n"		\
		"	stex.w		%1, (%3) \n"		\
		"	bez		%1, 1b   \n"		\
			: "=&r" (__ret), "=&r" (tmp)		\
			: "r" (__new), "r"(__ptr)		\
			:);					\
		break;						\
	default:						\
		BUILD_BUG();					\
	}							\
	__ret;							\
})

#define arch_xchg_relaxed(ptr, x) \
		(__xchg_relaxed((x), (ptr), sizeof(*(ptr))))

#define __cmpxchg_relaxed(ptr, old, new, size)			\
({								\
	__typeof__(ptr) __ptr = (ptr);				\
	__typeof__(new) __new = (new);				\
	__typeof__(new) __tmp;					\
	__typeof__(old) __old = (old);				\
	__typeof__(*(ptr)) __ret;				\
	switch (size) {						\
	case 1:							\
		__ret = (__typeof__(*(ptr)))cmpxchg_emu_u8((volatile u8 *)__ptr, (uintptr_t)__old, (uintptr_t)__new); \
		break;						\
	case 4:							\
		asm volatile (					\
		"1:	ldex.w		%0, (%3) \n"		\
		"	cmpne		%0, %4   \n"		\
		"	bt		2f       \n"		\
		"	mov		%1, %2   \n"		\
		"	stex.w		%1, (%3) \n"		\
		"	bez		%1, 1b   \n"		\
		"2:				 \n"		\
			: "=&r" (__ret), "=&r" (__tmp)		\
			: "r" (__new), "r"(__ptr), "r"(__old)	\
			:);					\
		break;						\
	default:						\
		BUILD_BUG();					\
	}							\
	__ret;							\
})

#define arch_cmpxchg_relaxed(ptr, o, n) \
	(__cmpxchg_relaxed((ptr), (o), (n), sizeof(*(ptr))))

#define __cmpxchg_acquire(ptr, old, new, size)			\
({								\
	__typeof__(ptr) __ptr = (ptr);				\
	__typeof__(new) __new = (new);				\
	__typeof__(new) __tmp;					\
	__typeof__(old) __old = (old);				\
	__typeof__(*(ptr)) __ret;				\
	switch (size) {						\
	case 1:							\
		__ret = (__typeof__(*(ptr)))cmpxchg_emu_u8((volatile u8 *)__ptr, (uintptr_t)__old, (uintptr_t)__new); \
		break;						\
	case 4:							\
		asm volatile (					\
		"1:	ldex.w		%0, (%3) \n"		\
		"	cmpne		%0, %4   \n"		\
		"	bt		2f       \n"		\
		"	mov		%1, %2   \n"		\
		"	stex.w		%1, (%3) \n"		\
		"	bez		%1, 1b   \n"		\
		ACQUIRE_FENCE					\
		"2:				 \n"		\
			: "=&r" (__ret), "=&r" (__tmp)		\
			: "r" (__new), "r"(__ptr), "r"(__old)	\
			:);					\
		break;						\
	default:						\
		BUILD_BUG();					\
	}							\
	__ret;							\
})

#define arch_cmpxchg_acquire(ptr, o, n) \
	(__cmpxchg_acquire((ptr), (o), (n), sizeof(*(ptr))))

#define __cmpxchg(ptr, old, new, size)				\
({								\
	__typeof__(ptr) __ptr = (ptr);				\
	__typeof__(new) __new = (new);				\
	__typeof__(new) __tmp;					\
	__typeof__(old) __old = (old);				\
	__typeof__(*(ptr)) __ret;				\
	switch (size) {						\
	case 1:							\
		__ret = (__typeof__(*(ptr)))cmpxchg_emu_u8((volatile u8 *)__ptr, (uintptr_t)__old, (uintptr_t)__new); \
		break;						\
	case 4:							\
		asm volatile (					\
		RELEASE_FENCE					\
		"1:	ldex.w		%0, (%3) \n"		\
		"	cmpne		%0, %4   \n"		\
		"	bt		2f       \n"		\
		"	mov		%1, %2   \n"		\
		"	stex.w		%1, (%3) \n"		\
		"	bez		%1, 1b   \n"		\
		FULL_FENCE					\
		"2:				 \n"		\
			: "=&r" (__ret), "=&r" (__tmp)		\
			: "r" (__new), "r"(__ptr), "r"(__old)	\
			:);					\
		break;						\
	default:						\
		BUILD_BUG();					\
	}							\
	__ret;							\
})

#define arch_cmpxchg(ptr, o, n)					\
	(__cmpxchg((ptr), (o), (n), sizeof(*(ptr))))

#define arch_cmpxchg_local(ptr, o, n)				\
	(__cmpxchg_relaxed((ptr), (o), (n), sizeof(*(ptr))))
#else
#include <asm-generic/cmpxchg.h>
#endif

#endif /* __ASM_CSKY_CMPXCHG_H */

Filemanager

Name Type Size Permission Actions
Kbuild File 346 B 0644
addrspace.h File 231 B 0644
asid.h File 2.38 KB 0644
atomic.h File 4.26 KB 0644
barrier.h File 2.53 KB 0644
bitops.h File 1.29 KB 0644
bug.h File 565 B 0644
cache.h File 861 B 0644
cacheflush.h File 193 B 0644
cachetype.h File 174 B 0644
checksum.h File 944 B 0644
clocksource.h File 159 B 0644
cmpxchg.h File 4.16 KB 0644
elf.h File 2.66 KB 0644
fixmap.h File 747 B 0644
ftrace.h File 629 B 0644
futex.h File 2.54 KB 0644
highmem.h File 1.09 KB 0644
io.h File 1.33 KB 0644
irq_work.h File 208 B 0644
irqflags.h File 1.11 KB 0644
jump_label.h File 1.16 KB 0644
kprobes.h File 1.13 KB 0644
memory.h File 657 B 0644
mmu.h File 216 B 0644
mmu_context.h File 959 B 0644
page.h File 2.34 KB 0644
pci.h File 277 B 0644
perf_event.h File 359 B 0644
pgalloc.h File 1.61 KB 0644
pgtable.h File 6.71 KB 0644
probes.h File 554 B 0644
processor.h File 2.27 KB 0644
ptrace.h File 2.53 KB 0644
reg_ops.h File 382 B 0644
seccomp.h File 283 B 0644
sections.h File 246 B 0644
shmparam.h File 197 B 0644
smp.h File 643 B 0644
spinlock.h File 267 B 0644
spinlock_types.h File 235 B 0644
stackprotector.h File 526 B 0644
string.h File 233 B 0644
switch_to.h File 923 B 0644
syscall.h File 1.32 KB 0644
syscalls.h File 351 B 0644
tcm.h File 665 B 0644
thread_info.h File 2.74 KB 0644
tlb.h File 179 B 0644
tlbflush.h File 824 B 0644
traps.h File 1.41 KB 0644
uaccess.h File 4.86 KB 0644
unistd.h File 164 B 0644
uprobes.h File 669 B 0644
vdso.h File 724 B 0644
vmalloc.h File 90 B 0644
Filemanager