lkml.org 
[lkml]   [2010]   [Dec]   [6]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
Patch in this message
/
Date
From
Subject[Use cpuops V1 06/11] 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.

Cc: Neil Horman <nhorman@tuxdriver.com>
Cc: Martin Schwidefsky <schwidefsky@de.ibm.com>
Signed-off-by: Christoph Lameter <cl@linux.com>

---
drivers/acpi/processor_idle.c | 6 +++---
drivers/cpuidle/cpuidle.c | 2 +-
drivers/s390/cio/cio.c | 2 +-
drivers/staging/speakup/fakekey.c | 4 ++--
4 files changed, 7 insertions(+), 7 deletions(-)
Index: linux-2.6/drivers/acpi/processor_idle.c
===================================================================
--- linux-2.6.orig/drivers/acpi/processor_idle.c 2010-12-03 14:48:28.000000000 -0600
+++ linux-2.6/drivers/acpi/processor_idle.c 2010-12-06 10:26:16.000000000 -0600
@@ -746,7 +746,7 @@ static int acpi_idle_enter_c1(struct cpu
struct acpi_processor *pr;
struct acpi_processor_cx *cx = cpuidle_get_statedata(state);

- pr = __get_cpu_var(processors);
+ pr = __this_cpu_read(processors);

if (unlikely(!pr))
return 0;
@@ -787,7 +787,7 @@ static int acpi_idle_enter_simple(struct
s64 idle_time_ns;
s64 idle_time;

- pr = __get_cpu_var(processors);
+ pr = __this_cpu_read(processors);

if (unlikely(!pr))
return 0;
@@ -864,7 +864,7 @@ static int acpi_idle_enter_bm(struct cpu
s64 idle_time;


- pr = __get_cpu_var(processors);
+ pr = __this_cpu_read(processors);

if (unlikely(!pr))
return 0;
Index: linux-2.6/drivers/cpuidle/cpuidle.c
===================================================================
--- linux-2.6.orig/drivers/cpuidle/cpuidle.c 2010-12-03 14:48:28.000000000 -0600
+++ linux-2.6/drivers/cpuidle/cpuidle.c 2010-12-06 10:26:16.000000000 -0600
@@ -49,7 +49,7 @@ static int __cpuidle_register_device(str
*/
static void cpuidle_idle_call(void)
{
- struct cpuidle_device *dev = __get_cpu_var(cpuidle_devices);
+ struct cpuidle_device *dev = __this_cpu_read(cpuidle_devices);
struct cpuidle_state *target_state;
int next_state;

Index: linux-2.6/drivers/s390/cio/cio.c
===================================================================
--- linux-2.6.orig/drivers/s390/cio/cio.c 2010-12-03 14:48:28.000000000 -0600
+++ linux-2.6/drivers/s390/cio/cio.c 2010-12-06 10:26:16.000000000 -0600
@@ -619,7 +619,7 @@ void __irq_entry do_IRQ(struct pt_regs *
s390_idle_check(regs, S390_lowcore.int_clock,
S390_lowcore.async_enter_timer);
irq_enter();
- __get_cpu_var(s390_idle).nohz_delay = 1;
+ __this_cpu_write(s390_idle.nohz_delay, 1);
if (S390_lowcore.int_clock >= S390_lowcore.clock_comparator)
/* Serve timer interrupts first. */
clock_comparator_work();
Index: linux-2.6/drivers/staging/speakup/fakekey.c
===================================================================
--- linux-2.6.orig/drivers/staging/speakup/fakekey.c 2010-12-03 14:48:28.000000000 -0600
+++ linux-2.6/drivers/staging/speakup/fakekey.c 2010-12-06 10:26:16.000000000 -0600
@@ -78,10 +78,10 @@ void speakup_fake_down_arrow(void)
/* don't change CPU */
preempt_disable();

- __get_cpu_var(reporting_keystroke) = true;
+ __this_cpu_write(reporting_keystroke), true);
input_report_key(virt_keyboard, KEY_DOWN, PRESSED);
input_report_key(virt_keyboard, KEY_DOWN, RELEASED);
- __get_cpu_var(reporting_keystroke) = false;
+ __this_cpu_write(reporting_keystroke, false);

/* reenable preemption */
preempt_enable();


\
 
 \ /
  Last update: 2010-12-06 18:19    [from the cache]
©2003-2011 Jasper Spaans