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..b7bc616fed 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(rxq->fqid);
+
if (dpaa_intf->cgr_rx)
dpaa_intf->cgr_rx[loop].cgrid = cgrid[loop];
--
2.43.0