From: Ghalem Boudour <ghalem.boudour@6wind.com> [ upstream commit 3e7008459df969611fb7aa3b885a949515ac0b49 ] The DPDK ENA driver does not provide multi-segment tx offload capability. Let's add DEV_TX_OFFLOAD_MULTI_SEGS to ports offload capability by default, and always set it in dev->data->dev_conf.txmode.offload. This flag in not listed in doc/guides/nics/features/default.ini, so ena.ini does not need to be updated. Fixes: 1173fca25af9 ("ena: add polling-mode driver") Cc: stable@dpdk.org Signed-off-by: Ghalem Boudour <ghalem.boudour@6wind.com> Signed-off-by: Olivier Matz <olivier.matz@6wind.com> Acked-by: Michal Krawczyk <mk@semihalf.com> --- drivers/net/ena/ena_ethdev.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/drivers/net/ena/ena_ethdev.c b/drivers/net/ena/ena_ethdev.c index febca8fdb7..6c9a2aa1a9 100644 --- a/drivers/net/ena/ena_ethdev.c +++ b/drivers/net/ena/ena_ethdev.c @@ -1877,6 +1877,8 @@ static int ena_dev_configure(struct rte_eth_dev *dev) adapter->state = ENA_ADAPTER_STATE_CONFIG; + dev->data->dev_conf.txmode.offloads |= DEV_TX_OFFLOAD_MULTI_SEGS; + adapter->tx_selected_offloads = dev->data->dev_conf.txmode.offloads; adapter->rx_selected_offloads = dev->data->dev_conf.rxmode.offloads; return 0; @@ -1948,6 +1950,7 @@ static int ena_infos_get(struct rte_eth_dev *dev, DEV_RX_OFFLOAD_TCP_CKSUM; rx_feat |= DEV_RX_OFFLOAD_JUMBO_FRAME; + tx_feat |= DEV_TX_OFFLOAD_MULTI_SEGS; /* Inform framework about available features */ dev_info->rx_offload_capa = rx_feat; -- 2.25.1
[ upstream commit b57e1053813b369d20bb2a177081a4c8ca63cede ] If the prepare function failed, then it means the descriptors are in the invalid state. This condition now triggers the reset, which should be further handled by the application. To notify the application about prepare function failure, the error log was added. In general, it should never fail in normal conditions, as the Tx function checks for the available space in the Tx ring before the preparation even starts. Fixes: 2081d5e2e92d ("net/ena: add reset routine") Cc: stable@dpdk.org Signed-off-by: Michal Krawczyk <mk@semihalf.com> Reviewed-by: Shai Brandes <shaibran@amazon.com> Reviewed-by: Shay Agroskin <shayagr@amazon.com> --- drivers/net/ena/ena_ethdev.c | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/drivers/net/ena/ena_ethdev.c b/drivers/net/ena/ena_ethdev.c index 6c9a2aa1a9..408e127511 100644 --- a/drivers/net/ena/ena_ethdev.c +++ b/drivers/net/ena/ena_ethdev.c @@ -2359,7 +2359,12 @@ static uint16_t eth_ena_xmit_pkts(void *tx_queue, struct rte_mbuf **tx_pkts, rc = ena_com_prepare_tx(tx_ring->ena_com_io_sq, &ena_tx_ctx, &nb_hw_desc); if (unlikely(rc)) { + PMD_DRV_LOG(ERR, + "Failed to prepare Tx buffers, rc: %d\n", rc); ++tx_ring->tx_stats.prepare_ctx_err; + tx_ring->adapter->reset_reason = + ENA_REGS_RESET_DRIVER_INVALID_STATE; + tx_ring->adapter->trigger_reset = true; break; } tx_info->tx_descs = nb_hw_desc; -- 2.25.1
On Wed, Aug 11, 2021 at 11:52 AM Michal Krawczyk <mk@semihalf.com> wrote: > > From: Ghalem Boudour <ghalem.boudour@6wind.com> > > [ upstream commit 3e7008459df969611fb7aa3b885a949515ac0b49 ] > Applied, thanks! > The DPDK ENA driver does not provide multi-segment tx offload capability. > Let's add DEV_TX_OFFLOAD_MULTI_SEGS to ports offload capability by > default, and always set it in dev->data->dev_conf.txmode.offload. > > This flag in not listed in doc/guides/nics/features/default.ini, so > ena.ini does not need to be updated. > > Fixes: 1173fca25af9 ("ena: add polling-mode driver") > Cc: stable@dpdk.org > > Signed-off-by: Ghalem Boudour <ghalem.boudour@6wind.com> > Signed-off-by: Olivier Matz <olivier.matz@6wind.com> > Acked-by: Michal Krawczyk <mk@semihalf.com> > --- > drivers/net/ena/ena_ethdev.c | 3 +++ > 1 file changed, 3 insertions(+) > > diff --git a/drivers/net/ena/ena_ethdev.c b/drivers/net/ena/ena_ethdev.c > index febca8fdb7..6c9a2aa1a9 100644 > --- a/drivers/net/ena/ena_ethdev.c > +++ b/drivers/net/ena/ena_ethdev.c > @@ -1877,6 +1877,8 @@ static int ena_dev_configure(struct rte_eth_dev *dev) > > adapter->state = ENA_ADAPTER_STATE_CONFIG; > > + dev->data->dev_conf.txmode.offloads |= DEV_TX_OFFLOAD_MULTI_SEGS; > + > adapter->tx_selected_offloads = dev->data->dev_conf.txmode.offloads; > adapter->rx_selected_offloads = dev->data->dev_conf.rxmode.offloads; > return 0; > @@ -1948,6 +1950,7 @@ static int ena_infos_get(struct rte_eth_dev *dev, > DEV_RX_OFFLOAD_TCP_CKSUM; > > rx_feat |= DEV_RX_OFFLOAD_JUMBO_FRAME; > + tx_feat |= DEV_TX_OFFLOAD_MULTI_SEGS; > > /* Inform framework about available features */ > dev_info->rx_offload_capa = rx_feat; > -- > 2.25.1 > -- Christian Ehrhardt Staff Engineer, Ubuntu Server Canonical Ltd
On Wed, Aug 11, 2021 at 11:52 AM Michal Krawczyk <mk@semihalf.com> wrote: > > [ upstream commit b57e1053813b369d20bb2a177081a4c8ca63cede ] > Applied, thanks! > If the prepare function failed, then it means the descriptors are in the > invalid state. > > This condition now triggers the reset, which should be further handled > by the application. > > To notify the application about prepare function failure, the error log > was added. In general, it should never fail in normal conditions, as the > Tx function checks for the available space in the Tx ring before the > preparation even starts. > > Fixes: 2081d5e2e92d ("net/ena: add reset routine") > Cc: stable@dpdk.org > > Signed-off-by: Michal Krawczyk <mk@semihalf.com> > Reviewed-by: Shai Brandes <shaibran@amazon.com> > Reviewed-by: Shay Agroskin <shayagr@amazon.com> > --- > drivers/net/ena/ena_ethdev.c | 5 +++++ > 1 file changed, 5 insertions(+) > > diff --git a/drivers/net/ena/ena_ethdev.c b/drivers/net/ena/ena_ethdev.c > index 6c9a2aa1a9..408e127511 100644 > --- a/drivers/net/ena/ena_ethdev.c > +++ b/drivers/net/ena/ena_ethdev.c > @@ -2359,7 +2359,12 @@ static uint16_t eth_ena_xmit_pkts(void *tx_queue, struct rte_mbuf **tx_pkts, > rc = ena_com_prepare_tx(tx_ring->ena_com_io_sq, > &ena_tx_ctx, &nb_hw_desc); > if (unlikely(rc)) { > + PMD_DRV_LOG(ERR, > + "Failed to prepare Tx buffers, rc: %d\n", rc); > ++tx_ring->tx_stats.prepare_ctx_err; > + tx_ring->adapter->reset_reason = > + ENA_REGS_RESET_DRIVER_INVALID_STATE; > + tx_ring->adapter->trigger_reset = true; > break; > } > tx_info->tx_descs = nb_hw_desc; > -- > 2.25.1 > -- Christian Ehrhardt Staff Engineer, Ubuntu Server Canonical Ltd