From mboxrd@z Thu Jan 1 00:00:00 1970 From: Raslan Darawsheh Subject: [PATCH v1] net/mlx5: fix flow type for allmulti rules Date: Tue, 5 Dec 2017 11:37:50 +0200 Message-ID: <1512466670-19229-1-git-send-email-rasland@mellanox.com> Mime-Version: 1.0 Content-Type: text/plain Cc: shahafs@mellanox.com To: dev@dpdk.org Return-path: Received: from EUR01-HE1-obe.outbound.protection.outlook.com (mail-he1eur01on0040.outbound.protection.outlook.com [104.47.0.40]) by dpdk.org (Postfix) with ESMTP id C86251E2B for ; Tue, 5 Dec 2017 10:38:07 +0100 (CET) List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org Sender: "dev" Chnaged ibv_flow_attr type for allmulti rule to IBV_FLOW_ATTR_MC_DEFAULT instead of IBV_FLOW_ATTR_NORMAL, in case allmulti was enabled. Fixes: 272733b5 ("net/mlx5: use flow to enable unicast traffic") Signed-off-by: Raslan Darawsheh --- drivers/net/mlx5/mlx5_flow.c | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/drivers/net/mlx5/mlx5_flow.c b/drivers/net/mlx5/mlx5_flow.c index 1eda836..eaa53e2 100644 --- a/drivers/net/mlx5/mlx5_flow.c +++ b/drivers/net/mlx5/mlx5_flow.c @@ -429,6 +429,7 @@ static const struct mlx5_flow_items mlx5_flow_items[] = { /** Structure to pass to the conversion function. */ struct mlx5_flow_parse { uint32_t inner; /**< Set once VXLAN is encountered. */ + uint8_t allmulti:1; /** Set once allmulti dst MAC is encountered. */ uint32_t create:1; /**< Whether resources should remain after a validate. */ uint32_t drop:1; /**< Target is a drop queue. */ @@ -1165,6 +1166,17 @@ priv_flow_convert(struct priv *priv, } } } + if (parser->allmulti && + parser->layer == HASH_RXQ_ETH) { + for (i = 0; i != hash_rxq_init_n; ++i) { + if (!parser->queue[i].ibv_attr) + continue; + if (parser->queue[i].ibv_attr->num_of_specs != 1) + break; + parser->queue[i].ibv_attr->type = + IBV_FLOW_ATTR_MC_DEFAULT; + } + } return ret; exit_enomem: for (i = 0; i != hash_rxq_init_n; ++i) { @@ -1262,6 +1274,7 @@ mlx5_flow_create_eth(const struct rte_flow_item *item, eth.val.ether_type &= eth.mask.ether_type; } mlx5_flow_create_copy(parser, ð, eth_size); + parser->allmulti = eth.val.dst_mac[0] & 1; return 0; } -- 2.7.4