--- x/kernel/softirq.c +++ y/kernel/softirq.c @@ -924,7 +924,6 @@ static void tasklet_action_common(struct tl_head->tail = &tl_head->head; local_irq_enable(); - tasklet_lock_callback(); while (list) { struct tasklet_struct *t = list; @@ -944,7 +943,6 @@ static void tasklet_action_common(struct } } tasklet_unlock(t); - tasklet_callback_sync_wait_running(); continue; } tasklet_unlock(t); @@ -957,7 +955,6 @@ static void tasklet_action_common(struct __raise_softirq_irqoff(softirq_nr); local_irq_enable(); } - tasklet_unlock_callback(); } static __latent_entropy void tasklet_action(void) @@ -1006,11 +1003,10 @@ void tasklet_unlock_spin_wait(struct tas while (test_bit(TASKLET_STATE_RUN, &(t)->state)) { if (IS_ENABLED(CONFIG_PREEMPT_RT)) { /* - * Prevent a live lock when current preempted soft - * interrupt processing or prevents ksoftirqd from - * running. + * wait_on_bit(TASKLET_STATE_RUN) + * https://lore.kernel.org/lkml/20260524004526.1046-1-hdanton@sina.com/ */ - tasklet_callback_cancel_wait_running(); + tasklet_unlock_wait(t); } else { cpu_relax(); }