Re: [4.19 stable-rt PATCH] tasklet: Fix UP case for tasklet CHAINED state
From: Tom Zanussi <zanussi@kernel.org>
Date: 2020-06-09 16:59:19
Also in:
lkml
From: Tom Zanussi <zanussi@kernel.org>
Date: 2020-06-09 16:59:19
Also in:
lkml
Hi Sebastian, On Tue, 2020-06-09 at 18:38 +0200, Sebastian Andrzej Siewior wrote:
On 2020-06-09 11:21:44 [-0500], Tom Zanussi wrote:quoted
index 73dae64bfc9c..4f37a6173ab9 100644--- a/kernel/softirq.c +++ b/kernel/softirq.c@@ -947,10 +947,12 @@ static void __tasklet_schedule_common(structtasklet_struct *t, * is locked before adding it to the list. */ if (test_bit(TASKLET_STATE_SCHED, &t->state)) { +#if defined(CONFIG_SMP) if (test_and_set_bit(TASKLET_STATE_CHAINED, &t->state)) { tasklet_unlock(t); return; } +#endif t->next = NULL; *head->tail = t; head->tail = &(t->next);@@ -1044,7 +1046,11 @@ static void tasklet_action_common(structsoftirq_action *a, again: t->func(t->data); +#if !defined(CONFIG_SMP) + while (!tasklet_tryunlock(t)) { +#else while (cmpxchg(&t->state, TASKLET_STATEF_RC, 0) != TASKLET_STATEF_RC) { +#endifThis is still needed for RT && !SMP
Yes, you're right - I'll change this and repost after testing all cases. Thanks, Tom
quoted
/* * If it got disabled meanwhile, bail out: */Sebastian