cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

cmpxchg-irq.h (1065B)


      1/* SPDX-License-Identifier: GPL-2.0 */
      2#ifndef __ASM_SH_CMPXCHG_IRQ_H
      3#define __ASM_SH_CMPXCHG_IRQ_H
      4
      5#include <linux/irqflags.h>
      6
      7static inline unsigned long xchg_u32(volatile u32 *m, unsigned long val)
      8{
      9	unsigned long flags, retval;
     10
     11	local_irq_save(flags);
     12	retval = *m;
     13	*m = val;
     14	local_irq_restore(flags);
     15	return retval;
     16}
     17
     18static inline unsigned long xchg_u16(volatile u16 *m, unsigned long val)
     19{
     20	unsigned long flags, retval;
     21
     22	local_irq_save(flags);
     23	retval = *m;
     24	*m = val;
     25	local_irq_restore(flags);
     26	return retval;
     27}
     28
     29static inline unsigned long xchg_u8(volatile u8 *m, unsigned long val)
     30{
     31	unsigned long flags, retval;
     32
     33	local_irq_save(flags);
     34	retval = *m;
     35	*m = val & 0xff;
     36	local_irq_restore(flags);
     37	return retval;
     38}
     39
     40static inline unsigned long __cmpxchg_u32(volatile int *m, unsigned long old,
     41	unsigned long new)
     42{
     43	__u32 retval;
     44	unsigned long flags;
     45
     46	local_irq_save(flags);
     47	retval = *m;
     48	if (retval == old)
     49		*m = new;
     50	local_irq_restore(flags);       /* implies memory barrier  */
     51	return retval;
     52}
     53
     54#endif /* __ASM_SH_CMPXCHG_IRQ_H */