Re: The "clockevents: Prevent timer interrupt starvation" patch causes lockups

From: Hanabishi

Date: Tue Apr 14 2026 - 14:31:33 EST


On 14/04/2026 18:04, Frederic Weisbecker wrote:
Can you try the following?

diff --git a/kernel/time/clockevents.c b/kernel/time/clockevents.c
index b4d730604972..5c6dfd6bed28 100644
--- a/kernel/time/clockevents.c
+++ b/kernel/time/clockevents.c
@@ -100,6 +100,7 @@ static int __clockevents_switch_state(struct clock_event_device *dev,
/* The clockevent device is getting replaced. Shut it down. */
case CLOCK_EVT_STATE_SHUTDOWN:
+ dev->next_event_forced = 0;
if (dev->set_state_shutdown)
return dev->set_state_shutdown(dev);
return 0;
@@ -127,10 +128,12 @@ static int __clockevents_switch_state(struct clock_event_device *dev,
clockevent_get_state(dev)))
return -EINVAL;
- if (dev->set_state_oneshot_stopped)
+ if (dev->set_state_oneshot_stopped) {
+ dev->next_event_forced = 0;
return dev->set_state_oneshot_stopped(dev);
- else
+ } else {
return -ENOSYS;
+ }
default:
return -ENOSYS;
diff --git a/kernel/time/tick-broadcast.c b/kernel/time/tick-broadcast.c
index 7e57fa31ee26..115e0bf01276 100644
--- a/kernel/time/tick-broadcast.c
+++ b/kernel/time/tick-broadcast.c
@@ -108,6 +108,7 @@ static struct clock_event_device *tick_get_oneshot_wakeup_device(int cpu)
static void tick_oneshot_wakeup_handler(struct clock_event_device *wd)
{
+ wd->next_event_forced = 0;
/*
* If we woke up early and the tick was reprogrammed in the
* meantime then this may be spurious but harmless.

This patch doesn't help me unfortunately. Thanks.