From: Kevin Hao <[email protected]>
The patch ("octeontx2-af: wait for tx link idle for credits change")
introduces a ABBA deadlock:
kworker/u49:1/257 is trying to acquire lock:
000000009c4ce30c (&tx_stall->txsch_lock){+.+.}, at:
rvu_nix_update_link_credits+0x50/0x78
but task is already holding lock:
00000000dd73fbc7 (&rvu->rsrc_lock){+.+.}, at:
rvu_mbox_handler_nix_set_hw_frs+0x3e8/0x648
which lock already depends on the new lock.
the existing dependency chain (in reverse order) is:
-> #1 (&rvu->rsrc_lock){+.+.}:
__mutex_lock+0x94/0x830
mutex_lock_nested+0x3c/0x50
is_valid_txschq+0x94/0x108
rvu_mbox_handler_nix_txschq_cfg+0x16c/0x628
__rvu_mbox_handler+0x1bcc/0x27d8
rvu_afvf_mbox_handler+0x10/0x18
process_one_work+0x29c/0x6d8
worker_thread+0x50/0x418
kthread+0x108/0x138
ret_from_fork+0x10/0x18
-> #0 (&tx_stall->txsch_lock){+.+.}:
lock_acquire+0xfc/0x288
__mutex_lock+0x94/0x830
mutex_lock_nested+0x3c/0x50
rvu_nix_update_link_credits+0x50/0x78
rvu_mbox_handler_nix_set_hw_frs+0x5b4/0x648
__rvu_mbox_handler+0x1fec/0x27d8
rvu_afpf_mbox_handler+0x10/0x18
process_one_work+0x29c/0x6d8
worker_thread+0x50/0x418
kthread+0x108/0x138
ret_from_fork+0x10/0x18
other info that might help us debug this:
Possible unsafe locking scenario:
CPU0 CPU1
---- ----
lock(&rvu->rsrc_lock);
lock(&tx_stall->txsch_lock);
lock(&rvu->rsrc_lock);
lock(&tx_stall->txsch_lock);
Adjust the lock sequence in nix_config_link_credits() to fix this.
Signed-off-by: Kevin Hao <[email protected]>
---
Hi Bruce,
Please help me merge this into the following two branches:
v5.4/standard/cn96xx
v5.4/standard/preempt-rt/cn96xx
drivers/net/ethernet/marvell/octeontx2/af/rvu_fixes.c | 2 --
drivers/net/ethernet/marvell/octeontx2/af/rvu_nix.c | 2 ++
2 files changed, 2 insertions(+), 2 deletions(-)
diff --git a/drivers/net/ethernet/marvell/octeontx2/af/rvu_fixes.c
b/drivers/net/ethernet/marvell/octeontx2/af/rvu_fixes.c
index 909abb2d358e..0c556c3be666 100644
--- a/drivers/net/ethernet/marvell/octeontx2/af/rvu_fixes.c
+++ b/drivers/net/ethernet/marvell/octeontx2/af/rvu_fixes.c
@@ -122,9 +122,7 @@ void rvu_nix_update_link_credits(struct rvu *rvu, int
blkaddr,
if (!tx_stall)
return;
- rvu_nix_txsch_lock(nix_hw);
tx_stall->nlink_credits[link] = ncredits;
- rvu_nix_txsch_unlock(nix_hw);
}
void rvu_nix_update_sq_smq_mapping(struct rvu *rvu, int blkaddr, int nixlf,
diff --git a/drivers/net/ethernet/marvell/octeontx2/af/rvu_nix.c
b/drivers/net/ethernet/marvell/octeontx2/af/rvu_nix.c
index 53b6000d88f0..fd6c9bd2afe0 100644
--- a/drivers/net/ethernet/marvell/octeontx2/af/rvu_nix.c
+++ b/drivers/net/ethernet/marvell/octeontx2/af/rvu_nix.c
@@ -3411,6 +3411,7 @@ nix_config_link_credits(struct rvu *rvu, int blkaddr, int
link,
lmac_id, true);
}
+ rvu_nix_txsch_lock(nix_hw);
mutex_lock(&rvu->rsrc_lock);
/* Disable new traffic to link */
if (hw->cap.nix_shaping) {
@@ -3451,6 +3452,7 @@ nix_config_link_credits(struct rvu *rvu, int blkaddr, int
link,
cgx_lmac_tx_enable(rvu_cgx_pdata(cgx_id, rvu), lmac_id, false);
mutex_unlock(&rvu->rsrc_lock);
+ rvu_nix_txsch_unlock(nix_hw);
return rc;
}
--
2.26.2
-=-=-=-=-=-=-=-=-=-=-=-
Links: You receive all messages sent to this group.
View/Reply Online (#8771):
https://lists.yoctoproject.org/g/linux-yocto/message/8771
Mute This Topic: https://lists.yoctoproject.org/mt/75081262/21656
Group Owner: [email protected]
Unsubscribe: https://lists.yoctoproject.org/g/linux-yocto/unsub
[[email protected]]
-=-=-=-=-=-=-=-=-=-=-=-