Message ID | 20220212104349.14266-4-lecopzer.chen@mediatek.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | Support hld based on Pseudo-NMI for arm64 | expand |
On Sat 2022-02-12 18:43:47, Lecopzer Chen wrote: > From: Pingfan Liu <kernelfans@gmail.com> > > from: Pingfan Liu <kernelfans@gmail.com> > > hardlockup_detector_event_create() should create perf_event on the > current CPU. Preemption could not get disabled because > perf_event_create_kernel_counter() allocates memory. Instead, > the CPU locality is achieved by processing the code in a per-CPU > bound kthread. > > Add a check to prevent mistakes when calling the code in another > code path. > > Signed-off-by: Pingfan Liu <kernelfans@gmail.com> > Co-developed-by: Lecopzer Chen <lecopzer.chen@mediatek.com> > Signed-off-by: Lecopzer Chen <lecopzer.chen@mediatek.com> Reviewed-by: Petr Mladek <pmladek@suse.com> Best Regards, Petr
diff --git a/kernel/watchdog_hld.c b/kernel/watchdog_hld.c index 247bf0b1582c..96b717205952 100644 --- a/kernel/watchdog_hld.c +++ b/kernel/watchdog_hld.c @@ -165,10 +165,16 @@ static void watchdog_overflow_callback(struct perf_event *event, static int hardlockup_detector_event_create(void) { - unsigned int cpu = smp_processor_id(); + unsigned int cpu; struct perf_event_attr *wd_attr; struct perf_event *evt; + /* + * Preemption is not disabled because memory will be allocated. + * Ensure CPU-locality by calling this in per-CPU kthread. + */ + WARN_ON(!is_percpu_thread()); + cpu = raw_smp_processor_id(); wd_attr = &wd_hw_attr; wd_attr->sample_period = hw_nmi_get_sample_period(watchdog_thresh);