[PATCH v2 1/2] watchdog/perf: Provide function for adjusting the event period
Andrew Morton
akpm at linux-foundation.org
Mon May 12 16:07:47 PDT 2025
On Mon, 12 May 2025 21:09:18 +0800 Yicong Yang <yangyicong at huawei.com> wrote:
> From: Yicong Yang <yangyicong at hisilicon.com>
>
> Architecture's using perf events for hard lockup detection needs to
> convert the watchdog_thresh to the event's period, some architecture
> for example arm64 perform this conversion using the CPU's maximum
> frequency which will be acquired by cpufreq. However by the time
> the lockup detector's initialized the cpufreq driver may not be
> initialized, thus launch a watchdog with inaccurate period. Provide
> a function hardlockup_detector_perf_adjust_period() to allowing
> adjust the event period. Then architecture can update with more
> accurate period if cpufreq is initialized.
>
> ...
>
> +/**
> + * hardlockup_detector_perf_adjust_period - Adjust the event period due
> + * to cpu frequency change
> + * @cpu: The CPU whose event period will be adjusted
> + * @period: The target period to be set
> + */
> +void hardlockup_detector_perf_adjust_period(int cpu, u64 period)
> +{
> + struct perf_event *event = per_cpu(watchdog_ev, cpu);
> +
> + if (!(watchdog_enabled & WATCHDOG_HARDLOCKUP_ENABLED))
> + return;
Is this the right thing to do? Would it be better to proceed with the
alteration of the period so that the state is correct if
WATCHDOG_HARDLOCKUP_ENABLED is later enabled? (If that's possible).
> + if (!event)
> + return;
> +
> + if (event->attr.sample_period == period)
> + return;
> +
> + if (perf_event_period(event, period))
> + pr_err("failed to change period to %llu\n", period);
> +}
> +
> /**
> * hardlockup_detector_perf_stop - Globally stop watchdog events
> *
> --
> 2.24.0
More information about the linux-arm-kernel
mailing list