diff options
author | Christoph Lameter <cl@linux.com> | 2010-12-06 12:16:24 -0500 |
---|---|---|
committer | Tejun Heo <tj@kernel.org> | 2010-12-17 09:07:18 -0500 |
commit | 4a6f4fe8377720e5a279fdbb769946c242e936d3 (patch) | |
tree | 9684b9d39fe8b3aa620465ca0a51e4aacbfdd633 | |
parent | 12938a9220a38d555e38dc9b40021e664b99a1f1 (diff) |
drivers: Replace __get_cpu_var with __this_cpu_read if not used for an address.
__get_cpu_var() can be replaced with this_cpu_read and will then use a single
read instruction with implied address calculation to access the correct per cpu
instance.
However, the address of a per cpu variable passed to __this_cpu_read() cannot be
determed (since its an implied address conversion through segment prefixes).
Therefore apply this only to uses of __get_cpu_var where the addres of the
variable is not used.
V3->V4:
- Move one instance of this_cpu_inc_return to a later patch
so that this one can go in without percpu infrastructrure
changes.
Sedat: fixed compile failure caused by an extra ')'.
Cc: Neil Horman <nhorman@tuxdriver.com>
Cc: Martin Schwidefsky <schwidefsky@de.ibm.com>
Cc: Sedat Dilek <sedat.dilek@gmail.com>
Acked-by: H. Peter Anvin <hpa@zytor.com>
Signed-off-by: Christoph Lameter <cl@linux.com>
Signed-off-by: Tejun Heo <tj@kernel.org>
-rw-r--r-- | drivers/acpi/processor_idle.c | 6 | ||||
-rw-r--r-- | drivers/cpuidle/cpuidle.c | 2 | ||||
-rw-r--r-- | drivers/s390/cio/cio.c | 2 | ||||
-rw-r--r-- | drivers/staging/speakup/fakekey.c | 4 |
4 files changed, 7 insertions, 7 deletions
diff --git a/drivers/acpi/processor_idle.c b/drivers/acpi/processor_idle.c index dcb38f8ddfda..a765b823aa9e 100644 --- a/drivers/acpi/processor_idle.c +++ b/drivers/acpi/processor_idle.c | |||
@@ -746,7 +746,7 @@ static int acpi_idle_enter_c1(struct cpuidle_device *dev, | |||
746 | struct acpi_processor *pr; | 746 | struct acpi_processor *pr; |
747 | struct acpi_processor_cx *cx = cpuidle_get_statedata(state); | 747 | struct acpi_processor_cx *cx = cpuidle_get_statedata(state); |
748 | 748 | ||
749 | pr = __get_cpu_var(processors); | 749 | pr = __this_cpu_read(processors); |
750 | 750 | ||
751 | if (unlikely(!pr)) | 751 | if (unlikely(!pr)) |
752 | return 0; | 752 | return 0; |
@@ -787,7 +787,7 @@ static int acpi_idle_enter_simple(struct cpuidle_device *dev, | |||
787 | s64 idle_time_ns; | 787 | s64 idle_time_ns; |
788 | s64 idle_time; | 788 | s64 idle_time; |
789 | 789 | ||
790 | pr = __get_cpu_var(processors); | 790 | pr = __this_cpu_read(processors); |
791 | 791 | ||
792 | if (unlikely(!pr)) | 792 | if (unlikely(!pr)) |
793 | return 0; | 793 | return 0; |
@@ -864,7 +864,7 @@ static int acpi_idle_enter_bm(struct cpuidle_device *dev, | |||
864 | s64 idle_time; | 864 | s64 idle_time; |
865 | 865 | ||
866 | 866 | ||
867 | pr = __get_cpu_var(processors); | 867 | pr = __this_cpu_read(processors); |
868 | 868 | ||
869 | if (unlikely(!pr)) | 869 | if (unlikely(!pr)) |
870 | return 0; | 870 | return 0; |
diff --git a/drivers/cpuidle/cpuidle.c b/drivers/cpuidle/cpuidle.c index a50710843378..978ff292a3fa 100644 --- a/drivers/cpuidle/cpuidle.c +++ b/drivers/cpuidle/cpuidle.c | |||
@@ -49,7 +49,7 @@ static int __cpuidle_register_device(struct cpuidle_device *dev); | |||
49 | */ | 49 | */ |
50 | static void cpuidle_idle_call(void) | 50 | static void cpuidle_idle_call(void) |
51 | { | 51 | { |
52 | struct cpuidle_device *dev = __get_cpu_var(cpuidle_devices); | 52 | struct cpuidle_device *dev = __this_cpu_read(cpuidle_devices); |
53 | struct cpuidle_state *target_state; | 53 | struct cpuidle_state *target_state; |
54 | int next_state; | 54 | int next_state; |
55 | 55 | ||
diff --git a/drivers/s390/cio/cio.c b/drivers/s390/cio/cio.c index f4e6cf3aceb8..430f875006f2 100644 --- a/drivers/s390/cio/cio.c +++ b/drivers/s390/cio/cio.c | |||
@@ -619,7 +619,7 @@ void __irq_entry do_IRQ(struct pt_regs *regs) | |||
619 | s390_idle_check(regs, S390_lowcore.int_clock, | 619 | s390_idle_check(regs, S390_lowcore.int_clock, |
620 | S390_lowcore.async_enter_timer); | 620 | S390_lowcore.async_enter_timer); |
621 | irq_enter(); | 621 | irq_enter(); |
622 | __get_cpu_var(s390_idle).nohz_delay = 1; | 622 | __this_cpu_write(s390_idle.nohz_delay, 1); |
623 | if (S390_lowcore.int_clock >= S390_lowcore.clock_comparator) | 623 | if (S390_lowcore.int_clock >= S390_lowcore.clock_comparator) |
624 | /* Serve timer interrupts first. */ | 624 | /* Serve timer interrupts first. */ |
625 | clock_comparator_work(); | 625 | clock_comparator_work(); |
diff --git a/drivers/staging/speakup/fakekey.c b/drivers/staging/speakup/fakekey.c index 65b231178f05..bf4ec68ac2eb 100644 --- a/drivers/staging/speakup/fakekey.c +++ b/drivers/staging/speakup/fakekey.c | |||
@@ -78,10 +78,10 @@ void speakup_fake_down_arrow(void) | |||
78 | /* don't change CPU */ | 78 | /* don't change CPU */ |
79 | preempt_disable(); | 79 | preempt_disable(); |
80 | 80 | ||
81 | __get_cpu_var(reporting_keystroke) = true; | 81 | __this_cpu_write(reporting_keystroke, true); |
82 | input_report_key(virt_keyboard, KEY_DOWN, PRESSED); | 82 | input_report_key(virt_keyboard, KEY_DOWN, PRESSED); |
83 | input_report_key(virt_keyboard, KEY_DOWN, RELEASED); | 83 | input_report_key(virt_keyboard, KEY_DOWN, RELEASED); |
84 | __get_cpu_var(reporting_keystroke) = false; | 84 | __this_cpu_write(reporting_keystroke, false); |
85 | 85 | ||
86 | /* reenable preemption */ | 86 | /* reenable preemption */ |
87 | preempt_enable(); | 87 | preempt_enable(); |