Commit a6f88ac
lockdep: fix deadlock issue between lockdep and rcu
There is a deadlock scenario between lockdep and rcu when
rcu nocb feature is enabled, just as following call stack:
rcuop/x
-000|queued_spin_lock_slowpath(lock = 0xFFFFFF817F2A8A80, val = ?)
-001|queued_spin_lock(inline) // try to hold nocb_gp_lock
-001|do_raw_spin_lock(lock = 0xFFFFFF817F2A8A80)
-002|__raw_spin_lock_irqsave(inline)
-002|_raw_spin_lock_irqsave(lock = 0xFFFFFF817F2A8A80)
-003|wake_nocb_gp_defer(inline)
-003|__call_rcu_nocb_wake(rdp = 0xFFFFFF817F30B680)
-004|__call_rcu_common(inline)
-004|call_rcu(head = 0xFFFFFFC082EECC28, func = ?)
-005|call_rcu_zapped(inline)
-005|free_zapped_rcu(ch = ?)// hold graph lock
-006|rcu_do_batch(rdp = 0xFFFFFF817F245680)
-007|nocb_cb_wait(inline)
-007|rcu_nocb_cb_kthread(arg = 0xFFFFFF817F245680)
-008|kthread(_create = 0xFFFFFF80803122C0)
-009|ret_from_fork(asm)
rcuop/y
-000|queued_spin_lock_slowpath(lock = 0xFFFFFFC08291BBC8, val = 0)
-001|queued_spin_lock()
-001|lockdep_lock()
-001|graph_lock() // try to hold graph lock
-002|lookup_chain_cache_add()
-002|validate_chain()
-003|lock_acquire
-004|_raw_spin_lock_irqsave(lock = 0xFFFFFF817F211D80)
-005|lock_timer_base(inline)
-006|mod_timer(inline)
-006|wake_nocb_gp_defer(inline)// hold nocb_gp_lock
-006|__call_rcu_nocb_wake(rdp = 0xFFFFFF817F2A8680)
-007|__call_rcu_common(inline)
-007|call_rcu(head = 0xFFFFFFC0822E0B58, func = ?)
-008|call_rcu_hurry(inline)
-008|rcu_sync_call(inline)
-008|rcu_sync_func(rhp = 0xFFFFFFC0822E0B58)
-009|rcu_do_batch(rdp = 0xFFFFFF817F266680)
-010|nocb_cb_wait(inline)
-010|rcu_nocb_cb_kthread(arg = 0xFFFFFF817F266680)
-011|kthread(_create = 0xFFFFFF8080363740)
-012|ret_from_fork(asm)
rcuop/x and rcuop/y are rcu nocb threads with the same nocb gp thread.
This patch release the graph lock before lockdep call_rcu.
Fixes: a0b0fd5 ("locking/lockdep: Free lock classes that are no longer in use")
Cc: [email protected]
Cc: Boqun Feng <[email protected]>
Cc: Waiman Long <[email protected]>
Cc: Carlos Llamas <[email protected]>
Cc: Bart Van Assche <[email protected]>
Signed-off-by: Zhiguo Niu <[email protected]>
Signed-off-by: Xuewen Yan <[email protected]>
Reviewed-by: Waiman Long <[email protected]>
Reviewed-by: Carlos Llamas <[email protected]>
Reviewed-by: Bart Van Assche <[email protected]>
Signed-off-by: Carlos Llamas <[email protected]>
Acked-by: Paul E. McKenney <[email protected]>
Signed-off-by: Boqun Feng <[email protected]>
Link: https://lore.kernel.org/r/[email protected]1 parent 13c267f commit a6f88ac
1 file changed
+32
-16
lines changed| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
6186 | 6186 | | |
6187 | 6187 | | |
6188 | 6188 | | |
6189 | | - | |
6190 | | - | |
6191 | | - | |
6192 | | - | |
| 6189 | + | |
| 6190 | + | |
| 6191 | + | |
| 6192 | + | |
| 6193 | + | |
| 6194 | + | |
6193 | 6195 | | |
6194 | 6196 | | |
6195 | 6197 | | |
6196 | 6198 | | |
6197 | | - | |
| 6199 | + | |
6198 | 6200 | | |
6199 | 6201 | | |
6200 | | - | |
| 6202 | + | |
6201 | 6203 | | |
6202 | 6204 | | |
6203 | 6205 | | |
6204 | 6206 | | |
6205 | 6207 | | |
6206 | 6208 | | |
6207 | | - | |
| 6209 | + | |
6208 | 6210 | | |
6209 | 6211 | | |
6210 | 6212 | | |
| |||
6230 | 6232 | | |
6231 | 6233 | | |
6232 | 6234 | | |
| 6235 | + | |
6233 | 6236 | | |
6234 | 6237 | | |
6235 | 6238 | | |
| |||
6241 | 6244 | | |
6242 | 6245 | | |
6243 | 6246 | | |
| 6247 | + | |
| 6248 | + | |
| 6249 | + | |
| 6250 | + | |
6244 | 6251 | | |
6245 | 6252 | | |
6246 | | - | |
6247 | | - | |
6248 | | - | |
| 6253 | + | |
| 6254 | + | |
| 6255 | + | |
| 6256 | + | |
| 6257 | + | |
6249 | 6258 | | |
6250 | | - | |
6251 | | - | |
6252 | 6259 | | |
6253 | 6260 | | |
6254 | 6261 | | |
| |||
6288 | 6295 | | |
6289 | 6296 | | |
6290 | 6297 | | |
| 6298 | + | |
6291 | 6299 | | |
6292 | 6300 | | |
6293 | 6301 | | |
6294 | 6302 | | |
6295 | 6303 | | |
6296 | 6304 | | |
6297 | 6305 | | |
6298 | | - | |
| 6306 | + | |
6299 | 6307 | | |
6300 | 6308 | | |
6301 | | - | |
| 6309 | + | |
| 6310 | + | |
6302 | 6311 | | |
6303 | 6312 | | |
6304 | 6313 | | |
| |||
6392 | 6401 | | |
6393 | 6402 | | |
6394 | 6403 | | |
| 6404 | + | |
6395 | 6405 | | |
6396 | 6406 | | |
6397 | 6407 | | |
| |||
6400 | 6410 | | |
6401 | 6411 | | |
6402 | 6412 | | |
6403 | | - | |
| 6413 | + | |
6404 | 6414 | | |
6405 | 6415 | | |
6406 | 6416 | | |
6407 | 6417 | | |
| 6418 | + | |
| 6419 | + | |
6408 | 6420 | | |
6409 | 6421 | | |
6410 | 6422 | | |
| |||
6448 | 6460 | | |
6449 | 6461 | | |
6450 | 6462 | | |
| 6463 | + | |
6451 | 6464 | | |
6452 | 6465 | | |
6453 | 6466 | | |
| |||
6468 | 6481 | | |
6469 | 6482 | | |
6470 | 6483 | | |
6471 | | - | |
| 6484 | + | |
6472 | 6485 | | |
6473 | 6486 | | |
6474 | 6487 | | |
6475 | 6488 | | |
| 6489 | + | |
| 6490 | + | |
| 6491 | + | |
6476 | 6492 | | |
6477 | 6493 | | |
6478 | 6494 | | |
| |||
0 commit comments