Paul E. McKenney
4041b8e4fd
rcu: Migrate callbacks earlier in the CPU-offline timeline
...
RCU callbacks must be migrated away from an outgoing CPU, and this is
done near the end of the CPU-hotplug operation, after the outgoing CPU is
long gone. Unfortunately, this means that other CPU-hotplug callbacks
can execute while the outgoing CPU's callbacks are still immobilized
on the long-gone CPU's callback lists. If any of these CPU-hotplug
callbacks must wait, either directly or indirectly, for the invocation
of any of the immobilized RCU callbacks, the system will hang.
This commit avoids such hangs by migrating the callbacks away from the
outgoing CPU immediately upon its departure, shortly after the return
from __cpu_die() in takedown_cpu(). Thus, RCU is able to advance these
callbacks and invoke them, which allows all the after-the-fact CPU-hotplug
callbacks to wait on these RCU callbacks without risk of a hang.
While in the neighborhood, this commit also moves rcu_send_cbs_to_orphanage()
and rcu_adopt_orphan_cbs() under a pre-existing #ifdef to avoid including
dead code on the one hand and to avoid define-without-use warnings on the
other hand.
Reported-by: Jeffrey Hugo <jhugo@codeaurora.org>
Link: http://lkml.kernel.org/r/db9c91f6-1b17-6136-84f0-03c3c2581ab4@codeaurora.org
Signed-off-by: Paul E. McKenney <paulmck@linux.vnet.ibm.com>
Cc: Thomas Gleixner <tglx@linutronix.de>
Cc: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
Cc: Ingo Molnar <mingo@kernel.org>
Cc: Anna-Maria Gleixner <anna-maria@linutronix.de>
Cc: Boris Ostrovsky <boris.ostrovsky@oracle.com>
Cc: Richard Weinberger <richard@nod.at>
Signed-off-by: Twisted <36546624+TwistedPrime@users.noreply.github.com>
Signed-off-by: Sorayukii <sorayukii69@gmail.com>
2026-05-15 17:49:31 +07:00
..
bpf
treewide: Backport new vmalloc for large performance benefits
2026-05-15 17:48:25 +07:00
configs
debug
UPSTREAM: kdb: use correct pointer when 'btc' calls 'btt'
2022-02-21 16:30:05 +01:00
events
Merge branch 'android-4.9-q' of https://android.googlesource.com/kernel/common into lineage-20
2023-01-19 15:42:12 +01:00
gcov
Merge branch 'android-4.9-q' of https://android.googlesource.com/kernel/common into lineage-20
2023-01-19 15:42:12 +01:00
irq
Merge remote-tracking branch 'common/android-4.9-q' into android12-4.9-sdm845
2022-07-18 14:05:31 +03:00
livepatch
locking
BACKPORT: rcu: Ports some of RCU's taken from k4.14
2026-05-15 17:49:30 +07:00
power
treewide: Backport new vmalloc for large performance benefits
2026-05-15 17:48:25 +07:00
printk
Merge remote-tracking branch 'common/android-4.9-q' into android12-4.9-sdm845
2022-06-12 01:39:01 +03:00
rcu
rcu: Migrate callbacks earlier in the CPU-offline timeline
2026-05-15 17:49:31 +07:00
sched
sched,rcu: Make cond_resched() provide RCU quiescent state
2026-05-15 17:49:30 +07:00
time
BACKPORT: rcu: Ports some of RCU's taken from k4.14
2026-05-15 17:49:30 +07:00
trace
Merge branch 'android-4.9-q' of https://android.googlesource.com/kernel/common into lineage-20
2023-01-19 15:42:12 +01:00
.gitignore
BACKPORT: Provide in-kernel headers to make extending kernel easier
2019-07-03 14:30:53 -04:00
acct.c
acct: fix potential integer overflow in encode_comp_t()
2023-01-07 12:07:31 +01:00
async.c
kernel/async.c: revert "async: simplify lowest_in_progress()"
2018-02-17 13:21:18 +01:00
audit.c
Merge branch 'android-4.9-q' of https://android.googlesource.com/kernel/common into lineage-18.1-caf-sdm845
2021-04-26 01:27:02 +03:00
audit.h
audit: fix a net reference leak in audit_list_rules_send()
2021-04-07 12:05:41 +02:00
audit_fsnotify.c
audit_tree.c
audit_watch.c
audit: CONFIG_CHANGE don't log internal bookkeeping as an event
2020-10-01 20:40:07 +02:00
auditfilter.c
audit: fix a net reference leak in audit_list_rules_send()
2021-04-07 12:05:41 +02:00
auditsc.c
Merge android-4.9.204(72e8598) into msm-4.9
2020-01-06 18:13:26 +08:00
backtracetest.c
bounds.c
kbuild: fix kernel/bounds.c 'W=1' warning
2018-11-13 11:16:57 -08:00
capability.c
cfi.c
ANDROID: cfi: Remove unused variable in ptr_to_check_fn
2019-03-06 18:27:16 +00:00
cgroup.c
Merge remote-tracking branch 'common/android-4.9-q' into android12-4.9-sdm845
2022-07-18 14:05:31 +03:00
cgroup_freezer.c
cgroup_pids.c
cgroup: pids: use atomic64_t for pids->limit
2019-12-21 10:42:02 +01:00
compat.c
configs.c
context_tracking.c
cpu.c
rcu: Migrate callbacks earlier in the CPU-offline timeline
2026-05-15 17:49:31 +07:00
cpu_pm.c
Merge branch 'android-4.9-q' of https://android.googlesource.com/kernel/common into HEAD
2020-06-30 02:33:58 +03:00
cpuset.c
Merge android-4.9.183 ( a80a7ab) into msm-4.9
2019-08-07 16:30:28 +08:00
crash_dump.c
cred.c
memcg: account security cred as well to kmemcg
2020-01-12 11:24:13 +01:00
delayacct.c
BACKPORT: delayacct: track delays from thrashing cache pages
2019-03-22 14:08:39 -07:00
dma.c
exec_domain.c
exit.c
Merge remote-tracking branch 'common/android-4.9-q' into android12-4.9-sdm845
2022-09-06 06:20:26 +03:00
extable.c
extable: Make init_kernel_text() global
2021-06-06 18:42:18 +03:00
fork.c
BACKPORT: rcu: Ports some of RCU's taken from k4.14
2026-05-15 17:49:30 +07:00
freezer.c
futex.c
mm, futex: fix shared futex pgoff on shmem huge page
2021-07-11 12:46:40 +02:00
gen_kheaders.sh
BACKPORT: kheaders: Do not regenerate archive if config is not changed
2019-07-03 14:31:16 -04:00
groups.c
treewide: Backport new vmalloc for large performance benefits
2026-05-15 17:48:25 +07:00
hung_task.c
Merge android-4.9.170 ( 1ef64da) into msm-4.9
2019-05-30 14:15:13 +08:00
irq_work.c
jump_label.c
jump_label: Disable jump labels in __exit code
2021-06-06 18:42:18 +03:00
kallsyms.c
kallsyms: strip the .cfi postfix from symbols with CONFIG_CFI_CLANG
2018-02-28 15:09:58 -08:00
kcmp.c
Kconfig.freezer
Kconfig.hz
Kconfig.locks
locking/rwsem: for rwsem prio aware enhancement
2019-01-08 16:14:39 +08:00
Kconfig.preempt
kcov.c
This is the 4.9.117 stable release
2018-08-03 08:50:05 +02:00
kexec.c
kexec_core.c
treewide: Backport new vmalloc for large performance benefits
2026-05-15 17:48:25 +07:00
kexec_file.c
Merge remote-tracking branch 'common/android-4.9-q' into android12-4.9-sdm845
2022-07-18 14:05:31 +03:00
kexec_internal.h
kheaders.c
BACKPORT: kheaders: Move from proc to sysfs
2019-07-03 14:31:02 -04:00
kmod.c
usermodehelper: reset umask to default before executing user process
2020-10-14 09:48:14 +02:00
kprobes.c
This is the 4.9.327 stable release
2022-09-05 14:02:59 +02:00
ksysfs.c
kthread.c
Merge branch 'android-4.9-q' of https://android.googlesource.com/kernel/common into lineage-18.1-caf-sdm845
2021-07-22 02:11:11 +03:00
latencytop.c
Makefile
Merge branch 'android-4.9-q' of https://android.googlesource.com/kernel/common into lineage-18.1-caf-sdm845
2021-04-26 01:27:02 +03:00
membarrier.c
memremap.c
mm, devm_memremap_pages: kill mapping "System RAM" support
2019-01-13 10:03:51 +01:00
module-internal.h
module.c
treewide: Backport new vmalloc for large performance benefits
2026-05-15 17:48:25 +07:00
module_signing.c
notifier.c
x86/mm: split vmalloc_sync_all()
2020-04-02 17:20:26 +02:00
nsproxy.c
padata.c
padata: purge get_cpu and reorder_via_wq from padata_do_serial
2020-05-27 16:41:53 +02:00
panic.c
Merge android-4.9.197(e9766ef) into msm-4.9
2019-12-06 19:41:21 +08:00
params.c
pid.c
UPSTREAM: locking/atomic, kref: Add KREF_INIT()
2021-01-05 16:00:48 +00:00
pid_namespace.c
memcg: enable accounting for pids in nested pid namespaces
2021-09-22 11:43:08 +02:00
profile.c
profiling: fix shift-out-of-bounds bugs
2021-09-26 13:36:18 +02:00
ptrace.c
ptrace: Reimplement PTRACE_KILL by always sending SIGKILL
2022-06-14 16:52:28 +02:00
range.c
reboot.c
reboot: fix overflow parsing reboot cpu number
2020-11-18 18:26:32 +01:00
relay.c
kernel/relay.c: fix memleak on destroy relay channel
2020-08-26 10:29:03 +02:00
resource.c
Merge android-4.9.96 ( 320d53a) into msm-4.9
2018-05-11 05:38:48 -07:00
seccomp.c
seccomp: Add missing return in non-void function
2021-03-03 17:44:43 +01:00
signal.c
BACKPORT: rcu: Ports some of RCU's taken from k4.14
2026-05-15 17:49:30 +07:00
smp.c
Merge remote-tracking branch 'common/android-4.9-q' into android12-4.9-sdm845
2022-06-12 01:39:01 +03:00
smpboot.c
sched/walt: Fix the memory leak of idle task load pointers
2018-09-20 19:00:55 +05:30
smpboot.h
softirq.c
Mark HI and TASKLET softirq synchronous
2018-08-15 18:14:42 +02:00
stacktrace.c
stop_machine.c
stop_machine: Use raw spinlocks
2018-08-03 07:55:24 +02:00
sys.c
Merge remote-tracking branch 'common/android-4.9-q' into lineage-18.1-caf-sdm845
2021-10-19 16:05:50 +03:00
sys_ni.c
BACKPORT: signal: support CLONE_PIDFD with pidfd_send_signal
2019-09-03 13:44:59 -07:00
sysctl.c
Revert "add toggle for disabling newly added USB devices"
2023-03-01 21:14:36 +02:00
sysctl_binary.c
net/ipv6/addrconf: IPv6 tethering enhancement
2018-03-15 11:36:45 -07:00
task_work.c
taskstats.c
taskstats: fix data-race
2020-01-12 11:24:12 +01:00
test_kprobes.c
torture.c
tracepoint.c
tracepoint: Do not fail unregistering a probe due to memory failure
2021-03-03 17:44:38 +01:00
tsacct.c
taskstats: Cleanup the use of task->exit_code
2022-02-23 11:56:40 +01:00
ucount.c
uid16.c
kernel: make groups_sort calling a responsibility group_info allocators
2018-01-10 09:29:52 +01:00
up.c
user-return-notifier.c
user.c
ANDROID: proc: Add /proc/uid directory
2018-04-03 11:15:30 -07:00
user_namespace.c
userns: move user access out of the mutex
2018-09-09 20:01:24 +02:00
utsname.c
utsname_sysctl.c
sys: don't hold uts_sem while accessing userspace memory
2018-09-09 20:01:24 +02:00
watchdog.c
watchdog_hld.c
workqueue.c
rcu: Create RCU-specific workqueues with rescuers
2026-05-15 17:49:31 +07:00
workqueue_internal.h
UPSTREAM: psi: fix aggregation idle shut-off
2019-03-22 14:15:01 -07:00