The frame queue shutdown in dpaa_eth_rx_queue_setup() is too late:
the queue has already been created and initialized by dpaa_dev_init(),
so the shutdown forces a live FQ out of service and the queue no
longer receives frames.

Move the shutdown to dpaa_dev_init(), just before dpaa_rx_queue_init(),
where it cleans up a frame queue left over from a previous run as
intended.

Fixes: 0e3c389b9e4f ("bus/dpaa: do proper cleanup of frame queues on shutdown")
Cc: [email protected]

Signed-off-by: Prashant Gupta <[email protected]>
---
 drivers/net/dpaa/dpaa_ethdev.c | 8 +++++---
 1 file changed, 5 insertions(+), 3 deletions(-)

diff --git a/drivers/net/dpaa/dpaa_ethdev.c b/drivers/net/dpaa/dpaa_ethdev.c
index 4dc4d1f10c..4463c56601 100644
--- a/drivers/net/dpaa/dpaa_ethdev.c
+++ b/drivers/net/dpaa/dpaa_ethdev.c
@@ -1119,9 +1119,6 @@ int dpaa_eth_rx_queue_setup(struct rte_eth_dev *dev, 
uint16_t queue_idx,
        DPAA_PMD_INFO("Rx queue setup for queue index: %d fq_id (0x%x)",
                        queue_idx, rxq->fqid);
 
-       /* Shutdown FQ before configure */
-       qman_shutdown_fq(rxq->fqid);
-
        if (!fif->num_profiles) {
                if (dpaa_intf->bp_info && dpaa_intf->bp_info->bp &&
                        dpaa_intf->bp_info->mp != mp) {
@@ -2355,6 +2352,11 @@ dpaa_dev_init(struct rte_eth_dev *eth_dev)
 
                vsp_id = dev_vspids[loop];
 
+               /* Clean up a frame queue left behind by a previous run
+                * before it is initialized.
+                */
+               qman_shutdown_fq(fqid);
+
                if (dpaa_intf->cgr_rx)
                        dpaa_intf->cgr_rx[loop].cgrid = cgrid[loop];
 
-- 
2.43.0

Reply via email to