linux/drivers/clocksource
Alexey Klimov 31f7987406 clocksource/drivers/exynos_mct: Use container_of() instead of this_cpu_ptr()
Since evt structure is embedded in per-CPU mevt structure it's
definitely faster to use container_of() to get access to mevt
if we have evt (for example as incoming function argument) instead
of more expensive approach with this_cpu_ptr(&percpu_mct_tick).
this_cpu_ptr() on per-CPU mevt structure leads to access to cp15
to get cpu id and arithmetic operations.
Container_of() is cheaper since it's just one asm instruction.
This should work if used evt pointer is correct and owned by
local mevt structure.

For example, before this patch set_state_shutdown() looks like:

 4a4:	e92d4010 	push	{r4, lr}
 4a8:	e3004000 	movw	r4, #0
 4ac:	ebfffffe 	bl	0 <debug_smp_processor_id>
 4b0:	e3003000 	movw	r3, #0
 4b4:	e3404000 	movt	r4, #0
 4b8:	e3403000 	movt	r3, #0
 4bc:	e7933100 	ldr	r3, [r3, r0, lsl #2]
 4c0:	e0844003 	add	r4, r4, r3
 4c4:	e59400c0 	ldr	r0, [r4, #192]	; 0xc0
 4c8:	ebffffd4 	bl	420 <exynos4_mct_tick_stop.isra.1>
 4cc:	e3a00000 	mov	r0, #0
 4d0:	e8bd8010 	pop	{r4, pc}

With this patch:

 4a4:	e92d4010 	push	{r4, lr}
 4a8:	e59000c0 	ldr	r0, [r0, #192]	; 0xc0
 4ac:	ebffffdb 	bl	420 <exynos4_mct_tick_stop.isra.1>
 4b0:	e3a00000 	mov	r0, #0
 4b4:	e8bd8010 	pop	{r4, pc}

Also, for me size of exynos_mct.o decreased from 84588 bytes
to 83956.

Signed-off-by: Alexey Klimov <alexey.klimov@linaro.org>
Signed-off-by: Daniel Lezcano <daniel.lezcano@linaro.org>
Reviewed-by: Krzysztof Kozlowski <k.kozlowski@samsung.com>
2015-10-15 17:42:03 +02:00
..
acpi_pm.c treewide: Fix printks with 0x%# 2013-08-27 10:49:38 +02:00
arm_arch_timer.c clockevents/drivers/arm_arch_timer: Migrate to new 'set-state' interface 2015-08-06 12:16:41 +02:00
arm_global_timer.c clockevents/drivers/arm_global_timer: Migrate to new 'set-state' interface 2015-08-06 12:16:41 +02:00
armv7m_systick.c clocksource/drivers/armv7m_systick: Add ARM System timer driver 2015-06-02 12:10:14 +02:00
asm9260_timer.c clockevents/drivers/asm9260: Migrate to new 'set-state' interface 2015-08-10 11:40:25 +02:00
bcm2835_timer.c clockevents/drivers/bcm2835: Migrate to new 'set-state' interface 2015-08-06 12:16:41 +02:00
bcm_kona_timer.c clockevents/drivers/bcm_kona: Migrate to new 'set-state' interface 2015-08-06 12:16:42 +02:00
cadence_ttc_timer.c Merge branch 'timers-core-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip 2015-09-01 14:04:50 -07:00
clksrc_st_lpc.c clocksource: sti: Provide 'use timer as sched clock' capability 2015-07-23 17:07:26 +01:00
clksrc-dbx500-prcmu.c clocksource: dbx500-prcmu: Switch to sched_clock_register() 2013-07-30 11:24:52 -07:00
clksrc-of.c of: consolidate linker section OF match table declarations 2014-05-20 14:25:24 -05:00
clps711x-timer.c clockevents/drivers/clps711x: Migrate to new 'set-state' interface 2015-08-10 11:40:27 +02:00
cs5535-clockevt.c clockevents/drivers/cs5535: Migrate to new 'set-state' interface 2015-08-06 12:16:42 +02:00
dummy_timer.c clockevents/drivers/dummy_timer: Migrate to new 'set-state' interface 2015-08-10 11:40:28 +02:00
dw_apb_timer_of.c clocksource/drivers/dw_apb_timers_of: Fix IO endianness causing time jumps 2015-03-31 09:15:57 +02:00
dw_apb_timer.c clockevents/drivers/dw_apb_timer: Add dynamic irq flag to the timer 2015-08-10 11:40:53 +02:00
em_sti.c clocksource/drivers/em_sti: Remove unneeded memset()s 2015-10-15 17:41:59 +02:00
exynos_mct.c clocksource/drivers/exynos_mct: Use container_of() instead of this_cpu_ptr() 2015-10-15 17:42:03 +02:00
fsl_ftm_timer.c clockevents/drivers/fsl_ftm: Migrate to new 'set-state' interface 2015-08-10 11:40:29 +02:00
h8300_timer8.c clocksource/drivers/h8300_*: Remove unneeded memset()s 2015-10-15 17:42:02 +02:00
h8300_timer16.c clocksource/drivers/h8300_*: Remove unneeded memset()s 2015-10-15 17:42:02 +02:00
h8300_tpu.c clocksource/drivers/h8300_*: Remove unneeded memset()s 2015-10-15 17:42:02 +02:00
i8253.c clockevents/drivers/i8253: Migrate to new 'set-state' interface 2015-08-10 11:40:30 +02:00
Kconfig - New Device Support 2015-09-04 11:35:03 -07:00
Makefile - New Device Support 2015-09-04 11:35:03 -07:00
meson6_timer.c clockevents/drivers/meson6: Migrate to new 'set-state' interface 2015-08-10 11:40:30 +02:00
metag_generic.c clockevents/drivers/metag_generic: Migrate to new 'set-state' interface 2015-08-10 11:40:31 +02:00
mips-gic-timer.c Merge branch 'upstream' of git://git.linux-mips.org/pub/scm/ralf/upstream-linus 2015-09-03 16:55:55 -07:00
mmio.c clocksource: Fix clocksource_mmio_readX_down 2014-05-23 09:19:40 +02:00
moxart_timer.c clockevents/drivers/moxart: Migrate to new 'set-state' interface 2015-08-10 11:40:32 +02:00
mtk_timer.c clocksource/drivers/mediatek: Use GPT as sched clock source 2015-10-15 17:41:58 +02:00
mxs_timer.c clockevents/drivers/mxs: Migrate to new 'set-state' interface 2015-08-10 11:40:34 +02:00
nomadik-mtu.c clockevents/drivers/nomadik-mtu: Migrate to new 'set-state' interface 2015-08-10 11:40:34 +02:00
pxa_timer.c clockevents/drivers/pxa: Migrate to new 'set-state' interface 2015-08-10 11:40:35 +02:00
qcom-timer.c clockevents/drivers/qcom: Migrate to new 'set-state' interface 2015-08-10 11:40:36 +02:00
rockchip_timer.c clocksource/drivers/rockchip: Fix bad NO_IRQ usage 2015-09-29 14:33:34 +02:00
samsung_pwm_timer.c clockevents/drivers/samsung_pwm: Migrate to new 'set-state' interface 2015-08-10 11:40:37 +02:00
scx200_hrt.c clocksource: scx200_hrt: Fix the build 2012-02-22 13:25:16 +01:00
sh_cmt.c clocksource/drivers/sh_cmt: Remove unneeded memset() in sh_cmt_setup() 2015-10-15 17:42:00 +02:00
sh_mtu2.c clockevents/drivers/sh_mtu2: Migrate to new 'set-state' interface 2015-08-10 11:40:38 +02:00
sh_tmu.c clocksource/drivers/sh_tmu: Fix traceback spotted in -next 2015-08-10 11:40:57 +02:00
sun4i_timer.c clockevents/drivers/sun4i: Migrate to new 'set-state' interface 2015-08-10 11:40:40 +02:00
tcb_clksrc.c clockevents/drivers/tcb_clksrc: Migrate to new 'set-state' interface 2015-08-10 11:40:52 +02:00
tegra20_timer.c clockevents/drivers/tegra20: Migrate to new 'set-state' interface 2015-08-10 11:40:40 +02:00
time-armada-370-xp.c clockevents/drivers/time-armada-370-xp: Migrate to new 'set-state' interface 2015-08-10 11:40:41 +02:00
time-efm32.c clockevents/drivers/efm32: Migrate to new 'set-state' interface 2015-08-10 11:40:42 +02:00
time-lpc32xx.c clocksource/drivers/lpc32xx: Add the lpc32xx timer driver 2015-06-02 12:10:10 +02:00
time-orion.c clockevents/drivers/orion: Migrate to new 'set-state' interface 2015-08-10 11:40:42 +02:00
time-pistachio.c CLOCKSOURCE: Add Pistachio clocksource-only driver 2015-09-03 12:08:07 +02:00
timer-atlas7.c clockevents/drivers/atlas7: Migrate to new 'set-state' interface 2015-08-10 11:40:43 +02:00
timer-atmel-pit.c clockevents/drivers/timer-atmel-pit: Fix typo in structure initialization 2015-08-10 11:40:56 +02:00
timer-atmel-st.c clockevents/drivers/atmel-st: Migrate to new 'set-state' interface 2015-08-10 11:40:44 +02:00
timer-digicolor.c clockevents/drivers/digicolor: Migrate to new 'set-state' interface 2015-08-10 11:40:45 +02:00
timer-imx-gpt.c Merge branch 'timers-core-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip 2015-09-01 14:04:50 -07:00
timer-integrator-ap.c clockevents/drivers/integrator: Migrate to new 'set-state' interface 2015-08-10 11:40:46 +02:00
timer-keystone.c clocksource/drivers/keystone: Fix bad NO_IRQ usage 2015-09-29 14:33:51 +02:00
timer-prima2.c clockevents/drivers/prima2: Migrate to new 'set-state' interface 2015-08-10 11:40:47 +02:00
timer-sp804.c clockevents/drivers/timer-sp804: Migrate to new 'set-state' interface 2015-08-10 11:40:55 +02:00
timer-sp.h ARM: 8366/1: move Dual-Timer SP804 driver to drivers/clocksource 2015-06-02 09:58:18 +01:00
timer-stm32.c clockevents/drivers/stm32: Migrate to new 'set-state' interface 2015-08-10 11:40:48 +02:00
timer-sun5i.c clockevents/drivers/sun5i: Migrate to new 'set-state' interface 2015-08-10 11:40:49 +02:00
timer-u300.c clockevents/drivers/u300: Migrate to new 'set-state' interface 2015-08-10 11:40:49 +02:00
versatile.c clocksource: versatile: Adapt for Versatile AB and PB boards 2015-01-29 14:02:16 +01:00
vf_pit_timer.c clockevents/drivers/vf_pit: Migrate to new 'set-state' interface 2015-08-10 11:40:50 +02:00
vt8500_timer.c clockevents/drivers/vt8500: Migrate to new 'set-state' interface 2015-08-10 11:40:51 +02:00
zevio-timer.c clockevents/drivers/zevio: Migrate to new 'set-state' interface 2015-08-10 11:40:51 +02:00