From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from EUR04-HE1-obe.outbound.protection.outlook.com (mail-eopbgr70048.outbound.protection.outlook.com [40.107.7.48]) by dpdk.org (Postfix) with ESMTP id DDF53201 for ; Tue, 13 Nov 2018 08:32:46 +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=t8wX3dFqCbH4YVC9CSiU18XNgu2hDyDQV8t2kgli+uA=; b=gbzY8AdmHoh8ymefbieo3nnWRxW/AaXZ2xL3Ki1fE4oCtqz8Eu4NWo3V3RmS2DtcWE05f6Jp7Y+3PYINoW1OJkar6/YJzWJAU+wAtWhJ1Rt3PHhJr6mQG2uGNhFLiwMyR2CwvmydMTadp81gykUllSYC1OivnWa/Yz2iQQZvI7U= Received: from DB3PR0502MB3980.eurprd05.prod.outlook.com (52.134.72.27) by DB3PR0502MB3963.eurprd05.prod.outlook.com (52.134.72.22) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.1294.27; Tue, 13 Nov 2018 07:32:45 +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:32:45 +0000 From: Yongseok Koh To: Shahaf Shuler CC: "dev@dpdk.org" , Yongseok Koh , Ori Kam Thread-Topic: [PATCH] net/mlx5: fix Direct Verbs RSS hash field Thread-Index: AQHUeyMRkSK36+hi60aK2KI0xv+BtQ== Date: Tue, 13 Nov 2018 07:32:44 +0000 Message-ID: <20181113073231.28584-1-yskoh@mellanox.com> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-clientproxiedby: BYAPR05CA0053.namprd05.prod.outlook.com (2603:10b6:a03:74::30) To DB3PR0502MB3980.eurprd05.prod.outlook.com (2603:10a6:8:10::27) authentication-results: spf=none (sender IP is ) smtp.mailfrom=yskoh@mellanox.com; x-ms-exchange-messagesentrepresentingtype: 1 x-originating-ip: [209.116.155.178] x-ms-publictraffictype: Email x-microsoft-exchange-diagnostics: 1; DB3PR0502MB3963; 6:qlyu9eemnkk5HN46tfHdslzaTPeMGsuWx5m63s+UfLbVL27y+X8czTdNnnzrLMJ8wtaU/xCLXA1vxBUMNC7RHmJT+owBGrTdRedbJNpYiiLHWA2QCjIZrTHsFyRQQQwc8EdjHjBgih7nhO/Rtbh/hQZwd8PMPfqSKPTpX4ci61bpZ7C1dldp+aE8Z6XxA6TsZZ/DwFCQ2VQ5b/CkQD5qiRLqlhrtKfMA/WmxMOFBQyi78+oDXmiuIjoy0LF6Snbk+yiXGoTAlLsAqPrtUvPCSSTLJj0vmEO2gr+luDNeWJ/JSWPEx3LykEDH3HwebxwyS3TLq9PA30OTBfdh1MXU1/HZWzJ8WH4NgPk6bnybZBnm7SZTKxemMP/TN9DpzZJAs4G1bkR1tRmuoknf2ZwMJ+spFcXprFg8SdawS3S7V+9zsK+7HGGZdsPeet34wPeyCBbV753d+S8wGgeQz0KM/Q==; 5:u+S3PHGeBuUyZXMgM9/OdU8kx7C/z12x37OVxmqgtPeNnGnfPwhsOAsi3FThaCOL7ufFJ5NvfLzK/62qZ775zWJxVJ7pFJi+TOp5cBjqdj+mew39JFHnhxFgjnC1hfi3abjvgFnhbkuPoykzKKJJ+GOE5bi4oRlSxG8yWx0emKo=; 7:n6BVQ8464CR3yN3UzisEXeH2/35IcumlPZ0Ix2gD1dS4Qdby2WC7ufykeGDEL6M4Ln+tBrI/M9SNBT/IjjibIOnmeewbUHx5ksLevucxp6atMS5aWcpYxuzwbRL3g1oMn5g2GLqGEwHt7k19ebPLgQ== x-ms-office365-filtering-correlation-id: de207703-a67a-41bd-3d1f-08d6493a33ae 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:DB3PR0502MB3963; x-ms-traffictypediagnostic: DB3PR0502MB3963: 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)(10201501046)(3002001)(3231382)(944501410)(52105112)(93006095)(93001095)(6055026)(148016)(149066)(150057)(6041310)(20161123558120)(20161123564045)(20161123562045)(201703131423095)(201702281528075)(20161123555045)(201703061421075)(201703061406153)(20161123560045)(201708071742011)(7699051)(76991095); SRVR:DB3PR0502MB3963; BCL:0; PCL:0; RULEID:; SRVR:DB3PR0502MB3963; x-forefront-prvs: 085551F5A8 x-forefront-antispam-report: SFV:NSPM; SFS:(10009020)(396003)(376002)(366004)(39860400002)(346002)(136003)(189003)(199004)(1076002)(102836004)(186003)(6636002)(6436002)(105586002)(486006)(316002)(106356001)(1857600001)(107886003)(25786009)(386003)(68736007)(6506007)(5660300001)(8936002)(52116002)(81156014)(81166006)(36756003)(6512007)(66066001)(478600001)(2906002)(14454004)(4326008)(6862004)(53936002)(71190400001)(71200400001)(7736002)(8676002)(6486002)(2616005)(99286004)(305945005)(97736004)(26005)(2900100001)(6116002)(476003)(54906003)(3846002)(86362001)(37006003)(256004); DIR:OUT; SFP:1101; SCL:1; SRVR:DB3PR0502MB3963; 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: g+d5mR56TvJLfB7gD8/kXuMxZgMUdG9wRmmnMBIPhFHB7n6hqufzEZxaboUGs6se6UBbyj/NwxVm4rmqLHat2lE2qL5E7DtmkwrQEAcVgj+DMqlr2eaDdj+867cINyW+CzSbLsa8cjHsev2ZeWX8rqaqvwmxKDn+ehrtpKU0mmxN6Rw7+Ba/yPipHWFNGOBTrytZcHvGJY81cImZKFIHk2St83nwV4cXyBGm5867K/z9p0lebIMIgc0jzccOuTsCRHSVHm10a69VUdBmj1hCN4jG1BQ70qMsXkDc9fXDUkOPIQU1ShlS7hDELqWV3tC0CuOz7B45rrX9n8KqR2NFIymSam3NV3G3r8Q/f7uKlLI= 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: de207703-a67a-41bd-3d1f-08d6493a33ae X-MS-Exchange-CrossTenant-originalarrivaltime: 13 Nov 2018 07:32:44.8960 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: a652971c-7d2e-4d9b-a6a4-d149256f461b X-MS-Exchange-Transport-CrossTenantHeadersStamped: DB3PR0502MB3963 Subject: [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:32:47 -0000 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. Fixes: d02cb0691299 ("net/mlx5: add Direct Verbs translate actions") Cc: orika@mellanox.com Signed-off-by: Yongseok Koh --- drivers/net/mlx5/mlx5_flow_dv.c | 221 ++++++++++++++++++++----------------= ---- 1 file changed, 111 insertions(+), 110 deletions(-) diff --git a/drivers/net/mlx5/mlx5_flow_dv.c b/drivers/net/mlx5/mlx5_flow_d= v.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_flo= w *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