From: Andrew Morton Fix CONFIG_PARAVIRT=y build. Cc: Ravikiran Thirumalai Cc: Ingo Molnar Cc: Andi Kleen Cc: Michael Davidson Cc: Pravin B. Shelar Cc: Shai Fultheim Cc: Daniel Walker Signed-off-by: Andrew Morton --- include/asm-i386/paravirt.h | 4 ++-- include/asm-i386/spinlock.h | 8 +++++--- 2 files changed, 7 insertions(+), 5 deletions(-) diff -puN include/asm-i386/spinlock.h~spin_lock_irq-enable-interrupts-while-spinning-i386-implementation-fix include/asm-i386/spinlock.h --- a/include/asm-i386/spinlock.h~spin_lock_irq-enable-interrupts-while-spinning-i386-implementation-fix +++ a/include/asm-i386/spinlock.h @@ -86,17 +86,19 @@ static inline void __raw_spin_lock_flags static inline void __raw_spin_lock_irq(raw_spinlock_t *lock) { asm volatile("\n1:\t" - LOCK_PREFIX " ; decb %0\n\t" + LOCK_PREFIX " ; decb %[slock]\n\t" "jns 3f\n" STI_STRING "\n" "2:\t" "rep;nop\n\t" - "cmpb $0,%0\n\t" + "cmpb $0,%[slock]\n\t" "jle 2b\n\t" CLI_STRING "\n" "jmp 1b\n" "3:\n\t" - : "+m" (lock->slock) : : "memory"); + : [slock] "+m" (lock->slock) + : __CLI_STI_INPUT_ARGS + : "memory" CLI_STI_CLOBBERS); } #endif diff -puN include/asm-i386/paravirt.h~spin_lock_irq-enable-interrupts-while-spinning-i386-implementation-fix include/asm-i386/paravirt.h --- a/include/asm-i386/paravirt.h~spin_lock_irq-enable-interrupts-while-spinning-i386-implementation-fix +++ a/include/asm-i386/paravirt.h @@ -509,10 +509,10 @@ static inline unsigned long __raw_local_ "popl %%edx; popl %%ecx", \ PARAVIRT_IRQ_ENABLE, CLBR_EAX) #define CLI_STI_CLOBBERS , "%eax" -#define CLI_STI_INPUT_ARGS \ - , \ +#define __CLI_STI_INPUT_ARGS \ [irq_disable] "i" (offsetof(struct paravirt_ops, irq_disable)), \ [irq_enable] "i" (offsetof(struct paravirt_ops, irq_enable)) +#define CLI_STI_INPUT_ARGS , __CLI_STI_INPUT_ARGS #else /* __ASSEMBLY__ */ _