Take mbox lock before NDC sync to be thread safe. Also release the lock only after access to response is complete.
Fixes: 7a978bc4be6b ("common/cnxk: support mailbox locking") Cc: rkuduruma...@marvell.com Signed-off-by: Nithin Dabilpuram <ndabilpu...@marvell.com> --- drivers/common/cnxk/roc_nix_tm.c | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/drivers/common/cnxk/roc_nix_tm.c b/drivers/common/cnxk/roc_nix_tm.c index 4e5f320712..4ced7a052f 100644 --- a/drivers/common/cnxk/roc_nix_tm.c +++ b/drivers/common/cnxk/roc_nix_tm.c @@ -690,13 +690,16 @@ roc_nix_tm_sq_free_pending_sqe(struct nix *nix, int q) mbox = dev->mbox; /* Sync NDC-NIX-TX for LF */ - ndc_req = mbox_alloc_msg_ndc_sync_op(mbox); - if (ndc_req == NULL) + ndc_req = mbox_alloc_msg_ndc_sync_op(mbox_get(mbox)); + if (ndc_req == NULL) { + mbox_put(mbox); return -EFAULT; + } ndc_req->nix_lf_tx_sync = 1; if (mbox_process(mbox)) rc |= NIX_ERR_NDC_SYNC; + mbox_put(mbox); if (rc) plt_err("NDC_SYNC failed rc %d", rc); @@ -1480,8 +1483,9 @@ nix_tm_alloc_txschq(struct nix *nix, enum roc_nix_tm_tree tree) mbox_put(mbox); goto alloc_err; } - mbox_put(mbox); + nix_tm_copy_rsp_to_nix(nix, rsp); + mbox_put(mbox); } while (pend); nix->tm_link_cfg_lvl = rsp->link_cfg_lvl; -- 2.25.1