From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from EUR04-VI1-obe.outbound.protection.outlook.com (mail-eopbgr80077.outbound.protection.outlook.com [40.107.8.77]) by dpdk.org (Postfix) with ESMTP id B1309201 for ; Tue, 13 Nov 2018 08:40:18 +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=zdQ0uAGAgVB8yzToevFPI7e9TNOj8D1fpub8fjg79MI=; b=OvMWlP6SxIsNZ62+y5l+fQA7FzBTAyG5q7DjhOkRer9adZP2PPnOk5WpulbhaT4PBatvzDPuaIM1uUUZFZ9mscc7we6QHJkfuh/i3slqMdHuQ/2sGlsZZDaMXCZ6UUQt+UN2WWmDboyEDrV6gsuSaJvdp7EBo/s4QtnHEtnz4Fk= Received: from DB3PR0502MB3980.eurprd05.prod.outlook.com (52.134.72.27) by DB3PR0502MB4073.eurprd05.prod.outlook.com (52.134.68.156) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.1294.31; Tue, 13 Nov 2018 07:40:16 +0000 Received: from DB3PR0502MB3980.eurprd05.prod.outlook.com ([fe80::58e7:97d8:f9c1:4323]) by DB3PR0502MB3980.eurprd05.prod.outlook.com ([fe80::58e7:97d8:f9c1:4323%3]) with mapi id 15.20.1294.045; Tue, 13 Nov 2018 07:40:16 +0000 From: Yongseok Koh To: Shahaf Shuler CC: "dev@dpdk.org" , Ori Kam Thread-Topic: [PATCH] net/mlx5: fix Direct Verbs RSS hash field Thread-Index: AQHUeyMRkSK36+hi60aK2KI0xv+BtaVNUfWA Date: Tue, 13 Nov 2018 07:40:16 +0000 Message-ID: <48FFD43F-1F2D-40A9-BCC2-5E573E2078ED@mellanox.com> References: <20181113073231.28584-1-yskoh@mellanox.com> In-Reply-To: <20181113073231.28584-1-yskoh@mellanox.com> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: authentication-results: spf=none (sender IP is ) smtp.mailfrom=yskoh@mellanox.com; x-originating-ip: [69.181.245.183] x-ms-publictraffictype: Email x-microsoft-exchange-diagnostics: 1; DB3PR0502MB4073; 6:tWsEx5eTUTpUQ4SBg4OYOIz2P3/AdIL88GOJgYfgK+giI7dsgRHnhaqaVuoIGeZ3yZ0yipvdRQagaL5KNEcvwnl5PRHDa5gPeOO78SBYdAkUkb7I1f433fxmEu1Wboh/oUo6AjwiLw73fCEsPWvC13Z7oQvN8/Wz0AWM3EiAckGL5tXfedEu6AqkUOZ3ioD9XbSIT4Ft1xk2wR8oad1ol9bghffPHp+gW1GP8hdx9cB04QiLIdVtzy8gYz5xLIItdZznCSA2MdOiFAk3JsyYrlGYhFSXCRxOw2izYNB0QGDcWl+Jw8uDFmkzAv3AJ4ekWhil8yGka4jQdxxu6JQB31QAiPfvyChQXJo+j1Z913MMiIDPjfWO3+pWU5C6437xglt4ry9nuJ+FjBt3YIk5UW9JYSXCH6yBGsUFdWBhB6FQx7Qe8KwS7cJ6EpEbxHyTS1HdDmFzLrcA3VLJGLAXPQ==; 5:Bd67fSdMFOhfzeq4LJ3zFLB/wycOrUYXekOiOWN2MKY+Kn+v7hOfsgBOZh+RKVsuhDL6mg4/Xzj9rHLLMmLar2zt3CAilVFT8qK0dqpVy8ecO4XSbHP7J/a7NPHubmNrgb/R/LLccKAJMvL8QXv/+izAppwFjAkyQhHWiOX8ADk=; 7:fsPItSJTYrvZQ8A0KP1mDGOdRC/haWnumE2VKPATVxmGaC/YRumyxvFBcRWjGjNdIB3oOwAv1UJItX0z2VD/vAWYjxKkIIqKQ05qbY/mLRQuxp4VSt8uue/j9WxTNo5IsxJldDjJNJm7IaRKJmM38g== x-ms-exchange-antispam-srfa-diagnostics: SOS; x-ms-office365-filtering-correlation-id: fd735797-81df-4a79-ca8b-08d6493b414e x-ms-office365-filtering-ht: Tenant x-microsoft-antispam: BCL:0; PCL:0; RULEID:(2390060)(7020095)(4652040)(8989299)(5600074)(711020)(4618075)(4534185)(4627221)(201703031133081)(201702281549075)(8990200)(2017052603328)(7153060)(7193020); SRVR:DB3PR0502MB4073; x-ms-traffictypediagnostic: DB3PR0502MB4073: x-microsoft-antispam-prvs: x-exchange-antispam-report-test: UriScan:; x-ms-exchange-senderadcheck: 1 x-exchange-antispam-report-cfa-test: BCL:0; PCL:0; RULEID:(8211001083)(6040522)(2401047)(5005006)(8121501046)(93006095)(93001095)(3002001)(3231382)(944501410)(52105112)(10201501046)(6055026)(148016)(149066)(150057)(6041310)(201703131423095)(201702281528075)(20161123555045)(201703061421075)(201703061406153)(20161123560045)(20161123564045)(20161123558120)(20161123562045)(201708071742011)(7699051)(76991095); SRVR:DB3PR0502MB4073; BCL:0; PCL:0; RULEID:; SRVR:DB3PR0502MB4073; x-forefront-prvs: 085551F5A8 x-forefront-antispam-report: SFV:NSPM; SFS:(10009020)(376002)(136003)(346002)(366004)(39860400002)(396003)(189003)(199004)(2906002)(478600001)(7736002)(33656002)(68736007)(8676002)(6116002)(81156014)(3846002)(102836004)(53546011)(81166006)(6506007)(8936002)(97736004)(4326008)(14454004)(82746002)(99286004)(25786009)(76176011)(5660300001)(305945005)(106356001)(105586002)(446003)(11346002)(476003)(2616005)(53936002)(186003)(486006)(6512007)(2900100001)(6862004)(66066001)(54906003)(37006003)(316002)(6246003)(36756003)(26005)(71200400001)(6636002)(71190400001)(83716004)(6436002)(107886003)(6486002)(86362001)(256004)(229853002); DIR:OUT; SFP:1101; SCL:1; SRVR:DB3PR0502MB4073; H:DB3PR0502MB3980.eurprd05.prod.outlook.com; FPR:; SPF:None; LANG:en; PTR:InfoNoRecords; MX:1; A:1; received-spf: None (protection.outlook.com: mellanox.com does not designate permitted sender hosts) x-microsoft-antispam-message-info: V+zalUR0GvIQSnGmFZTWecefZQIzzDNvLK+iqmPn8kPKAB4lasMbLA+Gvx6/2tgXoAZeJNqcR8m84mInd5+s4kf+Wq6oM9I5O+HWdQOwH1VzzxJknPr5MxvbhIaQNUMvNdzTC/YwTqcUBL992e+dUNp2vgopbZXGy2JT8KLavc1UPENbeRbrEAG07n/mXtKNNeR1Z4JnGtaJ7Nkz/Io78SkcxJJ4AbyiJPz64pHSI8qFH45Wcg8RJAoOzw2GtxvkUx7s5utrvYVCoaU7p6TuG1x12YbcMSlHYYyl2vz84gdSPWC8zgJFVXcUo28WSAPSgFxIpkfaPpEq87lwcrGqiEQ7uHvnllSwTRamRd3a3mA= spamdiagnosticoutput: 1:99 spamdiagnosticmetadata: NSPM Content-Type: text/plain; charset="us-ascii" Content-ID: Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 X-OriginatorOrg: Mellanox.com X-MS-Exchange-CrossTenant-Network-Message-Id: fd735797-81df-4a79-ca8b-08d6493b414e X-MS-Exchange-CrossTenant-originalarrivaltime: 13 Nov 2018 07:40:16.5678 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: a652971c-7d2e-4d9b-a6a4-d149256f461b X-MS-Exchange-Transport-CrossTenantHeadersStamped: DB3PR0502MB4073 Subject: Re: [dpdk-dev] [PATCH] net/mlx5: fix Direct Verbs RSS hash field 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, 13 Nov 2018 07:40:19 -0000 Please disregard this email. Shahaf already sent it on my behalf. Thanks, Yongseok > On Nov 12, 2018, at 11:32 PM, Yongseok Koh wrote: >=20 > As mlx5_flow_hashfields_adjust() refers to flow->rss, actions must be > translated prior to items like in Verbs. Otherwise, hash fields are not > correctly set. >=20 > Fixes: d02cb0691299 ("net/mlx5: add Direct Verbs translate actions") > Cc: orika@mellanox.com >=20 > Signed-off-by: Yongseok Koh > --- > drivers/net/mlx5/mlx5_flow_dv.c | 221 ++++++++++++++++++++---------------= ----- > 1 file changed, 111 insertions(+), 110 deletions(-) >=20 > diff --git a/drivers/net/mlx5/mlx5_flow_dv.c b/drivers/net/mlx5/mlx5_flow= _dv.c > index f5a3eded45..a2edd168e4 100644 > --- a/drivers/net/mlx5/mlx5_flow_dv.c > +++ b/drivers/net/mlx5/mlx5_flow_dv.c > @@ -1797,116 +1797,6 @@ flow_dv_translate(struct rte_eth_dev *dev, >=20 > if (priority =3D=3D MLX5_FLOW_PRIO_RSVD) > priority =3D priv->config.flow_prio - 1; > - for (; items->type !=3D RTE_FLOW_ITEM_TYPE_END; items++) { > - int tunnel =3D !!(item_flags & MLX5_FLOW_LAYER_TUNNEL); > - void *match_mask =3D matcher.mask.buf; > - void *match_value =3D dev_flow->dv.value.buf; > - > - switch (items->type) { > - case RTE_FLOW_ITEM_TYPE_ETH: > - flow_dv_translate_item_eth(match_mask, match_value, > - items, tunnel); > - matcher.priority =3D MLX5_PRIORITY_MAP_L2; > - item_flags |=3D tunnel ? MLX5_FLOW_LAYER_INNER_L2 : > - MLX5_FLOW_LAYER_OUTER_L2; > - break; > - case RTE_FLOW_ITEM_TYPE_VLAN: > - flow_dv_translate_item_vlan(match_mask, match_value, > - items, tunnel); > - matcher.priority =3D MLX5_PRIORITY_MAP_L2; > - item_flags |=3D tunnel ? (MLX5_FLOW_LAYER_INNER_L2 | > - MLX5_FLOW_LAYER_INNER_VLAN) : > - (MLX5_FLOW_LAYER_OUTER_L2 | > - MLX5_FLOW_LAYER_OUTER_VLAN); > - break; > - case RTE_FLOW_ITEM_TYPE_IPV4: > - flow_dv_translate_item_ipv4(match_mask, match_value, > - items, tunnel); > - matcher.priority =3D MLX5_PRIORITY_MAP_L3; > - dev_flow->dv.hash_fields |=3D > - mlx5_flow_hashfields_adjust > - (dev_flow, tunnel, > - MLX5_IPV4_LAYER_TYPES, > - MLX5_IPV4_IBV_RX_HASH); > - item_flags |=3D tunnel ? MLX5_FLOW_LAYER_INNER_L3_IPV4 : > - MLX5_FLOW_LAYER_OUTER_L3_IPV4; > - break; > - case RTE_FLOW_ITEM_TYPE_IPV6: > - flow_dv_translate_item_ipv6(match_mask, match_value, > - items, tunnel); > - matcher.priority =3D MLX5_PRIORITY_MAP_L3; > - dev_flow->dv.hash_fields |=3D > - mlx5_flow_hashfields_adjust > - (dev_flow, tunnel, > - MLX5_IPV6_LAYER_TYPES, > - MLX5_IPV6_IBV_RX_HASH); > - item_flags |=3D tunnel ? MLX5_FLOW_LAYER_INNER_L3_IPV6 : > - MLX5_FLOW_LAYER_OUTER_L3_IPV6; > - break; > - case RTE_FLOW_ITEM_TYPE_TCP: > - flow_dv_translate_item_tcp(match_mask, match_value, > - items, tunnel); > - matcher.priority =3D MLX5_PRIORITY_MAP_L4; > - dev_flow->dv.hash_fields |=3D > - mlx5_flow_hashfields_adjust > - (dev_flow, tunnel, ETH_RSS_TCP, > - IBV_RX_HASH_SRC_PORT_TCP | > - IBV_RX_HASH_DST_PORT_TCP); > - item_flags |=3D tunnel ? MLX5_FLOW_LAYER_INNER_L4_TCP : > - MLX5_FLOW_LAYER_OUTER_L4_TCP; > - break; > - case RTE_FLOW_ITEM_TYPE_UDP: > - flow_dv_translate_item_udp(match_mask, match_value, > - items, tunnel); > - matcher.priority =3D MLX5_PRIORITY_MAP_L4; > - dev_flow->dv.hash_fields |=3D > - mlx5_flow_hashfields_adjust > - (dev_flow, tunnel, ETH_RSS_UDP, > - IBV_RX_HASH_SRC_PORT_UDP | > - IBV_RX_HASH_DST_PORT_UDP); > - item_flags |=3D tunnel ? MLX5_FLOW_LAYER_INNER_L4_UDP : > - MLX5_FLOW_LAYER_OUTER_L4_UDP; > - break; > - case RTE_FLOW_ITEM_TYPE_GRE: > - flow_dv_translate_item_gre(match_mask, match_value, > - items, tunnel); > - item_flags |=3D MLX5_FLOW_LAYER_GRE; > - break; > - case RTE_FLOW_ITEM_TYPE_NVGRE: > - flow_dv_translate_item_nvgre(match_mask, match_value, > - items, tunnel); > - item_flags |=3D MLX5_FLOW_LAYER_GRE; > - break; > - case RTE_FLOW_ITEM_TYPE_VXLAN: > - flow_dv_translate_item_vxlan(match_mask, match_value, > - items, tunnel); > - item_flags |=3D MLX5_FLOW_LAYER_VXLAN; > - break; > - case RTE_FLOW_ITEM_TYPE_VXLAN_GPE: > - flow_dv_translate_item_vxlan(match_mask, match_value, > - items, tunnel); > - item_flags |=3D MLX5_FLOW_LAYER_VXLAN_GPE; > - break; > - case RTE_FLOW_ITEM_TYPE_META: > - flow_dv_translate_item_meta(match_mask, match_value, > - items); > - item_flags |=3D MLX5_FLOW_ITEM_METADATA; > - break; > - default: > - break; > - } > - } > - assert(!flow_dv_check_valid_spec(matcher.mask.buf, > - dev_flow->dv.value.buf)); > - dev_flow->layers =3D item_flags; > - /* Register matcher. */ > - matcher.crc =3D rte_raw_cksum((const void *)matcher.mask.buf, > - matcher.mask.size); > - matcher.priority =3D mlx5_flow_adjust_priority(dev, priority, > - matcher.priority); > - matcher.egress =3D attr->egress; > - if (flow_dv_matcher_register(dev, &matcher, dev_flow, error)) > - return -rte_errno; > for (; actions->type !=3D RTE_FLOW_ACTION_TYPE_END; actions++) { > const struct rte_flow_action_queue *queue; > const struct rte_flow_action_rss *rss; > @@ -2040,6 +1930,116 @@ flow_dv_translate(struct rte_eth_dev *dev, > } > dev_flow->dv.actions_n =3D actions_n; > flow->actions =3D action_flags; > + for (; items->type !=3D RTE_FLOW_ITEM_TYPE_END; items++) { > + int tunnel =3D !!(item_flags & MLX5_FLOW_LAYER_TUNNEL); > + void *match_mask =3D matcher.mask.buf; > + void *match_value =3D dev_flow->dv.value.buf; > + > + switch (items->type) { > + case RTE_FLOW_ITEM_TYPE_ETH: > + flow_dv_translate_item_eth(match_mask, match_value, > + items, tunnel); > + matcher.priority =3D MLX5_PRIORITY_MAP_L2; > + item_flags |=3D tunnel ? MLX5_FLOW_LAYER_INNER_L2 : > + MLX5_FLOW_LAYER_OUTER_L2; > + break; > + case RTE_FLOW_ITEM_TYPE_VLAN: > + flow_dv_translate_item_vlan(match_mask, match_value, > + items, tunnel); > + matcher.priority =3D MLX5_PRIORITY_MAP_L2; > + item_flags |=3D tunnel ? (MLX5_FLOW_LAYER_INNER_L2 | > + MLX5_FLOW_LAYER_INNER_VLAN) : > + (MLX5_FLOW_LAYER_OUTER_L2 | > + MLX5_FLOW_LAYER_OUTER_VLAN); > + break; > + case RTE_FLOW_ITEM_TYPE_IPV4: > + flow_dv_translate_item_ipv4(match_mask, match_value, > + items, tunnel); > + matcher.priority =3D MLX5_PRIORITY_MAP_L3; > + dev_flow->dv.hash_fields |=3D > + mlx5_flow_hashfields_adjust > + (dev_flow, tunnel, > + MLX5_IPV4_LAYER_TYPES, > + MLX5_IPV4_IBV_RX_HASH); > + item_flags |=3D tunnel ? MLX5_FLOW_LAYER_INNER_L3_IPV4 : > + MLX5_FLOW_LAYER_OUTER_L3_IPV4; > + break; > + case RTE_FLOW_ITEM_TYPE_IPV6: > + flow_dv_translate_item_ipv6(match_mask, match_value, > + items, tunnel); > + matcher.priority =3D MLX5_PRIORITY_MAP_L3; > + dev_flow->dv.hash_fields |=3D > + mlx5_flow_hashfields_adjust > + (dev_flow, tunnel, > + MLX5_IPV6_LAYER_TYPES, > + MLX5_IPV6_IBV_RX_HASH); > + item_flags |=3D tunnel ? MLX5_FLOW_LAYER_INNER_L3_IPV6 : > + MLX5_FLOW_LAYER_OUTER_L3_IPV6; > + break; > + case RTE_FLOW_ITEM_TYPE_TCP: > + flow_dv_translate_item_tcp(match_mask, match_value, > + items, tunnel); > + matcher.priority =3D MLX5_PRIORITY_MAP_L4; > + dev_flow->dv.hash_fields |=3D > + mlx5_flow_hashfields_adjust > + (dev_flow, tunnel, ETH_RSS_TCP, > + IBV_RX_HASH_SRC_PORT_TCP | > + IBV_RX_HASH_DST_PORT_TCP); > + item_flags |=3D tunnel ? MLX5_FLOW_LAYER_INNER_L4_TCP : > + MLX5_FLOW_LAYER_OUTER_L4_TCP; > + break; > + case RTE_FLOW_ITEM_TYPE_UDP: > + flow_dv_translate_item_udp(match_mask, match_value, > + items, tunnel); > + matcher.priority =3D MLX5_PRIORITY_MAP_L4; > + dev_flow->dv.hash_fields |=3D > + mlx5_flow_hashfields_adjust > + (dev_flow, tunnel, ETH_RSS_UDP, > + IBV_RX_HASH_SRC_PORT_UDP | > + IBV_RX_HASH_DST_PORT_UDP); > + item_flags |=3D tunnel ? MLX5_FLOW_LAYER_INNER_L4_UDP : > + MLX5_FLOW_LAYER_OUTER_L4_UDP; > + break; > + case RTE_FLOW_ITEM_TYPE_GRE: > + flow_dv_translate_item_gre(match_mask, match_value, > + items, tunnel); > + item_flags |=3D MLX5_FLOW_LAYER_GRE; > + break; > + case RTE_FLOW_ITEM_TYPE_NVGRE: > + flow_dv_translate_item_nvgre(match_mask, match_value, > + items, tunnel); > + item_flags |=3D MLX5_FLOW_LAYER_GRE; > + break; > + case RTE_FLOW_ITEM_TYPE_VXLAN: > + flow_dv_translate_item_vxlan(match_mask, match_value, > + items, tunnel); > + item_flags |=3D MLX5_FLOW_LAYER_VXLAN; > + break; > + case RTE_FLOW_ITEM_TYPE_VXLAN_GPE: > + flow_dv_translate_item_vxlan(match_mask, match_value, > + items, tunnel); > + item_flags |=3D MLX5_FLOW_LAYER_VXLAN_GPE; > + break; > + case RTE_FLOW_ITEM_TYPE_META: > + flow_dv_translate_item_meta(match_mask, match_value, > + items); > + item_flags |=3D MLX5_FLOW_ITEM_METADATA; > + break; > + default: > + break; > + } > + } > + assert(!flow_dv_check_valid_spec(matcher.mask.buf, > + dev_flow->dv.value.buf)); > + dev_flow->layers =3D item_flags; > + /* Register matcher. */ > + matcher.crc =3D rte_raw_cksum((const void *)matcher.mask.buf, > + matcher.mask.size); > + matcher.priority =3D mlx5_flow_adjust_priority(dev, priority, > + matcher.priority); > + matcher.egress =3D attr->egress; > + if (flow_dv_matcher_register(dev, &matcher, dev_flow, error)) > + return -rte_errno; > return 0; > } >=20 > @@ -2083,6 +2083,7 @@ flow_dv_apply(struct rte_eth_dev *dev, struct rte_f= low *flow, > } else if (flow->actions & > (MLX5_FLOW_ACTION_QUEUE | MLX5_FLOW_ACTION_RSS)) { > struct mlx5_hrxq *hrxq; > + > hrxq =3D mlx5_hrxq_get(dev, flow->key, > MLX5_RSS_HASH_KEY_LEN, > dv->hash_fields, > --=20 > 2.11.0 >=20