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    [W:0.031 / U:29.948 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site