Esempio n. 1
0
long __lock arch_atomic_cmpxchg(atomic_t *atom, long oldval, long newval)
{
	long previous, res;

	arch_smp_mb();

	do {
		__asm__ __volatile__("@ atomic_cmpxchg\n"
		"ldrex	%1, [%3]\n"
		"mov	%0, #0\n"
		"teq	%1, %4\n"
		"strexeq %0, %5, [%3]\n"
		    : "=&r" (res), "=&r" (previous), "+Qo" (atom->counter)
		    : "r" (&atom->counter), "Ir" (oldval), "r" (newval)
		    : "cc");
	} while (res);

	arch_smp_mb();

	return oldval;
}
Esempio n. 2
0
static void __arm_lpae_set_pte(arm_lpae_iopte *ptep, arm_lpae_iopte pte,
			       struct io_pgtable_cfg *cfg)
{
	*ptep = pte;
	arch_smp_mb();
}