--- Gnu-Mach/linux/dev/include/asm-i386/system.h 2020/09/02 04:41:39 1.1 +++ Gnu-Mach/linux/dev/include/asm-i386/system.h 2020/09/02 04:45:53 1.1.1.2 @@ -221,14 +221,33 @@ static inline unsigned long __xchg(unsig } #define mb() __asm__ __volatile__ ("" : : :"memory") -#define sti() __asm__ __volatile__ ("sti": : :"memory") -#define cli() __asm__ __volatile__ ("cli": : :"memory") +#define __sti() __asm__ __volatile__ ("sti": : :"memory") +#define __cli() __asm__ __volatile__ ("cli": : :"memory") +#define __save_flags(x) \ +__asm__ __volatile__("pushf ; pop %0" : "=r" (x): /* no input */ :"memory") +#define __restore_flags(x) \ +__asm__ __volatile__("push %0 ; popf": /* no output */ :"g" (x):"memory") -#define save_flags(x) \ -__asm__ __volatile__("pushfl ; popl %0":"=g" (x): /* no input */ :"memory") +#ifdef __SMP__ + +extern void __global_cli(void); +extern void __global_sti(void); +extern unsigned long __global_save_flags(void); +extern void __global_restore_flags(unsigned long); +#define cli() __global_cli() +#define sti() __global_sti() +#define save_flags(x) ((x)=__global_save_flags()) +#define restore_flags(x) __global_restore_flags(x) + +#else + +#define cli() __cli() +#define sti() __sti() +#define save_flags(x) __save_flags(x) +#define restore_flags(x) __restore_flags(x) + +#endif -#define restore_flags(x) \ -__asm__ __volatile__("pushl %0 ; popfl": /* no output */ :"g" (x):"memory") #define iret() __asm__ __volatile__ ("iret": : :"memory")