From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from dpdk.org (dpdk.org [92.243.14.124]) by inbox.dpdk.org (Postfix) with ESMTP id BC1C9A053D for ; Mon, 27 Jul 2020 18:21:05 +0200 (CEST) Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id 4910E1BFF5; Mon, 27 Jul 2020 18:21:05 +0200 (CEST) Received: from EUR04-HE1-obe.outbound.protection.outlook.com (mail-eopbgr70089.outbound.protection.outlook.com [40.107.7.89]) by dpdk.org (Postfix) with ESMTP id 056BB1BE8A; Mon, 27 Jul 2020 18:21:02 +0200 (CEST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=UohPmGAs46U7rJnSvGuMEqwzE++pbq0+QADY+kjk9hN7J8qEKGoZn2Ive9WnO1bjg4kHiK3I8XfR4BBs8IgjCCKHru5cbnj9y8Lp7Y6Z7H7PZ/xLZsgyydxzjUvJjvEMm8Jx1PndsjmbM1raol/ncL7OKbeenNIvUJ0z7/B2MxyWBek6bVLfOwu/dmfzt7n0SXoN1OToh6ISUzz9+f9k+z46KIrSjdyiH5ssGgE3jSDhDpuhGFG2UjKAfkJgsVAryOHbX1R++UK0I8REpklvDlAbCPqoVRCh/A9YvyuMS6Tnvn/FsHYOY8XeHeKGcha4pMivxHtPTWTC7XTx3QJFBA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=xCiqQCAw5uXYb/Zmurqb04Ie+mGuxbJVOPAS6hGorNQ=; b=ZfPwKC+rcqK1m8MH87muO9BQpJdrj0aw/K7nGASRqKW5k+Hx0SPnzBXq9blhcYzgwaG1/B1/dsJO1TxRFA9O+VfeGVcsRWBzu9403F2eNxZizd6L4o9iN3vKT7A8fT2TdV0FgFy8gwKvr4AnmAQ5PLr17Zodl1rZFaramctummgBXiB/n2EBmDVcayswUf4F+1tkSaT4OTysVeCqbQflVqrDzfQc4NOnO/BCdxmSTX/Cj+7ln3lWpFoEcfGLNrXwIAJHUxralYExP3OUfPkkHGk7S2ThyzZeujELKe0kPed5LawvcfskF+EKnUSir12XKcOx5Yxbh+DCXY1Dn2+iwg== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=mellanox.com; dmarc=pass action=none header.from=mellanox.com; dkim=pass header.d=mellanox.com; arc=none 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=xCiqQCAw5uXYb/Zmurqb04Ie+mGuxbJVOPAS6hGorNQ=; b=Ukp5TBkR2HDkDpMiFZtz+v/rWqCIZeuTQdxek595Ro8kLBUiNiiXTls7pn440aqen0xCMw7iHksg/uXCCOtP+UFo1TpWPIHiE0uy0ob55eFoyEi6ASmgy0J86S3tPxFaovOH2QmzANRyUIv8QxXqBcnAbS6cSstMjZkvEL9eg1M= Received: from AM6PR05MB5176.eurprd05.prod.outlook.com (2603:10a6:20b:63::30) by AM6PR05MB4375.eurprd05.prod.outlook.com (2603:10a6:209:48::10) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3216.24; Mon, 27 Jul 2020 16:21:01 +0000 Received: from AM6PR05MB5176.eurprd05.prod.outlook.com ([fe80::9024:accb:4d6b:805f]) by AM6PR05MB5176.eurprd05.prod.outlook.com ([fe80::9024:accb:4d6b:805f%3]) with mapi id 15.20.3216.033; Mon, 27 Jul 2020 16:21:00 +0000 From: Ori Kam To: Dekel Peled , Raslan Darawsheh , Thomas Monjalon , "ferruh.yigit@intel.com" , Andrew Rybchenko CC: "dev@dpdk.org" , "stable@dpdk.org" , Matan Azrad , Slava Ovsiienko Thread-Topic: [PATCH] ethdev: fix RSS flow expansion in case of mismatch Thread-Index: AQHWZBlsyRCaQGPKS0OpZMqcSn+cpakbk6Fg Date: Mon, 27 Jul 2020 16:21:00 +0000 Message-ID: References: In-Reply-To: Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: authentication-results: mellanox.com; dkim=none (message not signed) header.d=none;mellanox.com; dmarc=none action=none header.from=mellanox.com; x-originating-ip: [147.236.152.129] x-ms-publictraffictype: Email x-ms-office365-filtering-ht: Tenant x-ms-office365-filtering-correlation-id: 910bd486-becf-469b-8fa1-08d832490d45 x-ms-traffictypediagnostic: AM6PR05MB4375: x-ld-processed: a652971c-7d2e-4d9b-a6a4-d149256f461b,ExtFwd x-ms-exchange-transport-forked: True x-microsoft-antispam-prvs: x-ms-oob-tlc-oobclassifiers: OLM:9508; x-ms-exchange-senderadcheck: 1 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: Ij9hVcipmS+SyKiq7Bjmlm7p703tAUdpI+LsNGgAxVf4N1RBV7fgdl3WcBA3LWrs7K+lKZHd2mMceQyvYylXaze2SePMqoWvunhBmXuJ+Q2961LZIqkjx8SRyXPu6erbOM9hcakLKEImACuSTnIjIljSXcGcjTPJg2gTFSYi/8Bx0bHMvBryE2af0oMjmUs0zO98LRhoWEdvZke+8w6mRF5D12xH3xh0CTAHlq0XsvXbISNMHrO96rzf+siPBtObTLDv+ENS448h7RjcllEGGf1wW//2Fl0hHdsutRsDo5JEw/X4zhAtmcjg+JPudeqT x-forefront-antispam-report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:AM6PR05MB5176.eurprd05.prod.outlook.com; PTR:; CAT:NONE; SFTY:; SFS:(4636009)(366004)(39860400002)(346002)(136003)(376002)(396003)(66446008)(66476007)(8936002)(26005)(64756008)(9686003)(186003)(66556008)(66946007)(76116006)(55016002)(8676002)(52536014)(83380400001)(4326008)(6506007)(316002)(107886003)(54906003)(110136005)(71200400001)(2906002)(5660300002)(33656002)(86362001)(478600001)(7696005); DIR:OUT; SFP:1101; x-ms-exchange-antispam-messagedata: T4q9gzsi7PgKmq3w/3Vkdfp7W+WFYNRQLSoSX8qyxna5aHMMVb33EP6JddAN/uMqkR1Cp3wIaMBjiKIJGG7BvT6C1j8/FBofj58tORKL19xsem60T3ifyFjqmh2p1WWMWYOTzf1zliT4tOGEBmQUsYHtJ7epkrcY4FKTo5ugkQKQKMs/Zpw/ZLAUfBvyI8gdnh8I9b6/2zFggb7jA05btGVelmv7azl3B7WaZe+bEgDHswKgeYcs8sO0gBZj/O+oktZRl288O13WDaBoCeA9oviu4sXOoN/yQgekR6kp85tCTfESqKoCwgoxKQNfHEOhkQr8CZa5ZkOpu8iB1Bc49UlaSSnhxcftLfB5QsytLxlPRcCe4xLQJttTAIDK2ULpg/BhH6s6mib+I402JKEUrQVGr/qQqqeG4KY1yaoDb8JjRXLZsyDl/bkAWlIyyki2frSMUi84s9vdoczxUixPE36QIOuiIosdTAkBiWfijIf4IIDCl3v/gFgRgHyIfjqs Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 X-OriginatorOrg: Mellanox.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: AM6PR05MB5176.eurprd05.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 910bd486-becf-469b-8fa1-08d832490d45 X-MS-Exchange-CrossTenant-originalarrivaltime: 27 Jul 2020 16:21:00.8319 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: a652971c-7d2e-4d9b-a6a4-d149256f461b X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: zZqKl9mnwYVOpzGDkUdwr5i6Jq7bVQWzEJPLK5WesebGs93dOcDvw7WVhyTP71QlEC/m2YVCgQO61PeEmLyydw== X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM6PR05MB4375 Subject: Re: [dpdk-stable] [PATCH] ethdev: fix RSS flow expansion in case of mismatch X-BeenThere: stable@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: patches for DPDK stable branches List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: stable-bounces@dpdk.org Sender: "stable" Hi Dekel, > -----Original Message----- > From: Dekel Peled >=20 > Resending To: maintaners. >=20 > > -----Original Message----- > > From: Dekel Peled > > > > Function rte_flow_expand_rss() is used to expand a flow rule with parti= al > > pattern into several rules, to ensure all relevant packets are matched. > > It uses utility function rte_flow_expand_rss_item_complete(), to check = if > > the last valid item in the flow rule pattern needs to be completed. Which is also based on the requested RSS type. Right? If no RSS type is set= then the issue will not appear. > > For example the pattern "eth / ipv4 proto is 17 / end" will be complete= d with > > a "udp" item. Only if UDP rss type is selected, if TCP is selected then it will be TCP ri= ght? > > This function returns "void" item in two cases: > > 1) The last item has empty spec, for example "eth / ipv4 / end". > > 2) The last itme has spec that can't be expanded for RSS. > > For example the pattern "eth / ipv4 proto is 47 / end" ends with IPv= 4 > > item that has next protocol GRE. > > Typo in itme -> item? > > In both cases the flow rule may be expanded, but in the second case suc= h > > expansion may create rules with invalid pattern. You mean that in both cases the flow will be expanded, that is the issue. That in the second case the flow shouldn't be expended. > > For example "eth / ipv4 proto is 47 / udp / end". > > In such a case the flow rule should not be expanded. > > > > This patch updates function rte_flow_expand_rss_item_complete(). > > Return value RTE_FLOW_ITEM_TYPE_END is used to indicate the flow rule > > should not be expanded. > > In such a case, rte_flow_expand_rss() will return with the original flo= w rule > > only, without any expansion. > > > > Fixes: fc2dd8dd492f ("ethdev: fix expand RSS flows") > > Cc: stable@dpdk.org > > > > Signed-off-by: Dekel Peled > > Acked-by: Xiaoyu Min > > Acked-by: Viacheslav Ovsiienko > > --- > > lib/librte_ethdev/rte_flow.c | 16 ++++++++++++++-- > > 1 file changed, 14 insertions(+), 2 deletions(-) > > > > diff --git a/lib/librte_ethdev/rte_flow.c b/lib/librte_ethdev/rte_flow.= c index > > f8fdd68..59a386d 100644 > > --- a/lib/librte_ethdev/rte_flow.c > > +++ b/lib/librte_ethdev/rte_flow.c > > @@ -247,6 +247,8 @@ struct rte_flow_desc_data { > > ret =3D RTE_FLOW_ITEM_TYPE_IPV6; > > else if (rte_be_to_cpu_16(ether_type) =3D=3D > > RTE_ETHER_TYPE_VLAN) > > ret =3D RTE_FLOW_ITEM_TYPE_VLAN; > > + else > > + ret =3D RTE_FLOW_ITEM_TYPE_END; > > break; > > case RTE_FLOW_ITEM_TYPE_VLAN: > > if (item->mask) > > @@ -264,6 +266,8 @@ struct rte_flow_desc_data { > > ret =3D RTE_FLOW_ITEM_TYPE_IPV6; > > else if (rte_be_to_cpu_16(ether_type) =3D=3D > > RTE_ETHER_TYPE_VLAN) > > ret =3D RTE_FLOW_ITEM_TYPE_VLAN; > > + else > > + ret =3D RTE_FLOW_ITEM_TYPE_END; > > break; > > case RTE_FLOW_ITEM_TYPE_IPV4: > > if (item->mask) > > @@ -284,6 +288,8 @@ struct rte_flow_desc_data { > > ret =3D RTE_FLOW_ITEM_TYPE_IPV4; > > else if (ip_next_proto =3D=3D IPPROTO_IPV6) > > ret =3D RTE_FLOW_ITEM_TYPE_IPV6; > > + else > > + ret =3D RTE_FLOW_ITEM_TYPE_END; > > break; > > case RTE_FLOW_ITEM_TYPE_IPV6: > > if (item->mask) > > @@ -304,6 +310,8 @@ struct rte_flow_desc_data { > > ret =3D RTE_FLOW_ITEM_TYPE_IPV4; > > else if (ip_next_proto =3D=3D IPPROTO_IPV6) > > ret =3D RTE_FLOW_ITEM_TYPE_IPV6; > > + else > > + ret =3D RTE_FLOW_ITEM_TYPE_END; > > break; > > default: > > ret =3D RTE_FLOW_ITEM_TYPE_VOID; > > @@ -1110,10 +1118,14 @@ enum rte_flow_conv_item_spec_type { > > memset(flow_items, 0, sizeof(flow_items)); > > user_pattern_size -=3D sizeof(*item); > > /* > > - * Check if the last valid item has spec set > > - * and need complete pattern. > > + * Check if the last valid item has spec set, need complete pattern, > > + * and the pattern can be used for expansion. > > */ > > missed_item.type =3D > > rte_flow_expand_rss_item_complete(last_item); > > + if (missed_item.type =3D=3D RTE_FLOW_ITEM_TYPE_END) { > > + /* Item type END indicates expansion is not required. */ > > + return lsize; > > + } > > if (missed_item.type !=3D RTE_FLOW_ITEM_TYPE_VOID) { > > next =3D NULL; > > missed =3D 1; > > -- > > 1.8.3.1 I don't think this is the correct solution. The idea of the rte_flow_expand_rss_item_complete function is to add the last item so later the parsing will be based on items regardless of spe= c. This mean the function already support pattern with the following format: Eth / ipv4 / gre. What the result will be? Will it be expended?=20 I think the solution should be that the function will return the correct it= em. Assuming there is such an item. Best, Ori