• Mark Rutland's avatar
    clocksource/drivers/arm_arch_timer: Initialize evtstrm after finalizing cpucaps · 166b76a0
    Mark Rutland authored
    We attempt to initialize each CPU's arch_timer event stream in
    arch_timer_evtstrm_enable(), which we call from the
    arch_timer_starting_cpu() cpu hotplug callback which is registered early
    in boot. As this is registered before we initialize the system cpucaps,
    the test for ARM64_HAS_ECV will always be false for CPUs present at boot
    time, and will only be taken into account for CPUs onlined late
    (including those which are hotplugged out and in again).
    
    Due to this, CPUs present and boot time may not use the intended divider
    and scale factor to generate the event stream, and may differ from other
    CPUs.
    
    Correct this by only initializing the event stream after cpucaps have been
    finalized, registering a separate CPU hotplug callback for the event stream
    configuration. Since the caps must be finalized by this point, use
    cpus_have_final_cap() to verify this.
    Signed-off-by: default avatarMark Rutland <mark.rutland@arm.com>
    Acked-by: default avatarMarc Zyngier <maz@kernel.org>
    Acked-by: default avatarThomas Gleixner <tglx@linutronix.de>
    Cc: Daniel Lezcano <daniel.lezcano@linaro.org>
    Cc: Suzuki K Poulose <suzuki.poulose@arm.com>
    Cc: Will Deacon <will@kernel.org>
    Signed-off-by: default avatarCatalin Marinas <catalin.marinas@arm.com>
    166b76a0
arm_arch_timer.c 47.4 KB