summaryrefslogtreecommitdiffstats
path: root/fs/fuse/control.c
diff options
context:
space:
mode:
authorPaul E. McKenney <paulmck@kernel.org>2020-10-30 21:11:24 +0100
committerPaul E. McKenney <paulmck@kernel.org>2020-11-20 04:37:17 +0100
commitbfb3aa735f82c8d98b32a669934ee7d6b346264d (patch)
tree3192bd1a1cc4a381e5bcac13e0a72f31df4ce061 /fs/fuse/control.c
parentrcu: Fix a typo in rcu_blocking_is_gp() header comment (diff)
downloadlinux-bfb3aa735f82c8d98b32a669934ee7d6b346264d.tar.xz
linux-bfb3aa735f82c8d98b32a669934ee7d6b346264d.zip
rcu: Do not report strict GPs for outgoing CPUs
An outgoing CPU is marked offline in a stop-machine handler and most of that CPU's services stop at that point, including IRQ work queues. However, that CPU must take another pass through the scheduler and through a number of CPU-hotplug notifiers, many of which contain RCU readers. In the past, these readers were not a problem because the outgoing CPU has interrupts disabled, so that rcu_read_unlock_special() would not be invoked, and thus RCU would never attempt to queue IRQ work on the outgoing CPU. This changed with the advent of the CONFIG_RCU_STRICT_GRACE_PERIOD Kconfig option, in which rcu_read_unlock_special() is invoked upon exit from almost all RCU read-side critical sections. Worse yet, because interrupts are disabled, rcu_read_unlock_special() cannot immediately report a quiescent state and will therefore attempt to defer this reporting, for example, by queueing IRQ work. Which fails with a splat because the CPU is already marked as being offline. But it turns out that there is no need to report this quiescent state because rcu_report_dead() will do this job shortly after the outgoing CPU makes its final dive into the idle loop. This commit therefore makes rcu_read_unlock_special() refrain from queuing IRQ work onto outgoing CPUs. Fixes: 44bad5b3cca2 ("rcu: Do full report for .need_qs for strict GPs") Signed-off-by: Paul E. McKenney <paulmck@kernel.org> Cc: Jann Horn <jannh@google.com>
Diffstat (limited to 'fs/fuse/control.c')
0 files changed, 0 insertions, 0 deletions