mirror of
https://github.com/torvalds/linux.git
synced 2024-11-10 14:11:52 +00:00
Urgent RCU pull request for v6.2
This commit fixes a lockdep false positive in synchronize_rcu() that can otherwise occur during early boot. Theis fix simply avoids invoking lockdep if the scheduler has not yet been initialized, that is, during that portion of boot when interrupts are disabled. -----BEGIN PGP SIGNATURE----- iQJHBAABCgAxFiEEbK7UrM+RBIrCoViJnr8S83LZ+4wFAmOeXj8THHBhdWxtY2tA a2VybmVsLm9yZwAKCRCevxLzctn7jPmZEACaI5JqO6Dr2U4HojJJBYEfLVaSYxDp JrUi5D5WzzZidyjM2fyyZZkdRVQ24i1aV2H/fbLoIIH/smYjE/KLEFHQmclpphw5 BSOyapotjdt5YhIavvAeOjdUd7jPyMqhbDVnwzjnblhUD1ObLVlhIs8Pjn7/03sF gzlIhYgp3EL7GenT9j9kud2FwWP+wrVQ7SdJ+Ni/WAHYO8860xQAmFXH/07bYzx7 fbp5iPkCOSSUoRMw/qQ8s7CE3XhBNKufv1BtcvV/uxEtutfV1qvEQBv/l2RBd0Vg wOVBZnWXze+7IUx13M90R/d04Nn7RaGwon6xBMlvIwL3qzEj8x/r1FYz7zZhQPkv wwChAxFHQACnLCZSu48WBtVrawNdZHM57KHUK4rloAbrK92FpVznhQU+5pBDy4c6 rfY2my+SNO4kWvePEg/2fd8aQycrZr99fK/ojCIerEn8MNboxuVOYTjzy0qtUcVT yJ/80O8ADI3QL/NRhjMFWgEnBDbHN1PcGhiRoutApdLQkg/UPTJjCRZ7ibmIFYY2 ViW3cSndr/f0I7sOex2EILHwiZ2bUKiwyeTW6vWuFl/7MEWsvpJaWoUxXgQj99Bt ncAOaxtmmuhbwrOCt2kab90A0c/thNx9kNYYIkG3vUNcSRzyHQtg3ydEljBpaTFR OzhrqdUA7W9Sfg== =UKUo -----END PGP SIGNATURE----- Merge tag 'rcu-urgent.2022.12.17a' of git://git.kernel.org/pub/scm/linux/kernel/git/paulmck/linux-rcu Pull RCU fix from Paul McKenney: "This fixes a lockdep false positive in synchronize_rcu() that can otherwise occur during early boot. The fix simply avoids invoking lockdep if the scheduler has not yet been initialized, that is, during that portion of boot when interrupts are disabled" * tag 'rcu-urgent.2022.12.17a' of git://git.kernel.org/pub/scm/linux/kernel/git/paulmck/linux-rcu: rcu: Don't assert interrupts enabled too early in boot
This commit is contained in:
commit
19822e3ee4
@ -1362,7 +1362,7 @@ static void rcu_poll_gp_seq_start(unsigned long *snap)
|
||||
{
|
||||
struct rcu_node *rnp = rcu_get_root();
|
||||
|
||||
if (rcu_init_invoked())
|
||||
if (rcu_scheduler_active != RCU_SCHEDULER_INACTIVE)
|
||||
raw_lockdep_assert_held_rcu_node(rnp);
|
||||
|
||||
// If RCU was idle, note beginning of GP.
|
||||
@ -1378,7 +1378,7 @@ static void rcu_poll_gp_seq_end(unsigned long *snap)
|
||||
{
|
||||
struct rcu_node *rnp = rcu_get_root();
|
||||
|
||||
if (rcu_init_invoked())
|
||||
if (rcu_scheduler_active != RCU_SCHEDULER_INACTIVE)
|
||||
raw_lockdep_assert_held_rcu_node(rnp);
|
||||
|
||||
// If the previously noted GP is still in effect, record the
|
||||
@ -1401,7 +1401,8 @@ static void rcu_poll_gp_seq_start_unlocked(unsigned long *snap)
|
||||
struct rcu_node *rnp = rcu_get_root();
|
||||
|
||||
if (rcu_init_invoked()) {
|
||||
lockdep_assert_irqs_enabled();
|
||||
if (rcu_scheduler_active != RCU_SCHEDULER_INACTIVE)
|
||||
lockdep_assert_irqs_enabled();
|
||||
raw_spin_lock_irqsave_rcu_node(rnp, flags);
|
||||
}
|
||||
rcu_poll_gp_seq_start(snap);
|
||||
@ -1417,7 +1418,8 @@ static void rcu_poll_gp_seq_end_unlocked(unsigned long *snap)
|
||||
struct rcu_node *rnp = rcu_get_root();
|
||||
|
||||
if (rcu_init_invoked()) {
|
||||
lockdep_assert_irqs_enabled();
|
||||
if (rcu_scheduler_active != RCU_SCHEDULER_INACTIVE)
|
||||
lockdep_assert_irqs_enabled();
|
||||
raw_spin_lock_irqsave_rcu_node(rnp, flags);
|
||||
}
|
||||
rcu_poll_gp_seq_end(snap);
|
||||
|
Loading…
Reference in New Issue
Block a user