From 1f01425813d3a6ac85bd0b39ac8f8da30e8ec355 Mon Sep 17 00:00:00 2001 From: Ivan Malov Date: Mon, 23 Jan 2017 11:06:15 +0000 Subject: [PATCH] net/sfc: fix TSO limits imposed to the number of Tx queues The number of Tx queues requested by the user must not be overridden; instead, the limits imposed by TSO must be applied to the advertised maximum Fixes: fec33d5bb3eb ("net/sfc: support firmware-assisted TSO") Cc: stable@dpdk.org Signed-off-by: Ivan Malov Signed-off-by: Andrew Rybchenko Reviewed-by: Andrew Lee Reviewed-by: Andy Moreton --- drivers/net/sfc/sfc.c | 18 +++++++++++++----- drivers/net/sfc/sfc_tx.c | 5 ----- 2 files changed, 13 insertions(+), 10 deletions(-) diff --git a/drivers/net/sfc/sfc.c b/drivers/net/sfc/sfc.c index 457a53eebc..03ecec282c 100644 --- a/drivers/net/sfc/sfc.c +++ b/drivers/net/sfc/sfc.c @@ -203,6 +203,13 @@ sfc_estimate_resource_limits(struct sfc_adapter *sa) limits.edl_max_txq_count = MIN(encp->enc_txq_limit, limits.edl_max_evq_count - 1 - limits.edl_max_rxq_count); + + if (sa->tso) + limits.edl_max_txq_count = + MIN(limits.edl_max_txq_count, + encp->enc_fw_assisted_tso_v2_n_contexts / + encp->enc_hw_pf_count); + SFC_ASSERT(limits.edl_max_txq_count >= limits.edl_min_rxq_count); /* Configure the minimum required resources needed for the @@ -601,12 +608,17 @@ sfc_attach(struct sfc_adapter *sa) if (rc != 0) goto fail_nic_reset; + encp = efx_nic_cfg_get(sa->nic); + + sa->tso = encp->enc_fw_assisted_tso_v2_enabled; + if (!sa->tso) + sfc_warn(sa, "TSO support isn't available on this adapter"); + sfc_log_init(sa, "estimate resource limits"); rc = sfc_estimate_resource_limits(sa); if (rc != 0) goto fail_estimate_rsrc_limits; - encp = efx_nic_cfg_get(sa->nic); sa->txq_max_entries = encp->enc_txq_max_ndescs; SFC_ASSERT(rte_is_power_of_2(sa->txq_max_entries)); @@ -621,10 +633,6 @@ sfc_attach(struct sfc_adapter *sa) if (rc != 0) goto fail_set_rss_defaults; - sa->tso = efx_nic_cfg_get(sa->nic)->enc_fw_assisted_tso_v2_enabled; - if (!sa->tso) - sfc_warn(sa, "TSO support isn't available on this adapter"); - sfc_log_init(sa, "fini nic"); efx_nic_fini(enp); diff --git a/drivers/net/sfc/sfc_tx.c b/drivers/net/sfc/sfc_tx.c index e772584326..5a6282c318 100644 --- a/drivers/net/sfc/sfc_tx.c +++ b/drivers/net/sfc/sfc_tx.c @@ -312,11 +312,6 @@ sfc_tx_init(struct sfc_adapter *sa) sa->txq_count = sa->eth_dev->data->nb_tx_queues; - if (sa->tso) - sa->txq_count = MIN(sa->txq_count, - efx_nic_cfg_get(sa->nic)->enc_fw_assisted_tso_v2_n_contexts / - efx_nic_cfg_get(sa->nic)->enc_hw_pf_count); - sa->txq_info = rte_calloc_socket("sfc-txqs", sa->txq_count, sizeof(sa->txq_info[0]), 0, sa->socket_id); -- 2.20.1