summaryrefslogtreecommitdiffstats
path: root/include/asm-i386
diff options
context:
space:
mode:
authorAndreas Mohr <andi@lisas.de>2007-07-21 17:11:25 +0200
committerLinus Torvalds <torvalds@woody.linux-foundation.org>2007-07-21 18:37:13 -0700
commit267eb01a62b1190d0bf87b1ef3b0c9d21cdb2c57 (patch)
tree1b2ad3b7e510c44d44ab33bdbc7c6ff3f99ab496 /include/asm-i386
parent8f03d6ce4ee20e7521b69188f6b5a9bb9ba7457f (diff)
downloadlinux-267eb01a62b1190d0bf87b1ef3b0c9d21cdb2c57.tar.gz
linux-267eb01a62b1190d0bf87b1ef3b0c9d21cdb2c57.tar.bz2
linux-267eb01a62b1190d0bf87b1ef3b0c9d21cdb2c57.zip
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.h5
1 files changed, 4 insertions, 1 deletions
diff --git a/include/asm-i386/mc146818rtc.h b/include/asm-i386/mc146818rtc.h
index 99a890047023..1613b42eaf58 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;
}