From: Pavan Nikhilesh <[email protected]>
cnxk_dmadev_probe() ran in secondary processes too, overwriting the
shared rdpi->pci_dev with a process-local pointer and marking the
device ready. With buses now cleaned up on shutdown, the primary's
roc_dpi_dev_fini() dereferences that stale pointer and crashes.
Skip HW init in secondary processes: attach to the shared device data
and return, leaving rdpi and the device state untouched.
Fixes: 53f6d7328bf4 ("dma/cnxk: create and initialize device on PCI probing")
Cc: [email protected]
Signed-off-by: Pavan Nikhilesh <[email protected]>
---
drivers/dma/cnxk/cnxk_dmadev.c | 3 +++
1 file changed, 3 insertions(+)
diff --git a/drivers/dma/cnxk/cnxk_dmadev.c b/drivers/dma/cnxk/cnxk_dmadev.c
index 0dcebc1b0b3b..6ae7fdca3b1b 100644
--- a/drivers/dma/cnxk/cnxk_dmadev.c
+++ b/drivers/dma/cnxk/cnxk_dmadev.c
@@ -617,6 +617,9 @@ cnxk_dmadev_probe(struct rte_pci_driver *pci_drv
__rte_unused, struct rte_pci_de
dmadev->fp_obj->dev_private = dpivf;
dmadev->dev_ops = &cnxk_dmadev_ops;
+ if (rte_eal_process_type() != RTE_PROC_PRIMARY)
+ return 0;
+
dpivf->is_cn10k = roc_model_is_cn10k();
dpivf->mcs_lock = NULL;
rdpi = &dpivf->rdpi;
--
2.50.1 (Apple Git-155)