From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from EUR03-AM5-obe.outbound.protection.outlook.com (mail-eopbgr30073.outbound.protection.outlook.com [40.107.3.73]) by dpdk.org (Postfix) with ESMTP id 8F06B2F4F for ; Mon, 29 Oct 2018 07:03:20 +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=DFDgIgu2bMjH8JvYRLdX2QIHzvQNiqufnVcbU4RvcAw=; b=OMq9mlZ8tZloIQbFaqEXqcfrHYlpxEDcETjO3FFj1ALGkNdA2H2tBLRuFWzQ4bHm2Ca6dZQvY0JmGT1xzlRG5HnMZAAF3Ycc1cU3MLFAxJJUe90eUAhcwgNjiXvVYr/zg1lGHKUCdQR8c4+8yZBG0XpxMnrZXp6FHil5jCe3/pc= Received: from AM4PR05MB3425.eurprd05.prod.outlook.com (10.171.187.142) by AM4PR05MB1651.eurprd05.prod.outlook.com (10.165.245.146) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.1273.25; Mon, 29 Oct 2018 06:03:18 +0000 Received: from AM4PR05MB3425.eurprd05.prod.outlook.com ([fe80::61ec:ffec:5ebf:7bd6]) by AM4PR05MB3425.eurprd05.prod.outlook.com ([fe80::61ec:ffec:5ebf:7bd6%3]) with mapi id 15.20.1273.027; Mon, 29 Oct 2018 06:03:18 +0000 From: Ori Kam To: Yongseok Koh , Shahaf Shuler CC: "dev@dpdk.org" Thread-Topic: [PATCH] net/mlx5: fix Direct Verbs getting item and action flags Thread-Index: AQHUbuSH+I7dIxYbCkyDfM3wP2/ck6U1ua5g Date: Mon, 29 Oct 2018 06:03:18 +0000 Message-ID: References: <20181028173440.27808-1-yskoh@mellanox.com> In-Reply-To: <20181028173440.27808-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=orika@mellanox.com; x-originating-ip: [193.47.165.251] x-ms-publictraffictype: Email x-microsoft-exchange-diagnostics: 1; AM4PR05MB1651; 6:3JkKLJRHsVWKTR+3vCaIyyMo+JT/SAqcbslXVDGhAsD9DqsrRBk/JA6ftb5EQ02gRtQbIXm1xQslpT94Im87bZqgdxwkjcWaSS/8TvP76V9W0opTRvlbyTRtpx3/cUexnHsVxFSsj8aXBsIBtdgrb/drnOyOhGxkjSqHFokwGQHNhy+ycerpXnCLZ/p8ZhJjFceNfghoGOPFbxng567pY5FbopGAhOGAkrJswVoyTNuFgCbYStaQ1+lDrhTp3Plw1vIu5817hOoLiV0rWFZhiyytdLqWb9duHwMbjYIiOo8reCrRo5IdeBSQ+O0OQ0by+cNsG/u+h0ZSuJycfveI/hCMGDnPvQWOz0HpEowepKzgx7V1manL7eRo3WHP55PMGlI5P9fIw4cgTVWiQjQ73nZ8cv6bNtuADgCIw6GJyFHktjNee/zZK7qplwiry5ZfGUfmJ5cLuxuftrqi+r0Lcw==; 5:jXyOzLKxpkeg043+Cp55m2UL4B+/Bh+IMYMXl5KJGxZLsxXcUHrCaN9OSAUalW8T1R3M4dv+6VcY2Ua5qY+8yM4vtFZ7R2z1EexHD11lgtq/PMhyvv8g3rlqrmPIZBzpLLE+0kvKLlnTq0qYbrIgJK8BsV17CN4jRvAvaAMHV60=; 7:hHvUZ3FIxiod8gYjDviE+RGcMGVSzIn/8m4l9iAm03zz8vaLZ6RkAyywI/M7+XakxLjL7v3ND3x8BEFx/t5qtW6HJYVKjtxNzT5vchMq54eEKAiNhZ1ylqpdy/u270EgdUXeSlPPZ21rl16n2MElng== x-ms-exchange-antispam-srfa-diagnostics: SOS; x-ms-office365-filtering-correlation-id: 8c5d64d6-381f-4ff0-75fd-08d63d643914 x-ms-office365-filtering-ht: Tenant x-microsoft-antispam: BCL:0; PCL:0; RULEID:(7020095)(4652040)(8989299)(4534185)(4627221)(201703031133081)(201702281549075)(8990200)(5600074)(711020)(4618075)(2017052603328)(7153060)(7193020); SRVR:AM4PR05MB1651; x-ms-traffictypediagnostic: AM4PR05MB1651: 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)(3002001)(10201501046)(93006095)(93001095)(3231382)(944501410)(52105095)(6055026)(148016)(149066)(150057)(6041310)(20161123562045)(20161123564045)(20161123560045)(201703131423095)(201702281528075)(20161123555045)(201703061421075)(201703061406153)(20161123558120)(201708071742011)(7699051)(76991095); SRVR:AM4PR05MB1651; BCL:0; PCL:0; RULEID:; SRVR:AM4PR05MB1651; x-forefront-prvs: 084080FC15 x-forefront-antispam-report: SFV:NSPM; SFS:(10009020)(346002)(136003)(39860400002)(396003)(366004)(376002)(199004)(189003)(51234002)(13464003)(186003)(446003)(6436002)(105586002)(55016002)(4326008)(478600001)(5660300001)(476003)(53936002)(86362001)(575784001)(26005)(9686003)(71200400001)(486006)(33656002)(71190400001)(2906002)(102836004)(106356001)(11346002)(8936002)(110136005)(305945005)(7736002)(8676002)(66066001)(14454004)(81166006)(81156014)(7696005)(5250100002)(25786009)(3846002)(6116002)(97736004)(74316002)(2900100001)(14444005)(6506007)(68736007)(53546011)(256004)(6246003)(229853002)(316002)(6636002)(76176011)(99286004); DIR:OUT; SFP:1101; SCL:1; SRVR:AM4PR05MB1651; H:AM4PR05MB3425.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: o0F3n1rxJw4b8CN2Hf7xObytzR06aU+5whYFLavJk3JQaFb5ZaUaJxOhiOFUn1+L59YJhzWO2vqLoWIq1A76tOPLFM5jCA2Cw64t75sJXW8W6zDOj6EeuEalvqAii6/JTWLaLyOE2uuXcIRVAnOgysfzGmURnRXJXCh2Q9Uf1wwqMbMWybOJcUC/yaG193dcRjV1ygK/qlGzE3s0pxW+ntPEloXJ2zSATnARIxEXxa4SySnxIblGxahWRrwSIUHcc1JuVQOf3OCuiR5hyDZXNO6LBg/VxZZaPk0vGG2eJ7EpEgk1N1UvPrd1zghQtJcYT9nMHrwVuOBz6OZohlxhOmiZJ5rVNZsVMnpqGXoJlMM= spamdiagnosticoutput: 1:99 spamdiagnosticmetadata: NSPM Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 X-OriginatorOrg: Mellanox.com X-MS-Exchange-CrossTenant-Network-Message-Id: 8c5d64d6-381f-4ff0-75fd-08d63d643914 X-MS-Exchange-CrossTenant-originalarrivaltime: 29 Oct 2018 06:03:18.2232 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: a652971c-7d2e-4d9b-a6a4-d149256f461b X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM4PR05MB1651 Subject: Re: [dpdk-dev] [PATCH] net/mlx5: fix Direct Verbs getting item and action flags 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: Mon, 29 Oct 2018 06:03:20 -0000 Why should DV prepare function return the list of actions? The only reason I can think of, is if you want to remove the for loop in dv_translate. And then in flow_dv_create_action change the switch case to ifs. Ori > -----Original Message----- > From: Yongseok Koh > Sent: Sunday, October 28, 2018 7:35 PM > To: Shahaf Shuler > Cc: dev@dpdk.org; Yongseok Koh ; Ori Kam > > Subject: [PATCH] net/mlx5: fix Direct Verbs getting item and action flags >=20 > Flow driver has to provide detected item flags and action flags via > flow_drv_prepare(). DV doesn't return flags at all. >=20 > Fixes: 865a0c15672c ("net/mlx5: add Direct Verbs prepare function") > Cc: orika@mellanox.com >=20 > Signed-off-by: Yongseok Koh > --- > drivers/net/mlx5/mlx5_flow_dv.c | 115 > ++++++++++++++++++++++++++++++++++++---- > 1 file changed, 106 insertions(+), 9 deletions(-) >=20 > diff --git a/drivers/net/mlx5/mlx5_flow_dv.c > b/drivers/net/mlx5/mlx5_flow_dv.c > index 8f729f44f8..67c133c2fb 100644 > --- a/drivers/net/mlx5/mlx5_flow_dv.c > +++ b/drivers/net/mlx5/mlx5_flow_dv.c > @@ -354,6 +354,103 @@ flow_dv_validate(struct rte_eth_dev *dev, const > struct rte_flow_attr *attr, > } >=20 > /** > + * Extract item flags and action flags. > + * > + * @param[in] items > + * Pointer to the list of items. > + * @param[in] actions > + * Pointer to the list of actions. > + * @param[out] item_flags > + * Pointer to bit mask of all items detected. > + * @param[out] action_flags > + * Pointer to bit mask of all actions detected. > + */ > +static void > +flow_dv_get_item_action_flags(const struct rte_flow_item items[], > + const struct rte_flow_action actions[], > + uint64_t *item_flags, uint64_t *action_flags) > +{ > + uint64_t detected_items =3D 0; > + uint64_t detected_actions =3D 0; > + int tunnel; > + > + for (; items->type !=3D RTE_FLOW_ITEM_TYPE_END; items++) { > + tunnel =3D !!(detected_items & MLX5_FLOW_LAYER_TUNNEL); > + switch (items->type) { > + case RTE_FLOW_ITEM_TYPE_ETH: > + detected_items |=3D tunnel ? > MLX5_FLOW_LAYER_INNER_L2 : > + > MLX5_FLOW_LAYER_OUTER_L2; > + break; > + case RTE_FLOW_ITEM_TYPE_VLAN: > + detected_items |=3D tunnel ? > MLX5_FLOW_LAYER_INNER_VLAN : > + > MLX5_FLOW_LAYER_OUTER_VLAN; > + break; > + case RTE_FLOW_ITEM_TYPE_IPV4: > + detected_items |=3D tunnel ? > + MLX5_FLOW_LAYER_INNER_L3_IPV4 > : > + > MLX5_FLOW_LAYER_OUTER_L3_IPV4; > + break; > + case RTE_FLOW_ITEM_TYPE_IPV6: > + detected_items |=3D tunnel ? > + MLX5_FLOW_LAYER_INNER_L3_IPV6 > : > + > MLX5_FLOW_LAYER_OUTER_L3_IPV6; > + break; > + case RTE_FLOW_ITEM_TYPE_TCP: > + detected_items |=3D tunnel ? > + MLX5_FLOW_LAYER_INNER_L4_TCP : > + > MLX5_FLOW_LAYER_OUTER_L4_TCP; > + break; > + case RTE_FLOW_ITEM_TYPE_UDP: > + detected_items |=3D tunnel ? > + MLX5_FLOW_LAYER_INNER_L4_UDP > : > + > MLX5_FLOW_LAYER_OUTER_L4_UDP; > + break; > + case RTE_FLOW_ITEM_TYPE_GRE: > + case RTE_FLOW_ITEM_TYPE_NVGRE: > + detected_items |=3D MLX5_FLOW_LAYER_GRE; > + break; > + case RTE_FLOW_ITEM_TYPE_VXLAN: > + detected_items |=3D MLX5_FLOW_LAYER_VXLAN; > + break; > + case RTE_FLOW_ITEM_TYPE_VXLAN_GPE: > + detected_items |=3D MLX5_FLOW_LAYER_VXLAN_GPE; > + break; > + case RTE_FLOW_ITEM_TYPE_META: > + detected_items |=3D MLX5_FLOW_ITEM_METADATA; > + break; > + default: > + break; > + } > + } > + for (; actions->type !=3D RTE_FLOW_ACTION_TYPE_END; actions++) { > + switch (actions->type) { > + case RTE_FLOW_ACTION_TYPE_FLAG: > + detected_actions |=3D MLX5_FLOW_ACTION_FLAG; > + break; > + case RTE_FLOW_ACTION_TYPE_MARK: > + detected_actions |=3D MLX5_FLOW_ACTION_MARK; > + break; > + case RTE_FLOW_ACTION_TYPE_DROP: > + detected_actions |=3D MLX5_FLOW_ACTION_DROP; > + break; > + case RTE_FLOW_ACTION_TYPE_QUEUE: > + detected_actions |=3D MLX5_FLOW_ACTION_QUEUE; > + break; > + case RTE_FLOW_ACTION_TYPE_RSS: > + detected_actions |=3D MLX5_FLOW_ACTION_RSS; > + break; > + case RTE_FLOW_ACTION_TYPE_COUNT: > + detected_actions |=3D MLX5_FLOW_ACTION_COUNT; > + break; > + default: > + break; > + } > + } > + *item_flags =3D detected_items; > + *action_flags =3D detected_actions; > +} > + > +/** > * Internal preparation function. Allocates the DV flow size, > * this size is constant. > * > @@ -376,15 +473,15 @@ flow_dv_validate(struct rte_eth_dev *dev, const > struct rte_flow_attr *attr, > */ > static struct mlx5_flow * > flow_dv_prepare(const struct rte_flow_attr *attr __rte_unused, > - const struct rte_flow_item items[] __rte_unused, > - const struct rte_flow_action actions[] __rte_unused, > - uint64_t *item_flags __rte_unused, > - uint64_t *action_flags __rte_unused, > + const struct rte_flow_item items[], > + const struct rte_flow_action actions[], > + uint64_t *item_flags, uint64_t *action_flags, > struct rte_flow_error *error) > { > uint32_t size =3D sizeof(struct mlx5_flow); > struct mlx5_flow *flow; >=20 > + flow_dv_get_item_action_flags(items, actions, item_flags, > action_flags); > flow =3D rte_calloc(__func__, 1, size, 0); > if (!flow) { > rte_flow_error_set(error, ENOMEM, > @@ -1067,7 +1164,7 @@ flow_dv_create_action(const struct rte_flow_action > *action, > dev_flow->dv.actions[actions_n].tag_value =3D > mlx5_flow_mark_set(MLX5_FLOW_MARK_DEFAULT); > actions_n++; > - flow->actions |=3D MLX5_FLOW_ACTION_FLAG; > + assert(flow->actions & MLX5_FLOW_ACTION_FLAG); > break; > case RTE_FLOW_ACTION_TYPE_MARK: > dev_flow->dv.actions[actions_n].type =3D > MLX5DV_FLOW_ACTION_TAG; > @@ -1075,18 +1172,18 @@ flow_dv_create_action(const struct > rte_flow_action *action, > mlx5_flow_mark_set > (((const struct rte_flow_action_mark *) > (action->conf))->id); > - flow->actions |=3D MLX5_FLOW_ACTION_MARK; > + assert(flow->actions & MLX5_FLOW_ACTION_MARK); > actions_n++; > break; > case RTE_FLOW_ACTION_TYPE_DROP: > dev_flow->dv.actions[actions_n].type =3D > MLX5DV_FLOW_ACTION_DROP; > - flow->actions |=3D MLX5_FLOW_ACTION_DROP; > + assert(flow->actions & MLX5_FLOW_ACTION_DROP); > break; > case RTE_FLOW_ACTION_TYPE_QUEUE: > queue =3D action->conf; > flow->rss.queue_num =3D 1; > (*flow->queue)[0] =3D queue->index; > - flow->actions |=3D MLX5_FLOW_ACTION_QUEUE; > + assert(flow->actions & MLX5_FLOW_ACTION_QUEUE); > break; > case RTE_FLOW_ACTION_TYPE_RSS: > rss =3D action->conf; > @@ -1098,7 +1195,7 @@ flow_dv_create_action(const struct rte_flow_action > *action, > flow->rss.types =3D 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; > + assert(flow->actions & MLX5_FLOW_ACTION_RSS); > break; > default: > break; > -- > 2.11.0