From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from EUR01-HE1-obe.outbound.protection.outlook.com (mail-he1eur01on0049.outbound.protection.outlook.com [104.47.0.49]) by dpdk.org (Postfix) with ESMTP id F0EC5201 for ; Sun, 4 Nov 2018 13:10:21 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=Mellanox.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=NBu172iOmc1l6suCosqx/1jCbUA/taigDPlmiGeMCPY=; b=wYGZKy/OXAd8ceXNDr0M9vGOgXOCYw0o+lZJOUPwTnN20pg+5VE44JK715Zfk8nCWMfkafTLAKugucpB22Xl+3+/Xg8qOi0hnlPZed2U5MmnF/4FVKCnDXDyIyJi2uuhiCZO8zO1iDNf2D62cNsEsKpCrRLn3a8QmCA0kDHtTnc= Received: from VI1PR0502MB3743.eurprd05.prod.outlook.com (52.134.8.154) by VI1PR0502MB2879.eurprd05.prod.outlook.com (10.175.24.137) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.1294.20; Sun, 4 Nov 2018 12:10:20 +0000 Received: from VI1PR0502MB3743.eurprd05.prod.outlook.com ([fe80::84d3:8812:d45c:98e4]) by VI1PR0502MB3743.eurprd05.prod.outlook.com ([fe80::84d3:8812:d45c:98e4%4]) with mapi id 15.20.1294.028; Sun, 4 Nov 2018 12:10:20 +0000 From: Ophir Munk To: Yongseok Koh , "dev@dpdk.org" CC: Asaf Penso , Shahaf Shuler , Thomas Monjalon , Olga Shern , Ophir Munk Thread-Topic: [PATCH v5] net/mlx5: set RSS key to NULL to indicate default RSS Thread-Index: AQHUdDdbHkd8IkLZKEOhoRunWlrvoQ== Date: Sun, 4 Nov 2018 12:10:20 +0000 Message-ID: <1541333410-1543-1-git-send-email-ophirmu@mellanox.com> References: <1541266779-10519-1-git-send-email-ophirmu@mellanox.com> In-Reply-To: <1541266779-10519-1-git-send-email-ophirmu@mellanox.com> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-clientproxiedby: CWLP265CA0306.GBRP265.PROD.OUTLOOK.COM (2603:10a6:401:5d::30) To VI1PR0502MB3743.eurprd05.prod.outlook.com (2603:10a6:803:11::26) authentication-results: spf=none (sender IP is ) smtp.mailfrom=ophirmu@mellanox.com; x-ms-exchange-messagesentrepresentingtype: 1 x-originating-ip: [37.142.13.130] x-ms-publictraffictype: Email x-microsoft-exchange-diagnostics: 1; VI1PR0502MB2879; 6:vCU0hE1ALPfFNOMKJ1jBD7RvgJzIErCW3ezGWlEjRNkEzY2bcAiz10Wv+pJR8QQYMAmPp1E4agWH1An0OZvVqkaXldpw9+oVNaKhKDuWn0Ais7X061aSdkgA57y/kWdxDjapzaots2EHvhFEqrI4IJJQHkJ78O3/KAFAsbjqfV5b7CaxJNFNlMG02ecthkLdXJ/kpVY389LhED4I4x9MOqq2AzGRi/Mydrnl1EMYNohCyENDkR80RHSG0q5QHu5RxuRqiP7IXN5DKa9HiQANkBX1KQWJ/UhCWfg53BYJ6n+orfCtZi9aYDtoei75fqW1HjG4Xl12dNQHLJ9DWC54HVW+RCGB/YwmJeMCCt8jm1dlMNpHM/mxyFo7dgVG89TbN7PkcR6ORS1++oj6PCGSv+Lum94zUNt60n36eBbWKDWOhn6Krgh/U9Ya42a6K+rb1h0GVF0y6tSmhHHzRrZMtQ==; 5:BPMiTDEykT5esRyX2TgqvlAGtk49imYrCYOe4gUGYRTH5RivpdeA41RkuMLdPpMtXYBQjcbvj39yOb/O0MLSMLonoaJoZOF4gp7JTq/q74SACuy22p8UjHaGIprn+/Oi5e5QahODaqrDHFwg+1foaZAiG6afW7cRMXBtMO08/TA=; 7:WfxzrJ/YN+uyF3OWUhd3MhzD7oEGDtpvciJiMogWUYcnfl9qcU9Qiy8SCZ8181icIFQAUZRBTDrTAaVjUwP4vCCehSzvt7zUYKIV1SlYXr0c1STzHgojNcxC/SeorP+nXiwaVDSZEhUrVVNj5bhe2Q== x-ms-office365-filtering-correlation-id: 0c058eeb-fdc5-43fa-9732-08d6424e7d8a x-ms-office365-filtering-ht: Tenant x-microsoft-antispam: BCL:0; PCL:0; RULEID:(7020095)(4652040)(8989299)(5600074)(711020)(4618075)(4534185)(4627221)(201703031133081)(201702281549075)(8990200)(2017052603328)(7153060)(7193020); SRVR:VI1PR0502MB2879; x-ms-traffictypediagnostic: VI1PR0502MB2879: x-ld-processed: a652971c-7d2e-4d9b-a6a4-d149256f461b,ExtAddr x-microsoft-antispam-prvs: x-exchange-antispam-report-test: UriScan:(278428928389397); x-ms-exchange-senderadcheck: 1 x-exchange-antispam-report-cfa-test: BCL:0; PCL:0; RULEID:(8211001083)(6040522)(2401047)(5005006)(8121501046)(3231382)(944501410)(52105095)(3002001)(10201501046)(93006095)(93001095)(6055026)(148016)(149066)(150057)(6041310)(201703131423095)(201702281528075)(20161123555045)(201703061421075)(201703061406153)(20161123562045)(20161123560045)(20161123564045)(20161123558120)(201708071742011)(7699051)(76991095); SRVR:VI1PR0502MB2879; BCL:0; PCL:0; RULEID:; SRVR:VI1PR0502MB2879; x-forefront-prvs: 084674B2CF x-forefront-antispam-report: SFV:NSPM; SFS:(10009020)(136003)(346002)(376002)(366004)(396003)(39860400002)(199004)(189003)(99286004)(66066001)(14454004)(81166006)(81156014)(52116002)(478600001)(6116002)(3846002)(966005)(54906003)(8936002)(110136005)(6306002)(53936002)(6512007)(97736004)(5660300001)(76176011)(107886003)(8676002)(2501003)(7736002)(305945005)(6436002)(2906002)(6486002)(26005)(386003)(6506007)(25786009)(36756003)(316002)(86362001)(4326008)(68736007)(186003)(71200400001)(71190400001)(446003)(11346002)(486006)(476003)(102836004)(106356001)(2616005)(256004)(2900100001)(105586002); DIR:OUT; SFP:1101; SCL:1; SRVR:VI1PR0502MB2879; H:VI1PR0502MB3743.eurprd05.prod.outlook.com; FPR:; SPF:None; LANG:en; PTR:InfoNoRecords; A:1; MX:1; received-spf: None (protection.outlook.com: mellanox.com does not designate permitted sender hosts) x-microsoft-antispam-message-info: hjynIWazoGaaGe2JJCbqC1EklYdSI2sKz6MKHhnbGmOros0DgWYhTzix5TgVKl5AagNGFzCOpjJdIkuWOchruKLdNPMlQxQimU4m69rohhM0Skn8GQNrKu8TS8fmfqincYckJQlsohDVQyzHDk/cKRDvqdlICKwjLyXY/sRdt28lTjhDTw/KEewpBh3tEjnHAC8WsHR7/7xjTXkdhCNftUuY8BMljvU+NqXKUpy4IWba0+86baYzks+t1rfBrNTCSJqKd4D5Hg+ZjOIt8B+sSIQSQr+siYObziv/8O9nQ6EyFKEmkMpBn3U9MoozUp2FlikyzPql3kCV/2xulU6C7MTREonWCL9wcRDk9O/VRO8= spamdiagnosticoutput: 1:99 spamdiagnosticmetadata: NSPM Content-Type: text/plain; charset="iso-8859-1" Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 X-OriginatorOrg: Mellanox.com X-MS-Exchange-CrossTenant-Network-Message-Id: 0c058eeb-fdc5-43fa-9732-08d6424e7d8a X-MS-Exchange-CrossTenant-originalarrivaltime: 04 Nov 2018 12:10:20.3589 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: a652971c-7d2e-4d9b-a6a4-d149256f461b X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI1PR0502MB2879 Subject: [dpdk-dev] [PATCH v5] net/mlx5: set RSS key to NULL to indicate default RSS 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: Sun, 04 Nov 2018 12:10:22 -0000 Applications which add RSS rules must supply an RSS key and length. If an application is only interested in default RSS operation it should not care about the exact RSS key. By setting the key to NULL - the PMD will use the default RSS key. In addition if the application does not care about the RSS type it can set it to 0 and the PMD will use the default type (ETH_RSS_IP). Signed-off-by: Ophir Munk --- v1: Initial release v2, v3: Rebase + following code review v4: Avoid sgementation faulut by not allowing in cation validation key=3DNULL a= ne key_len!=3D0 See https://patches.dpdk.org/patch/47645/ v5: Add missing variable const uint8_t *rss_key in function flow_dv_create_acti= on() (code is under #ifdef HAVE_IBV_FLOW_DV_SUPPORT) Adding Acked-by: Shahaf Shuler doc/guides/nics/mlx5.rst | 1 + drivers/net/mlx5/mlx5_flow.c | 8 +++++++- drivers/net/mlx5/mlx5_flow_dv.c | 8 ++++++-- drivers/net/mlx5/mlx5_flow_verbs.c | 8 ++++++-- drivers/net/mlx5/mlx5_rxq.c | 18 ++++-------------- 5 files changed, 24 insertions(+), 19 deletions(-) diff --git a/doc/guides/nics/mlx5.rst b/doc/guides/nics/mlx5.rst index 1dc3282..0303152 100644 --- a/doc/guides/nics/mlx5.rst +++ b/doc/guides/nics/mlx5.rst @@ -54,6 +54,7 @@ Features - Support for scattered TX and RX frames. - IPv4, IPv6, TCPv4, TCPv6, UDPv4 and UDPv6 RSS on any number of queues. - Several RSS hash keys, one for each flow type. +- Default RSS operation with no hash key specification. - Configurable RETA table. - Support for multiple MAC addresses. - VLAN filtering. diff --git a/drivers/net/mlx5/mlx5_flow.c b/drivers/net/mlx5/mlx5_flow.c index 107a4f0..be2cc6b 100644 --- a/drivers/net/mlx5/mlx5_flow.c +++ b/drivers/net/mlx5/mlx5_flow.c @@ -912,7 +912,13 @@ uint32_t mlx5_flow_adjust_priority(struct rte_eth_dev = *dev, int32_t priority, RTE_FLOW_ERROR_TYPE_ACTION_CONF, &rss->level, "tunnel RSS is not supported"); - if (rss->key_len < MLX5_RSS_HASH_KEY_LEN) + /* allow RSS key_len 0 in case of NULL (default) RSS key. */ + if (rss->key_len =3D=3D 0 && rss->key !=3D NULL) + return rte_flow_error_set(error, ENOTSUP, + RTE_FLOW_ERROR_TYPE_ACTION_CONF, + &rss->key_len, + "RSS hash key length 0"); + if (rss->key_len > 0 && rss->key_len < MLX5_RSS_HASH_KEY_LEN) return rte_flow_error_set(error, ENOTSUP, RTE_FLOW_ERROR_TYPE_ACTION_CONF, &rss->key_len, diff --git a/drivers/net/mlx5/mlx5_flow_dv.c b/drivers/net/mlx5/mlx5_flow_d= v.c index c11ecd4..1d5b6bf 100644 --- a/drivers/net/mlx5/mlx5_flow_dv.c +++ b/drivers/net/mlx5/mlx5_flow_dv.c @@ -1722,6 +1722,7 @@ int actions_n =3D dev_flow->dv.actions_n; struct rte_flow *flow =3D dev_flow->flow; const struct rte_flow_action *action_ptr =3D action; + const uint8_t *rss_key; =20 switch (action->type) { case RTE_FLOW_ACTION_TYPE_VOID: @@ -1758,8 +1759,11 @@ memcpy((*flow->queue), rss->queue, rss->queue_num * sizeof(uint16_t)); flow->rss.queue_num =3D rss->queue_num; - memcpy(flow->key, rss->key, MLX5_RSS_HASH_KEY_LEN); - flow->rss.types =3D rss->types; + /* NULL RSS key indicates default RSS key. */ + rss_key =3D !rss->key ? rss_hash_default_key : rss->key; + memcpy(flow->key, rss_key, MLX5_RSS_HASH_KEY_LEN); + /* RSS type 0 indicates default RSS type ETH_RSS_IP. */ + flow->rss.types =3D !rss->types ? ETH_RSS_IP : rss->types; flow->rss.level =3D rss->level; /* Added to array only in apply since we need the QP */ flow->actions |=3D MLX5_FLOW_ACTION_RSS; diff --git a/drivers/net/mlx5/mlx5_flow_verbs.c b/drivers/net/mlx5/mlx5_flo= w_verbs.c index 2e506b9..54ac620 100644 --- a/drivers/net/mlx5/mlx5_flow_verbs.c +++ b/drivers/net/mlx5/mlx5_flow_verbs.c @@ -925,14 +925,18 @@ struct mlx5_flow *dev_flow) { const struct rte_flow_action_rss *rss =3D action->conf; + const uint8_t *rss_key; struct rte_flow *flow =3D dev_flow->flow; =20 if (flow->queue) memcpy((*flow->queue), rss->queue, rss->queue_num * sizeof(uint16_t)); flow->rss.queue_num =3D rss->queue_num; - memcpy(flow->key, rss->key, MLX5_RSS_HASH_KEY_LEN); - flow->rss.types =3D rss->types; + /* NULL RSS key indicates default RSS key. */ + rss_key =3D !rss->key ? rss_hash_default_key : rss->key; + memcpy(flow->key, rss_key, MLX5_RSS_HASH_KEY_LEN); + /* RSS type 0 indicates default RSS type (ETH_RSS_IP). */ + flow->rss.types =3D !rss->types ? ETH_RSS_IP : rss->types; flow->rss.level =3D rss->level; *action_flags |=3D MLX5_FLOW_ACTION_RSS; } diff --git a/drivers/net/mlx5/mlx5_rxq.c b/drivers/net/mlx5/mlx5_rxq.c index 6df8997..eef4850 100644 --- a/drivers/net/mlx5/mlx5_rxq.c +++ b/drivers/net/mlx5/mlx5_rxq.c @@ -1794,10 +1794,6 @@ struct mlx5_hrxq * rte_errno =3D ENOMEM; return NULL; } - if (!rss_key_len) { - rss_key_len =3D MLX5_RSS_HASH_KEY_LEN; - rss_key =3D rss_hash_default_key; - } #ifdef HAVE_IBV_DEVICE_TUNNEL_SUPPORT if (tunnel) { qp_init_attr.comp_mask =3D @@ -1823,11 +1819,8 @@ struct mlx5_hrxq * IBV_QP_INIT_ATTR_RX_HASH, .rx_hash_conf =3D (struct ibv_rx_hash_conf){ .rx_hash_function =3D IBV_RX_HASH_FUNC_TOEPLITZ, - .rx_hash_key_len =3D rss_key_len ? rss_key_len : - MLX5_RSS_HASH_KEY_LEN, - .rx_hash_key =3D rss_key ? - (void *)(uintptr_t)rss_key : - rss_hash_default_key, + .rx_hash_key_len =3D rss_key_len, + .rx_hash_key =3D (void *)(uintptr_t)rss_key, .rx_hash_fields_mask =3D hash_fields, }, .rwq_ind_tbl =3D ind_tbl->ind_table, @@ -1845,11 +1838,8 @@ struct mlx5_hrxq * IBV_QP_INIT_ATTR_RX_HASH, .rx_hash_conf =3D (struct ibv_rx_hash_conf){ .rx_hash_function =3D IBV_RX_HASH_FUNC_TOEPLITZ, - .rx_hash_key_len =3D rss_key_len ? rss_key_len : - MLX5_RSS_HASH_KEY_LEN, - .rx_hash_key =3D rss_key ? - (void *)(uintptr_t)rss_key : - rss_hash_default_key, + .rx_hash_key_len =3D rss_key_len, + .rx_hash_key =3D (void *)(uintptr_t)rss_key, .rx_hash_fields_mask =3D hash_fields, }, .rwq_ind_tbl =3D ind_tbl->ind_table, --=20 1.8.3.1