[patch 00/14] tasklets: Replace the spin wait loops and make it RT safe

From: Thomas Gleixner
Date: Tue Mar 09 2021 - 03:46:07 EST


This is a follow up to the review comments of the series which makes
softirq processing PREEMPT_RT safe:

https://lore.kernel.org/r/20201207114743.GK3040@xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

Peter suggested to replace the spin waiting in tasklet_disable() and
tasklet_kill() with wait_event(). This also gets rid of the ill defined
sched_yield() in tasklet_kill().

Analyzing all usage sites of tasklet_disable() and tasklet_unlock_wait() we
found that most of them are safe to be converted to a sleeping wait.

Only a few instances invoke tasklet_disable() from atomic context. A few
bugs which have been found in course of this analysis have been already
addressed seperately.

The following series takes the following approach:

1) Provide a variant of tasklet_disable() which can be invoked from
atomic contexts

2) Convert the usage sites which cannot be easily changed to a
sleepable wait to use this new function

3) Replace the spin waits in tasklet_disable() and tasklet_kill() with
sleepable variants.

If this is agreed on then the merging can be either done in bulk or the
first 4 patches could be applied on top of rc2 and tagged for consumption
in the relevant subsystem trees (networking, pci, firewire). In this case
the last patch which changes the implementation of tasklet_disable() has to
be post-poned until all other changes have reached mainline.

The series is also available from git:

git://git.kernel.org/pub/scm/linux/kernel/git/tglx/devel.git tasklet-2021-03-09

Thanks,

tglx