From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from dispatch1-us1.ppe-hosted.com (dispatch1-us1.pphosted.com [67.231.154.164]) by dpdk.org (Postfix) with ESMTP id 5AB742C5 for ; Tue, 18 Apr 2017 15:03:33 +0200 (CEST) Received: from pure.maildistiller.com (unknown [10.110.50.29]) by dispatch1-us1.ppe-hosted.com (Proofpoint Essentials ESMTP Server) with ESMTP id D7D55600ED for ; Tue, 18 Apr 2017 13:03:32 +0000 (UTC) X-Virus-Scanned: Proofpoint Essentials engine Received: from mx3-us3.ppe-hosted.com (unknown [10.110.49.251]) by pure.maildistiller.com (Proofpoint Essentials ESMTP Server) with ESMTPS id 1ACFF60055 for ; Tue, 18 Apr 2017 13:03:32 +0000 (UTC) Received: from webmail.solarflare.com (webmail.solarflare.com [12.187.104.26]) (using TLSv1 with cipher ECDHE-RSA-AES256-SHA (256/256 bits)) (No client certificate requested) by mx3-us3.ppe-hosted.com (Proofpoint Essentials ESMTP Server) with ESMTPS id 3FC2E600A3 for ; Tue, 18 Apr 2017 13:03:31 +0000 (UTC) Received: from ocex03.SolarFlarecom.com (10.20.40.36) by ocex03.SolarFlarecom.com (10.20.40.36) with Microsoft SMTP Server (TLS) id 15.0.1044.25; Tue, 18 Apr 2017 06:03:28 -0700 Received: from opal.uk.solarflarecom.com (10.17.10.1) by ocex03.SolarFlarecom.com (10.20.40.36) with Microsoft SMTP Server (TLS) id 15.0.1044.25 via Frontend Transport; Tue, 18 Apr 2017 06:03:28 -0700 Received: from uklogin.uk.solarflarecom.com (uklogin.uk.solarflarecom.com [10.17.10.10]) by opal.uk.solarflarecom.com (8.13.8/8.13.8) with ESMTP id v3ID3RlA001966 for ; Tue, 18 Apr 2017 14:03:27 +0100 Received: from uklogin.uk.solarflarecom.com (localhost.localdomain [127.0.0.1]) by uklogin.uk.solarflarecom.com (8.13.8/8.13.8) with ESMTP id v3ID3RTT010108 for ; Tue, 18 Apr 2017 14:03:27 +0100 From: Andrew Rybchenko To: Date: Tue, 18 Apr 2017 14:03:07 +0100 Message-ID: <1492520588-10050-2-git-send-email-arybchenko@solarflare.com> X-Mailer: git-send-email 1.8.2.3 In-Reply-To: <1492520588-10050-1-git-send-email-arybchenko@solarflare.com> References: <1492520588-10050-1-git-send-email-arybchenko@solarflare.com> MIME-Version: 1.0 Content-Type: text/plain X-MDID: 1492520612-V58zqbsKm6W3 Subject: [dpdk-dev] [PATCH 2/3] net/sfc: use zero RSS channels as disabled RSS indicator X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 18 Apr 2017 13:03:33 -0000 Enabled RSS enables RSS hash computation and provision in pseudo header. It still makes sense for applications even if only one Rx queue is used. Fixes: 4ec1fc3ba881 ("net/sfc: add basic stubs for RSS support on driver attach") Fixes: 088e17210a7a ("net/sfc: query RSS key and hash types config") Fixes: 82faef507608 ("net/sfc: set RSS key and hash types config") Fixes: af0d9317970c ("net/sfc: query RSS redirection table") Fixes: 32bcfb0a50b1 ("net/sfc: update RSS redirection table") Fixes: f5258439ee5d ("net/sfc: avoid failure on port start if Rx mode is rejected") Signed-off-by: Andrew Rybchenko Reviewed-by: Andy Moreton --- drivers/net/sfc/sfc_ethdev.c | 28 ++++++++++++++++++++-------- drivers/net/sfc/sfc_rx.c | 8 ++++---- 2 files changed, 24 insertions(+), 12 deletions(-) diff --git a/drivers/net/sfc/sfc_ethdev.c b/drivers/net/sfc/sfc_ethdev.c index 4f7b640..d117c29 100644 --- a/drivers/net/sfc/sfc_ethdev.c +++ b/drivers/net/sfc/sfc_ethdev.c @@ -1083,10 +1083,12 @@ sfc_dev_rss_hash_conf_get(struct rte_eth_dev *dev, { struct sfc_adapter *sa = dev->data->dev_private; - if ((sa->rss_channels == 1) || - (sa->rss_support != EFX_RX_SCALE_EXCLUSIVE)) + if (sa->rss_support != EFX_RX_SCALE_EXCLUSIVE) return -ENOTSUP; + if (sa->rss_channels == 0) + return -EINVAL; + sfc_adapter_lock(sa); /* @@ -1113,12 +1115,16 @@ sfc_dev_rss_hash_update(struct rte_eth_dev *dev, unsigned int efx_hash_types; int rc = 0; - if ((sa->rss_channels == 1) || - (sa->rss_support != EFX_RX_SCALE_EXCLUSIVE)) { + if (sa->rss_support != EFX_RX_SCALE_EXCLUSIVE) { sfc_err(sa, "RSS is not available"); return -ENOTSUP; } + if (sa->rss_channels == 0) { + sfc_err(sa, "RSS is not configured"); + return -EINVAL; + } + if ((rss_conf->rss_key != NULL) && (rss_conf->rss_key_len != sizeof(sa->rss_key))) { sfc_err(sa, "RSS key size is wrong (should be %lu)", @@ -1175,10 +1181,12 @@ sfc_dev_rss_reta_query(struct rte_eth_dev *dev, struct sfc_adapter *sa = dev->data->dev_private; int entry; - if ((sa->rss_channels == 1) || - (sa->rss_support != EFX_RX_SCALE_EXCLUSIVE)) + if (sa->rss_support != EFX_RX_SCALE_EXCLUSIVE) return -ENOTSUP; + if (sa->rss_channels == 0) + return -EINVAL; + if (reta_size != EFX_RSS_TBL_SIZE) return -EINVAL; @@ -1208,12 +1216,16 @@ sfc_dev_rss_reta_update(struct rte_eth_dev *dev, int rc; - if ((sa->rss_channels == 1) || - (sa->rss_support != EFX_RX_SCALE_EXCLUSIVE)) { + if (sa->rss_support != EFX_RX_SCALE_EXCLUSIVE) { sfc_err(sa, "RSS is not available"); return -ENOTSUP; } + if (sa->rss_channels == 0) { + sfc_err(sa, "RSS is not configured"); + return -EINVAL; + } + if (reta_size != EFX_RSS_TBL_SIZE) { sfc_err(sa, "RETA size is wrong (should be %u)", EFX_RSS_TBL_SIZE); diff --git a/drivers/net/sfc/sfc_rx.c b/drivers/net/sfc/sfc_rx.c index 9f512d9..664b38d 100644 --- a/drivers/net/sfc/sfc_rx.c +++ b/drivers/net/sfc/sfc_rx.c @@ -577,7 +577,7 @@ sfc_rx_qflush(struct sfc_adapter *sa, unsigned int sw_index) static int sfc_rx_default_rxq_set_filter(struct sfc_adapter *sa, struct sfc_rxq *rxq) { - boolean_t rss = (sa->rss_channels > 1) ? B_TRUE : B_FALSE; + boolean_t rss = (sa->rss_channels > 0) ? B_TRUE : B_FALSE; struct sfc_port *port = &sa->port; int rc; @@ -1052,7 +1052,7 @@ sfc_rx_rss_config(struct sfc_adapter *sa) int rc = 0; #if EFSYS_OPT_RX_SCALE - if (sa->rss_channels > 1) { + if (sa->rss_channels > 0) { rc = efx_rx_scale_mode_set(sa->nic, EFX_RX_HASHALG_TOEPLITZ, sa->rss_hash_types, B_TRUE); if (rc != 0) @@ -1289,9 +1289,9 @@ sfc_rx_configure(struct sfc_adapter *sa) #if EFSYS_OPT_RX_SCALE sa->rss_channels = (dev_conf->rxmode.mq_mode == ETH_MQ_RX_RSS) ? - MIN(sa->rxq_count, EFX_MAXRSS) : 1; + MIN(sa->rxq_count, EFX_MAXRSS) : 0; - if (sa->rss_channels > 1) { + if (sa->rss_channels > 0) { for (sw_index = 0; sw_index < EFX_RSS_TBL_SIZE; ++sw_index) sa->rss_tbl[sw_index] = sw_index % sa->rss_channels; } -- 2.7.4