From patchwork Thu May 3 19:37:12 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "John Daley (johndale)" X-Patchwork-Id: 39363 X-Patchwork-Delegate: ferruh.yigit@amd.com Return-Path: X-Original-To: patchwork@dpdk.org Delivered-To: patchwork@dpdk.org Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id AD97F2BA3; Thu, 3 May 2018 21:46:12 +0200 (CEST) Received: from rcdn-iport-1.cisco.com (rcdn-iport-1.cisco.com [173.37.86.72]) by dpdk.org (Postfix) with ESMTP id 1AE1E20BD for ; Thu, 3 May 2018 21:46:10 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=cisco.com; i=@cisco.com; l=4409; q=dns/txt; s=iport; t=1525376771; x=1526586371; h=from:to:cc:subject:date:message-id:in-reply-to: references; bh=AJ3rm5D5uhQj/wyiGZ3udhQlNwcD9VFSLE1pTPrgVSI=; b=E7PIGXF3CZIKQbtV+N4BQ50GM5OYqrXCb7TT0o3AkgQiKGATkCGaGIx4 EBqUD2cy4my/iGJpXF5JIBZ+Y8q/T8lonptYin5btcg8YIhUhkf0pu6Fk z2LoCDTdJCAgwX20TD+rpbSlRghjDAphytGqmQoAjD6c41ZKAW3jAf8A6 k=; X-IronPort-AV: E=Sophos;i="5.49,359,1520899200"; d="scan'208";a="390009907" Received: from alln-core-4.cisco.com ([173.36.13.137]) by rcdn-iport-1.cisco.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 03 May 2018 19:46:10 +0000 Received: from cisco.com (savbu-usnic-a.cisco.com [10.193.184.48]) by alln-core-4.cisco.com (8.14.5/8.14.5) with ESMTP id w43JkArR024348; Thu, 3 May 2018 19:46:10 GMT Received: by cisco.com (Postfix, from userid 392789) id 2737420F2001; Thu, 3 May 2018 12:46:10 -0700 (PDT) From: John Daley To: ferruh.yigit@intel.com Cc: dev@dpdk.org, Hyong Youb Kim Date: Thu, 3 May 2018 12:37:12 -0700 Message-Id: <20180503193713.20622-5-johndale@cisco.com> X-Mailer: git-send-email 2.16.2 In-Reply-To: <20180503193713.20622-1-johndale@cisco.com> References: <20180503193713.20622-1-johndale@cisco.com> Subject: [dpdk-dev] [PATCH 5/6] net/enic: fix RSS hash type advertisement 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: , Errors-To: dev-bounces@dpdk.org Sender: "dev" From: Hyong Youb Kim The NIC can hash these RSS packet types, but they are not advertised via flow_type_rss_offloads. So add them. - Part of the IPv4 hash: ETH_RSS_FRAG_IPV4 ETH_RSS_NONFRAG_IPV4_OTHER - Part of the IPv6 hash: ETH_RSS_FRAG_IPV6 ETH_RSS_NONFRAG_IPV6_OTHER - Part of the UDP hash: ETH_RSS_IPV6_UDP_EX Also, do not use NIC_CFG_RSS_HASH_TYPE_IPV6_EX and NIC_CFG_RSS_HASH_TYPE_TCP_IPV6_EX, as they are not needed to enable RSS over IPv6 with extension headers. Fixes: c2fec27b5cb0 ("net/enic: allow to change RSS settings") Signed-off-by: Hyong Youb Kim Reviewed-by: John Daley Reviewed-by: Aaron Conole --- drivers/net/enic/enic_main.c | 14 ++++++-------- drivers/net/enic/enic_res.c | 26 ++++++++++++++++++-------- 2 files changed, 24 insertions(+), 16 deletions(-) diff --git a/drivers/net/enic/enic_main.c b/drivers/net/enic/enic_main.c index b3b4e9626..2b1c1347c 100644 --- a/drivers/net/enic/enic_main.c +++ b/drivers/net/enic/enic_main.c @@ -1190,7 +1190,8 @@ int enic_set_rss_conf(struct enic *enic, struct rte_eth_rss_conf *rss_conf) (eth_dev->data->dev_conf.rxmode.mq_mode & ETH_MQ_RX_RSS_FLAG) && rss_hf != 0) { rss_enable = 1; - if (rss_hf & ETH_RSS_IPV4) + if (rss_hf & (ETH_RSS_IPV4 | ETH_RSS_FRAG_IPV4 | + ETH_RSS_NONFRAG_IPV4_OTHER)) rss_hash_type |= NIC_CFG_RSS_HASH_TYPE_IPV4; if (rss_hf & ETH_RSS_NONFRAG_IPV4_TCP) rss_hash_type |= NIC_CFG_RSS_HASH_TYPE_TCP_IPV4; @@ -1202,18 +1203,15 @@ int enic_set_rss_conf(struct enic *enic, struct rte_eth_rss_conf *rss_conf) */ rss_hash_type |= NIC_CFG_RSS_HASH_TYPE_TCP_IPV4; } - if (rss_hf & ETH_RSS_IPV6) + if (rss_hf & (ETH_RSS_IPV6 | ETH_RSS_IPV6_EX | + ETH_RSS_FRAG_IPV6 | ETH_RSS_NONFRAG_IPV6_OTHER)) rss_hash_type |= NIC_CFG_RSS_HASH_TYPE_IPV6; - if (rss_hf & ETH_RSS_NONFRAG_IPV6_TCP) + if (rss_hf & (ETH_RSS_NONFRAG_IPV6_TCP | ETH_RSS_IPV6_TCP_EX)) rss_hash_type |= NIC_CFG_RSS_HASH_TYPE_TCP_IPV6; - if (rss_hf & ETH_RSS_NONFRAG_IPV6_UDP) { + if (rss_hf & (ETH_RSS_NONFRAG_IPV6_UDP | ETH_RSS_IPV6_UDP_EX)) { /* Again, 'TCP' is not a typo. */ rss_hash_type |= NIC_CFG_RSS_HASH_TYPE_TCP_IPV6; } - if (rss_hf & ETH_RSS_IPV6_EX) - rss_hash_type |= NIC_CFG_RSS_HASH_TYPE_IPV6_EX; - if (rss_hf & ETH_RSS_IPV6_TCP_EX) - rss_hash_type |= NIC_CFG_RSS_HASH_TYPE_TCP_IPV6_EX; } else { rss_enable = 0; rss_hf = 0; diff --git a/drivers/net/enic/enic_res.c b/drivers/net/enic/enic_res.c index de17a31d0..bdda2c564 100644 --- a/drivers/net/enic/enic_res.c +++ b/drivers/net/enic/enic_res.c @@ -138,20 +138,30 @@ int enic_get_vnic_config(struct enic *enic) enic->hash_key_size = ENIC_RSS_HASH_KEY_SIZE; enic->flow_type_rss_offloads = 0; if (ENIC_SETTING(enic, RSSHASH_IPV4)) - enic->flow_type_rss_offloads |= ETH_RSS_IPV4; + /* + * IPV4 hash type handles both non-frag and frag packet types. + * TCP/UDP is controlled via a separate flag below. + */ + enic->flow_type_rss_offloads |= ETH_RSS_IPV4 | + ETH_RSS_FRAG_IPV4 | ETH_RSS_NONFRAG_IPV4_OTHER; if (ENIC_SETTING(enic, RSSHASH_TCPIPV4)) enic->flow_type_rss_offloads |= ETH_RSS_NONFRAG_IPV4_TCP; if (ENIC_SETTING(enic, RSSHASH_IPV6)) - enic->flow_type_rss_offloads |= ETH_RSS_IPV6; + /* + * The VIC adapter can perform RSS on IPv6 packets with and + * without extension headers. An IPv6 "fragment" is an IPv6 + * packet with the fragment extension header. + */ + enic->flow_type_rss_offloads |= ETH_RSS_IPV6 | + ETH_RSS_IPV6_EX | ETH_RSS_FRAG_IPV6 | + ETH_RSS_NONFRAG_IPV6_OTHER; if (ENIC_SETTING(enic, RSSHASH_TCPIPV6)) - enic->flow_type_rss_offloads |= ETH_RSS_NONFRAG_IPV6_TCP; - if (ENIC_SETTING(enic, RSSHASH_IPV6_EX)) - enic->flow_type_rss_offloads |= ETH_RSS_IPV6_EX; - if (ENIC_SETTING(enic, RSSHASH_TCPIPV6_EX)) - enic->flow_type_rss_offloads |= ETH_RSS_IPV6_TCP_EX; + enic->flow_type_rss_offloads |= ETH_RSS_NONFRAG_IPV6_TCP | + ETH_RSS_IPV6_TCP_EX; if (vnic_dev_capable_udp_rss(enic->vdev)) { enic->flow_type_rss_offloads |= - ETH_RSS_NONFRAG_IPV4_UDP | ETH_RSS_NONFRAG_IPV6_UDP; + ETH_RSS_NONFRAG_IPV4_UDP | ETH_RSS_NONFRAG_IPV6_UDP | + ETH_RSS_IPV6_UDP_EX; } /* Zero offloads if RSS is not enabled */