Messages in this thread Patch in this message | ![/](/images/icornerl.gif) | | Date | Sun, 07 Jan 2007 06:39:35 -0800 | From | Zachary Amsden <> | Subject | Re: + spin_lock_irq-enable-interrupts-while-spinning-i386-implementation.patch added to -mm tree |
| |
Daniel Walker wrote: > On Sat, 2007-01-06 at 23:26 -0800, Andrew Morton wrote: > > >> 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 >> > > Now it fails with CONFIG_PARAVIRT off . >
Now it compiles both ways. Or at least asm-offsets.c does. Testing full build...
Zach diff -r 94a7e766e5ea include/asm-i386/spinlock.h --- a/include/asm-i386/spinlock.h Sun Jan 07 06:17:42 2007 -0800 +++ b/include/asm-i386/spinlock.h Sun Jan 07 06:28:51 2007 -0800 @@ -86,7 +86,7 @@ static inline void __raw_spin_lock_irq(r 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" @@ -96,7 +96,10 @@ static inline void __raw_spin_lock_irq(r CLI_STRING "\n" "jmp 1b\n" "3:\n\t" - : "+m" (lock->slock) : : "memory"); + : [slock] "+m" (lock->slock) + : [dummy] "i" (0xdeadbeaf) + CLI_STI_INPUT_ARGS + : "memory" CLI_STI_CLOBBERS); } #endif | ![\](/images/icornerr.gif) |