#define local_irq_enable() \
do { trace_hardirqs_on(); raw_local_irq_enable(); } while (0)
#define local_irq_disable() \
do { raw_local_irq_disable(); trace_hardirqs_off(); } while (0)
#define local_irq_save(flags) \
do { raw_local_irq_save(flags); trace_hardirqs_off(); } while (0)
#define local_irq_restore(flags) \
do { \
if (raw_irqs_disabled_flags(flags)) { \
raw_local_irq_restore(flags); \
trace_hardirqs_off(); \
} else { \
trace_hardirqs_on(); \
raw_local_irq_restore(flags); \
} \
} while (0)
static inline void raw_local_irq_disable(void){ native_irq_disable(); }
static inline void native_irq_disable(void){ asm volatile("cli": : :"memory");}
static inline void native_irq_enable(void){ asm volatile("sti": : :"memory");}
static inline unsigned long native_save_fl(void){ unsigned long f; asm volatile("pushfl ; popl %0":"=g" (f): /* no input */); return f;}
static inline void native_restore_fl(unsigned long f){ asm volatile("pushl %0 ; popfl": /* no output */ :"g" (f) :"memory", "cc");}
local_irq_disable()
/* 临界区代码 */
local_irq_enable()
欢迎光临 曲径通幽论坛 (http://www.groad.net/bbs/) | Powered by Discuz! X3.2 |