提交 267eb01a 编写于 作者: A Andreas Mohr 提交者: Linus Torvalds

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: NAndreas Mohr <andi@lisas.de>
Signed-off-by: NAndrew Morton <akpm@linux-foundation.org>
Signed-off-by: NAndi Kleen <ak@suse.de>
Signed-off-by: NLinus Torvalds <torvalds@linux-foundation.org>
上级 8f03d6ce
...@@ -6,6 +6,7 @@ ...@@ -6,6 +6,7 @@
#include <asm/io.h> #include <asm/io.h>
#include <asm/system.h> #include <asm/system.h>
#include <asm/processor.h>
#include <linux/mc146818rtc.h> #include <linux/mc146818rtc.h>
#ifndef RTC_PORT #ifndef RTC_PORT
...@@ -43,8 +44,10 @@ static inline void lock_cmos(unsigned char reg) ...@@ -43,8 +44,10 @@ static inline void lock_cmos(unsigned char reg)
unsigned long new; unsigned long new;
new = ((smp_processor_id()+1) << 8) | reg; new = ((smp_processor_id()+1) << 8) | reg;
for (;;) { for (;;) {
if (cmos_lock) if (cmos_lock) {
cpu_relax();
continue; continue;
}
if (__cmpxchg(&cmos_lock, 0, new, sizeof(cmos_lock)) == 0) if (__cmpxchg(&cmos_lock, 0, new, sizeof(cmos_lock)) == 0)
return; return;
} }
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册