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>
This commit is contained in:
committed by
Tejun Heo
parent
12938a9220
commit
4a6f4fe837
@@ -746,7 +746,7 @@ static int acpi_idle_enter_c1(struct cpuidle_device *dev,
|
|||||||
struct acpi_processor *pr;
|
struct acpi_processor *pr;
|
||||||
struct acpi_processor_cx *cx = cpuidle_get_statedata(state);
|
struct acpi_processor_cx *cx = cpuidle_get_statedata(state);
|
||||||
|
|
||||||
pr = __get_cpu_var(processors);
|
pr = __this_cpu_read(processors);
|
||||||
|
|
||||||
if (unlikely(!pr))
|
if (unlikely(!pr))
|
||||||
return 0;
|
return 0;
|
||||||
@@ -787,7 +787,7 @@ static int acpi_idle_enter_simple(struct cpuidle_device *dev,
|
|||||||
s64 idle_time_ns;
|
s64 idle_time_ns;
|
||||||
s64 idle_time;
|
s64 idle_time;
|
||||||
|
|
||||||
pr = __get_cpu_var(processors);
|
pr = __this_cpu_read(processors);
|
||||||
|
|
||||||
if (unlikely(!pr))
|
if (unlikely(!pr))
|
||||||
return 0;
|
return 0;
|
||||||
@@ -864,7 +864,7 @@ static int acpi_idle_enter_bm(struct cpuidle_device *dev,
|
|||||||
s64 idle_time;
|
s64 idle_time;
|
||||||
|
|
||||||
|
|
||||||
pr = __get_cpu_var(processors);
|
pr = __this_cpu_read(processors);
|
||||||
|
|
||||||
if (unlikely(!pr))
|
if (unlikely(!pr))
|
||||||
return 0;
|
return 0;
|
||||||
|
@@ -49,7 +49,7 @@ static int __cpuidle_register_device(struct cpuidle_device *dev);
|
|||||||
*/
|
*/
|
||||||
static void cpuidle_idle_call(void)
|
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;
|
struct cpuidle_state *target_state;
|
||||||
int next_state;
|
int next_state;
|
||||||
|
|
||||||
|
@@ -619,7 +619,7 @@ void __irq_entry do_IRQ(struct pt_regs *regs)
|
|||||||
s390_idle_check(regs, S390_lowcore.int_clock,
|
s390_idle_check(regs, S390_lowcore.int_clock,
|
||||||
S390_lowcore.async_enter_timer);
|
S390_lowcore.async_enter_timer);
|
||||||
irq_enter();
|
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)
|
if (S390_lowcore.int_clock >= S390_lowcore.clock_comparator)
|
||||||
/* Serve timer interrupts first. */
|
/* Serve timer interrupts first. */
|
||||||
clock_comparator_work();
|
clock_comparator_work();
|
||||||
|
@@ -78,10 +78,10 @@ void speakup_fake_down_arrow(void)
|
|||||||
/* don't change CPU */
|
/* don't change CPU */
|
||||||
preempt_disable();
|
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, PRESSED);
|
||||||
input_report_key(virt_keyboard, KEY_DOWN, RELEASED);
|
input_report_key(virt_keyboard, KEY_DOWN, RELEASED);
|
||||||
__get_cpu_var(reporting_keystroke) = false;
|
__this_cpu_write(reporting_keystroke, false);
|
||||||
|
|
||||||
/* reenable preemption */
|
/* reenable preemption */
|
||||||
preempt_enable();
|
preempt_enable();
|
||||||
|
Reference in New Issue
Block a user