[PATCH v3 3/4] clocksource/timer-econet-en751221: Disable IRQ until cevt registered

From: Caleb James DeLisle

Date: Sat May 16 2026 - 14:29:17 EST


Eliminate a race condition where cevt_interrupt may trigger before
clockevents_config_and_register has been called, and dev->event_handler
is at that point NULL.

Signed-off-by: Caleb James DeLisle <cjd@xxxxxxxx>
---
drivers/clocksource/timer-econet-en751221.c | 7 ++++---
1 file changed, 4 insertions(+), 3 deletions(-)

diff --git a/drivers/clocksource/timer-econet-en751221.c b/drivers/clocksource/timer-econet-en751221.c
index 155471f68e6f..ed750e39cc4f 100644
--- a/drivers/clocksource/timer-econet-en751221.c
+++ b/drivers/clocksource/timer-econet-en751221.c
@@ -104,12 +104,11 @@ static int cevt_init_cpu(uint cpu)
reg = ioread32(reg_ctl(cpu)) | ctl_bit_enabled(cpu);
iowrite32(reg, reg_ctl(cpu));

- enable_percpu_irq(cd->irq, IRQ_TYPE_NONE);
-
- /* Do this last because it synchronously configures the timer */
clockevents_config_and_register(cd, econet_timer.freq_hz,
ECONET_MIN_DELTA, ECONET_MAX_DELTA);

+ enable_percpu_irq(cd->irq, IRQ_TYPE_NONE);
+
return 0;
}

@@ -177,6 +176,8 @@ static int __init timer_init(struct device_node *np)
goto out_membase;
}

+ irq_set_status_flags(econet_timer.irq, IRQ_NOAUTOEN);
+
ret = request_percpu_irq(econet_timer.irq, cevt_interrupt, np->name,
&econet_timer_pcpu);

--
2.39.5