From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124]) by inbox.dpdk.org (Postfix) with ESMTP id 6D002A0C4F for ; Mon, 9 Aug 2021 10:29:32 +0200 (CEST) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 613584068A; Mon, 9 Aug 2021 10:29:32 +0200 (CEST) Received: from mail-wm1-f46.google.com (mail-wm1-f46.google.com [209.85.128.46]) by mails.dpdk.org (Postfix) with ESMTP id 11D834068A for ; Mon, 9 Aug 2021 10:29:31 +0200 (CEST) Received: by mail-wm1-f46.google.com with SMTP id l34-20020a05600c1d22b02902573c214807so13921256wms.2 for ; Mon, 09 Aug 2021 01:29:31 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:message-id:subject:from:to:cc:date:in-reply-to :references:content-transfer-encoding:user-agent:mime-version; bh=ROCBi6Qp7i8cIn+Jx4Zc6HbspfcAfAL4jgNd6IMjmqw=; b=tsLd9GsAs96qB6eDMC+aNqS5HeHnBcTWJKNB6uQcibSTUYtVmRaqR/EVu4Gwc9bBt6 Xm0iQLf05VGj4YtnFSGUBW3/0gHyT6MowhuhdNK1vBoxySbr4RnS0Jb02EtZ/9fJ44Dd vtowj5Nzn2ZHHtK6UQZQu9Oq/g0WOxlB1Cbts8rJXzQ6gr+y+xiOjz5pxLyVoeJhfSRm B+jZHH3iSBW8viLcE2fNTDC+CWukl7d8deOi3fFiqRMqH3k5n2ujUMd2wL3ZE+Qv8hdW jC9H1w/g0VBMwuspgAL8nvNRd/geS9Id15iUfNXar1QLTwlMnCBqIDE7Z7qwRbPrxqFu fOvg== X-Gm-Message-State: AOAM53148MF/1A1rtulV9a5Jt8qIa1KbpYpCcPua2VM1dvL7FF0M3Fwu /teZm7sEhtl7qivsSAISuGM= X-Google-Smtp-Source: ABdhPJxrDREeeUjn4jYpaBmUqt064bqc/vspn5iB4JhsFghYjZZ+ZDj7YFgJBkGm1Q86yklPU9EZQQ== X-Received: by 2002:a7b:c094:: with SMTP id r20mr4764594wmh.163.1628497770789; Mon, 09 Aug 2021 01:29:30 -0700 (PDT) Received: from localhost ([137.220.125.106]) by smtp.gmail.com with ESMTPSA id r133sm24593095wma.18.2021.08.09.01.29.29 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 09 Aug 2021 01:29:29 -0700 (PDT) Message-ID: From: Luca Boccassi To: Suanming Mou Cc: Matan Azrad , dpdk stable Date: Mon, 09 Aug 2021 09:29:29 +0100 In-Reply-To: <20210805095314.1755018-1-luca.boccassi@gmail.com> References: <20210803122214.1094992-25-luca.boccassi@gmail.com> <20210805095314.1755018-1-luca.boccassi@gmail.com> Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable User-Agent: Evolution 3.30.5-1.2 MIME-Version: 1.0 Subject: Re: [dpdk-stable] patch 'net/mlx5: workaround drop action with old kernel' has been queued to stable release 20.11.3 X-BeenThere: stable@dpdk.org X-Mailman-Version: 2.1.29 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, Please triple-check this one, as the merge conflict was not trivial - there's no __flow_dv_adjust_buf_size() in 20.11. Thank you. On Thu, 2021-08-05 at 10:53 +0100, luca.boccassi@gmail.com wrote: > Hi, >=20 > FYI, your patch has been queued to stable release 20.11.3 >=20 > Note it hasn't been pushed to http://dpdk.org/browse/dpdk-stable yet. > It will be pushed if I get no objections before 08/07/21. So please > shout if anyone has objections. >=20 > Also note that after the patch there's a diff of the upstream commit vs t= he > patch applied to the branch. This will indicate if there was any rebasing > needed to apply to the stable branch. If there were code changes for reba= sing > (ie: not only metadata diffs), please double check that the rebase was > correctly done. >=20 > Queued patches are on a temporary branch at: > https://github.com/bluca/dpdk-stable >=20 > This queued commit can be viewed at: > https://github.com/bluca/dpdk-stable/commit/53193aeeba442cc83bf58aec64497= 78ced80c465 >=20 > Thanks. >=20 > Luca Boccassi >=20 > --- > From 53193aeeba442cc83bf58aec6449778ced80c465 Mon Sep 17 00:00:00 2001 > From: Suanming Mou > Date: Mon, 2 Aug 2021 17:30:24 +0300 > Subject: [PATCH] net/mlx5: workaround drop action with old kernel >=20 > [ upstream commit 45633c460c223a67dd1a7cc084c3eceb5e17687c ] >=20 > Currently, there are two types of drop action implementation > in the PMD. One is the DR (Direct Rules) dummy placeholder drop > action and another is the dedicated dummy queue drop action. > When creates flow on the root table with DR drop action, the > action will be converted to MLX5_IB_ATTR_CREATE_FLOW_FLAGS_DROP > Verbs attribute in rdma-core. >=20 > In some inbox systems, MLX5_IB_ATTR_CREATE_FLOW_FLAGS_DROP Verbs > attribute may not be supported in the kernel driver. Create flow > with drop action on the root table will be failed as it is not > supported. In this case, the dummy queue drop action should be > used instead of DR dummy placeholder drop action. >=20 > This commit adds the DR drop action support detect on the root > table. If MLX5_IB_ATTR_CREATE_FLOW_FLAGS_DROP Verbs is not > supported in the system, a dummy queue will be used as drop > action. >=20 > Fixes: da845ae9d7c1 ("net/mlx5: fix drop action for Direct Rules/Verbs") >=20 > Signed-off-by: Suanming Mou > Acked-by: Matan Azrad > --- > drivers/net/mlx5/linux/mlx5_os.c | 27 ++++++++++++ > drivers/net/mlx5/mlx5.h | 1 + > drivers/net/mlx5/mlx5_flow.h | 1 + > drivers/net/mlx5/mlx5_flow_dv.c | 70 +++++++++++++++++++++++++++++++- > 4 files changed, 98 insertions(+), 1 deletion(-) >=20 > diff --git a/drivers/net/mlx5/linux/mlx5_os.c b/drivers/net/mlx5/linux/ml= x5_os.c > index b191fd740e..e4843f1c6d 100644 > --- a/drivers/net/mlx5/linux/mlx5_os.c > +++ b/drivers/net/mlx5/linux/mlx5_os.c > @@ -651,6 +651,32 @@ mlx5_flow_counter_mode_config(struct rte_eth_dev *de= v __rte_unused) > #endif > } > =20 > +/** > + * DR flow drop action support detect. > + * > + * @param dev > + * Pointer to rte_eth_dev structure. > + * > + */ > +static void > +mlx5_flow_drop_action_config(struct rte_eth_dev *dev __rte_unused) > +{ > +#ifdef HAVE_MLX5DV_DR > + struct mlx5_priv *priv =3D dev->data->dev_private; > + > + if (!priv->config.dv_flow_en || !priv->sh->dr_drop_action) > + return; > + /** > + * DR supports drop action placeholder when it is supported; > + * otherwise, use the queue drop action. > + */ > + if (mlx5_flow_discover_dr_action_support(dev)) > + priv->root_drop_action =3D priv->drop_queue.hrxq->action; > + else > + priv->root_drop_action =3D priv->sh->dr_drop_action; > +#endif > +} > + > /** > * Spawn an Ethernet device from Verbs information. > * > @@ -1587,6 +1613,7 @@ err_secondary: > } > rte_spinlock_init(&priv->shared_act_sl); > mlx5_flow_counter_mode_config(eth_dev); > + mlx5_flow_drop_action_config(eth_dev); > if (priv->config.dv_flow_en) > eth_dev->data->dev_flags |=3D RTE_ETH_DEV_FLOW_OPS_THREAD_SAFE; > return eth_dev; > diff --git a/drivers/net/mlx5/mlx5.h b/drivers/net/mlx5/mlx5.h > index 831838768a..1946110f7c 100644 > --- a/drivers/net/mlx5/mlx5.h > +++ b/drivers/net/mlx5/mlx5.h > @@ -969,6 +969,7 @@ struct mlx5_priv { > unsigned int reta_idx_n; /* RETA index size. */ > struct mlx5_drop drop_queue; /* Flow drop queues. */ > uint32_t flows; /* RTE Flow rules. */ > + void *root_drop_action; /* Pointer to root drop action. */ > uint32_t ctrl_flows; /* Control flow rules. */ > rte_spinlock_t flow_list_lock; > struct mlx5_obj_ops obj_ops; /* HW objects operations. */ > diff --git a/drivers/net/mlx5/mlx5_flow.h b/drivers/net/mlx5/mlx5_flow.h > index 9b72cde5ff..56af30c2bb 100644 > --- a/drivers/net/mlx5/mlx5_flow.h > +++ b/drivers/net/mlx5/mlx5_flow.h > @@ -1429,6 +1429,7 @@ int mlx5_flow_meter_flush(struct rte_eth_dev *dev, > struct rte_mtr_error *error); > int mlx5_flow_dv_discover_counter_offset_support(struct rte_eth_dev *dev= ); > int mlx5_shared_action_flush(struct rte_eth_dev *dev); > +int mlx5_flow_discover_dr_action_support(struct rte_eth_dev *dev); > void mlx5_release_tunnel_hub(struct mlx5_dev_ctx_shared *sh, uint16_t po= rt_id); > int mlx5_alloc_tunnel_hub(struct mlx5_dev_ctx_shared *sh); > =20 > diff --git a/drivers/net/mlx5/mlx5_flow_dv.c b/drivers/net/mlx5/mlx5_flow= _dv.c > index 1b9637ac44..1793683421 100644 > --- a/drivers/net/mlx5/mlx5_flow_dv.c > +++ b/drivers/net/mlx5/mlx5_flow_dv.c > @@ -10840,7 +10840,9 @@ flow_dv_apply(struct rte_eth_dev *dev, struct rte= _flow *flow, > #ifdef HAVE_MLX5DV_DR > /* DR supports drop action placeholder. */ > MLX5_ASSERT(priv->sh->dr_drop_action); > - dv->actions[n++] =3D priv->sh->dr_drop_action; > + dv->actions[n++] =3D dv->group ? > + priv->sh->dr_drop_action : > + priv->root_drop_action; > #else > /* For DV we use the explicit drop queue. */ > MLX5_ASSERT(priv->drop_queue.hrxq); > @@ -12567,6 +12569,72 @@ error: > flow_dv_destroy_policer_rules(dev, fm, attr); > return -1; > } > +/** > + * Check whether the DR drop action is supported on the root table or no= t. > + * > + * Create a simple flow with DR drop action on root table to validate > + * if DR drop action on root table is supported or not. > + * > + * @param[in] dev > + * Pointer to rte_eth_dev structure. > + * > + * @return > + * 0 on success, a negative errno value otherwise and rte_errno is set= . > + */ > +int > +mlx5_flow_discover_dr_action_support(struct rte_eth_dev *dev) > +{ > + struct mlx5_priv *priv =3D dev->data->dev_private; > + struct mlx5_dev_ctx_shared *sh =3D priv->sh; > + struct mlx5_flow_dv_match_params mask =3D { > + .size =3D sizeof(mask.buf), > + }; > + struct mlx5_flow_dv_match_params value =3D { > + .size =3D sizeof(value.buf), > + }; > + struct mlx5dv_flow_matcher_attr dv_attr =3D { > + .type =3D IBV_FLOW_ATTR_NORMAL, > + .priority =3D 0, > + .match_criteria_enable =3D 0, > + .match_mask =3D (void *)&mask, > + }; > + struct mlx5_flow_tbl_resource *tbl =3D NULL; > + void *matcher =3D NULL; > + void *flow =3D NULL; > + int ret =3D -1; > + > + tbl =3D flow_dv_tbl_resource_get(dev, 0, 0, 0, false, NULL, > + 0, 0, NULL); > + if (!tbl) > + goto err; > + dv_attr.match_criteria_enable =3D flow_dv_matcher_enable(mask.buf); > + ret =3D mlx5_flow_os_create_flow_matcher(sh->ctx, &dv_attr, tbl->obj, > + &matcher); > + if (ret) > + goto err; > + ret =3D mlx5_flow_os_create_flow(matcher, (void *)&value, 1, > + &sh->dr_drop_action, &flow); > +err: > + /* > + * If DR drop action is not supported on root table, flow create will > + * be failed with EOPNOTSUPP or EPROTONOSUPPORT. > + */ > + if (!flow) { > + if (matcher && > + (errno =3D=3D EPROTONOSUPPORT || errno =3D=3D EOPNOTSUPP)) > + DRV_LOG(INFO, "DR drop action is not supported in root table."); > + else > + DRV_LOG(ERR, "Unexpected error in DR drop action support detection"); > + ret =3D -1; > + } else { > + claim_zero(mlx5_flow_os_destroy_flow(flow)); > + } > + if (matcher) > + claim_zero(mlx5_flow_os_destroy_flow_matcher(matcher)); > + if (tbl) > + flow_dv_tbl_resource_release(MLX5_SH(dev), tbl); > + return ret; > +} > =20 > /** > * Validate the batch counter support in root table.