[PATCH v8 03/10] clocksource: arm_arch_timer: change clocksource name if CP15 unavailable
Andy Lutomirski
luto at amacapital.net
Mon Aug 4 17:10:57 PDT 2014
On Sun, Aug 3, 2014 at 3:16 AM, Nathan Lynch <nathan_lynch at mentor.com> wrote:
> The arm and arm64 VDSOs need CP15 access to the architected counter.
> If this is unavailable (which is allowed by ARM v7), indicate this by
> changing the clocksource name to "arch_mem_counter" before registering
> the clocksource.
>
> Suggested by Stephen Boyd.
>
> Signed-off-by: Nathan Lynch <nathan_lynch at mentor.com>
> ---
> drivers/clocksource/arm_arch_timer.c | 12 ++++++++++--
> 1 file changed, 10 insertions(+), 2 deletions(-)
>
> diff --git a/drivers/clocksource/arm_arch_timer.c b/drivers/clocksource/arm_arch_timer.c
> index 5163ec13429d..c99afdf12e98 100644
> --- a/drivers/clocksource/arm_arch_timer.c
> +++ b/drivers/clocksource/arm_arch_timer.c
> @@ -429,11 +429,19 @@ static void __init arch_counter_register(unsigned type)
> u64 start_count;
>
> /* Register the CP15 based counter if we have one */
> - if (type & ARCH_CP15_TIMER)
> + if (type & ARCH_CP15_TIMER) {
> arch_timer_read_counter = arch_counter_get_cntvct;
> - else
> + } else {
> arch_timer_read_counter = arch_counter_get_cntvct_mem;
>
> + /* If the clocksource name is "arch_sys_counter" the
> + * VDSO will attempt to read the CP15-based counter.
> + * Ensure this does not happen when CP15-based
> + * counter is not available.
> + */
> + clocksource_counter.name = "arch_mem_counter";
> + }
> +
> start_count = arch_timer_read_counter();
> clocksource_register_hz(&clocksource_counter, arch_timer_rate);
> cyclecounter.mult = clocksource_counter.mult;
> --
> 1.9.3
>
FWIW, x86 does this using the archdata field in the clocksource, but I
see nothing wrong with doing it this way instead.
--Andy
More information about the linux-arm-kernel
mailing list