diff options
| author | Christoph Lameter <cl@linux.com> | 2010-12-08 10:22:55 -0500 |
|---|---|---|
| committer | Tejun Heo <tj@kernel.org> | 2010-12-17 09:07:19 -0500 |
| commit | 909ea96468096b07fbb41aaf69be060d92bd9271 (patch) | |
| tree | a7e015edd96b5f674874fe78cdd889769e130a2a /kernel/time | |
| parent | 780f36d8b3fa9572f731d4fb85067b2e45e6f993 (diff) | |
core: 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 determined (since it's an implied address conversion through
segment prefixes). Therefore apply this only to uses of __get_cpu_var
where the address of the variable is not used.
Cc: Pekka Enberg <penberg@cs.helsinki.fi>
Cc: Hugh Dickins <hughd@google.com>
Cc: Thomas Gleixner <tglx@linutronix.de>
Acked-by: H. Peter Anvin <hpa@zytor.com>
Signed-off-by: Christoph Lameter <cl@linux.com>
Signed-off-by: Tejun Heo <tj@kernel.org>
Diffstat (limited to 'kernel/time')
| -rw-r--r-- | kernel/time/tick-common.c | 2 | ||||
| -rw-r--r-- | kernel/time/tick-oneshot.c | 4 |
2 files changed, 3 insertions, 3 deletions
diff --git a/kernel/time/tick-common.c b/kernel/time/tick-common.c index b6b898d2eeef..051bc80a0c43 100644 --- a/kernel/time/tick-common.c +++ b/kernel/time/tick-common.c | |||
| @@ -49,7 +49,7 @@ struct tick_device *tick_get_device(int cpu) | |||
| 49 | */ | 49 | */ |
| 50 | int tick_is_oneshot_available(void) | 50 | int tick_is_oneshot_available(void) |
| 51 | { | 51 | { |
| 52 | struct clock_event_device *dev = __get_cpu_var(tick_cpu_device).evtdev; | 52 | struct clock_event_device *dev = __this_cpu_read(tick_cpu_device.evtdev); |
| 53 | 53 | ||
| 54 | return dev && (dev->features & CLOCK_EVT_FEAT_ONESHOT); | 54 | return dev && (dev->features & CLOCK_EVT_FEAT_ONESHOT); |
| 55 | } | 55 | } |
diff --git a/kernel/time/tick-oneshot.c b/kernel/time/tick-oneshot.c index aada0e52680a..5cbc101f908b 100644 --- a/kernel/time/tick-oneshot.c +++ b/kernel/time/tick-oneshot.c | |||
| @@ -95,7 +95,7 @@ int tick_dev_program_event(struct clock_event_device *dev, ktime_t expires, | |||
| 95 | */ | 95 | */ |
| 96 | int tick_program_event(ktime_t expires, int force) | 96 | int tick_program_event(ktime_t expires, int force) |
| 97 | { | 97 | { |
| 98 | struct clock_event_device *dev = __get_cpu_var(tick_cpu_device).evtdev; | 98 | struct clock_event_device *dev = __this_cpu_read(tick_cpu_device.evtdev); |
| 99 | 99 | ||
| 100 | return tick_dev_program_event(dev, expires, force); | 100 | return tick_dev_program_event(dev, expires, force); |
| 101 | } | 101 | } |
| @@ -167,7 +167,7 @@ int tick_oneshot_mode_active(void) | |||
| 167 | int ret; | 167 | int ret; |
| 168 | 168 | ||
| 169 | local_irq_save(flags); | 169 | local_irq_save(flags); |
| 170 | ret = __get_cpu_var(tick_cpu_device).mode == TICKDEV_MODE_ONESHOT; | 170 | ret = __this_cpu_read(tick_cpu_device.mode) == TICKDEV_MODE_ONESHOT; |
| 171 | local_irq_restore(flags); | 171 | local_irq_restore(flags); |
| 172 | 172 | ||
| 173 | return ret; | 173 | return ret; |
