From d95e981a137271700757a4832982f036272fdfe2 Mon Sep 17 00:00:00 2001 From: Ivan Malov Date: Thu, 13 Oct 2022 08:36:42 +0300 Subject: [PATCH] TEMPORARY: i40e: make deferred queue start feature work https://bugs.dpdk.org/show_bug.cgi?id=1102 --- drivers/net/i40e/i40e_ethdev.c | 6 +++--- drivers/net/i40e/i40e_rxtx.c | 9 +++++++-- 2 files changed, 10 insertions(+), 5 deletions(-) diff --git a/drivers/net/i40e/i40e_ethdev.c b/drivers/net/i40e/i40e_ethdev.c index 80fbcc847c..7c59e42fab 100644 --- a/drivers/net/i40e/i40e_ethdev.c +++ b/drivers/net/i40e/i40e_ethdev.c @@ -1463,7 +1463,7 @@ eth_i40e_dev_init(struct rte_eth_dev *dev, void *init_params __rte_unused) hw->subsystem_device_id = pci_dev->id.subsystem_device_id; hw->bus.device = pci_dev->addr.devid; hw->bus.func = pci_dev->addr.function; - hw->adapter_stopped = 0; + hw->adapter_stopped = 1; hw->adapter_closed = 0; /* Init switch device pointer */ @@ -2330,8 +2330,6 @@ i40e_dev_start(struct rte_eth_dev *dev) uint16_t nb_rxq, nb_txq; uint16_t max_frame_size; - hw->adapter_stopped = 0; - rte_intr_disable(intr_handle); if ((rte_intr_cap_multiple(intr_handle) || @@ -2470,6 +2468,8 @@ i40e_dev_start(struct rte_eth_dev *dev) max_frame_size = dev->data->mtu + I40E_ETH_OVERHEAD; i40e_set_mac_max_frame(dev, max_frame_size); + hw->adapter_stopped = 0; + return I40E_SUCCESS; tx_err: diff --git a/drivers/net/i40e/i40e_rxtx.c b/drivers/net/i40e/i40e_rxtx.c index d4bd483460..429d191ed4 100644 --- a/drivers/net/i40e/i40e_rxtx.c +++ b/drivers/net/i40e/i40e_rxtx.c @@ -1697,9 +1697,11 @@ i40e_dev_rx_queue_start(struct rte_eth_dev *dev, uint16_t rx_queue_id) return -EINVAL; } - if (rxq->rx_deferred_start) + if (hw->adapter_stopped == 1 && rxq->rx_deferred_start) { PMD_DRV_LOG(WARNING, "RX queue %u is deferred start", rx_queue_id); + return 0; + } err = i40e_alloc_rx_queue_mbufs(rxq); if (err) { @@ -1771,9 +1773,12 @@ i40e_dev_tx_queue_start(struct rte_eth_dev *dev, uint16_t tx_queue_id) return -EINVAL; } - if (txq->tx_deferred_start) + if (hw->adapter_stopped == 1 && txq->tx_deferred_start) + { PMD_DRV_LOG(WARNING, "TX queue %u is deferred start", tx_queue_id); + return 0; + } /* * tx_queue_id is queue id application refers to, while -- 2.30.2