diff options
author | Andreas Mohr <andi@lisas.de> | 2007-07-21 17:11:25 +0200 |
---|---|---|
committer | Linus Torvalds <torvalds@woody.linux-foundation.org> | 2007-07-21 18:37:13 -0700 |
commit | 267eb01a62b1190d0bf87b1ef3b0c9d21cdb2c57 (patch) | |
tree | 1b2ad3b7e510c44d44ab33bdbc7c6ff3f99ab496 /include/asm-i386 | |
parent | 8f03d6ce4ee20e7521b69188f6b5a9bb9ba7457f (diff) | |
download | op-kernel-dev-267eb01a62b1190d0bf87b1ef3b0c9d21cdb2c57.zip op-kernel-dev-267eb01a62b1190d0bf87b1ef3b0c9d21cdb2c57.tar.gz |
i386: add cpu_relax() to cmos_lock()
Add cpu_relax() to cmos_lock() inline function for faster operation on SMT
CPUs and less power consumption on others in case of lock contention (which
probably doesn't happen too often, so admittedly this patch is not too
exciting).
[akpm@linux-foundation.org: Include the header file for cpu_relax()]
Signed-off-by: Andreas Mohr <andi@lisas.de>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Andi Kleen <ak@suse.de>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Diffstat (limited to 'include/asm-i386')
-rw-r--r-- | include/asm-i386/mc146818rtc.h | 5 |
1 files changed, 4 insertions, 1 deletions
diff --git a/include/asm-i386/mc146818rtc.h b/include/asm-i386/mc146818rtc.h index 99a8900..1613b42 100644 --- a/include/asm-i386/mc146818rtc.h +++ b/include/asm-i386/mc146818rtc.h @@ -6,6 +6,7 @@ #include <asm/io.h> #include <asm/system.h> +#include <asm/processor.h> #include <linux/mc146818rtc.h> #ifndef RTC_PORT @@ -43,8 +44,10 @@ static inline void lock_cmos(unsigned char reg) unsigned long new; new = ((smp_processor_id()+1) << 8) | reg; for (;;) { - if (cmos_lock) + if (cmos_lock) { + cpu_relax(); continue; + } if (__cmpxchg(&cmos_lock, 0, new, sizeof(cmos_lock)) == 0) return; } |