<div dir="auto"><div>Hi Stephen and Hemant,</div><div dir="auto"><br></div><div dir="auto">It would be great if this series could be merged for rc3. I’ve tested it successfully with Grout on my side, and it allows us to support the DPAA2 Ethernet driver without any ugly workarounds. I’ve also reviewed all the patches, and everything looks good with no major risks.</div><div dir="auto"><br></div><div dir="auto">Regards,</div><div dir="auto">Maxime Leroy</div><div dir="auto"><br><div class="gmail_quote gmail_quote_container" dir="auto"><div dir="ltr" class="gmail_attr">Le ven. 14 nov. 2025, 07:25, Hemant Agrawal <<a href="mailto:hemant.agrawal@nxp.com">hemant.agrawal@nxp.com</a>> a écrit :<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">When rte_eth_dev_close() is called, it performs the following actions:<br>
<br>
Calls dev->dev_ops->dev_close(), which in this case is dpaa2_dev_close().<br>
Then calls rte_eth_dev_release_port(), which releases all device data<br>
and sets dev->data to NULL.<br>
<br>
Later, when rte_dev_remove() is called, the FSLMC bus invokes<br>
dev->remove() — that is, rte_dpaa2_remove().<br>
However, rte_dpaa2_remove() calls dpaa2_dev_close() again. Since dev->data<br>
was already set to NULL by the previous call, this second invocation<br>
causes a crash.<br>
<br>
Fixes: 5964d36a2904 ("net/dpaa2: release port upon close")<br>
Cc: <a href="mailto:sachin.saxena@nxp.com" target="_blank" rel="noreferrer">sachin.saxena@nxp.com</a><br>
Cc: <a href="mailto:stable@dpdk.org" target="_blank" rel="noreferrer">stable@dpdk.org</a><br>
<br>
Signed-off-by: Hemant Agrawal <<a href="mailto:hemant.agrawal@nxp.com" target="_blank" rel="noreferrer">hemant.agrawal@nxp.com</a>><br>
Tested-by: Maxime Leroy <<a href="mailto:maxime@leroys.fr" target="_blank" rel="noreferrer">maxime@leroys.fr</a>><br>
---<br>
 drivers/net/dpaa2/dpaa2_ethdev.c | 18 +++++++++++++-----<br>
 1 file changed, 13 insertions(+), 5 deletions(-)<br>
<br>
diff --git a/drivers/net/dpaa2/dpaa2_ethdev.c b/drivers/net/dpaa2/dpaa2_ethdev.c<br>
index 7da32ce856..fcda267e0b 100644<br>
--- a/drivers/net/dpaa2/dpaa2_ethdev.c<br>
+++ b/drivers/net/dpaa2/dpaa2_ethdev.c<br>
@@ -3347,14 +3347,22 @@ static int<br>
 rte_dpaa2_remove(struct rte_dpaa2_device *dpaa2_dev)<br>
 {<br>
        struct rte_eth_dev *eth_dev;<br>
-       int ret;<br>
+       int ret = 0;<br>
+<br>
+       eth_dev = rte_eth_dev_allocated(dpaa2_dev-><a href="http://device.name" rel="noreferrer noreferrer" target="_blank">device.name</a>);<br>
+       if (eth_dev) {<br>
+               ret = dpaa2_dev_close(eth_dev);<br>
+               if (ret)<br>
+                       DPAA2_PMD_ERR("dpaa2_dev_close ret= %d", ret);<br>
+<br>
+               ret = rte_eth_dev_release_port(eth_dev);<br>
+       }<br>
<br>
-       eth_dev = dpaa2_dev->eth_dev;<br>
-       dpaa2_dev_close(eth_dev);<br>
        dpaa2_valid_dev--;<br>
-       if (!dpaa2_valid_dev)<br>
+       if (!dpaa2_valid_dev) {<br>
                rte_mempool_free(dpaa2_tx_sg_pool);<br>
-       ret = rte_eth_dev_release_port(eth_dev);<br>
+               dpaa2_tx_sg_pool = NULL;<br>
+       }<br>
<br>
        return ret;<br>
 }<br>
-- <br>
2.25.1<br>
<br>
</blockquote></div></div></div>