From mboxrd@z Thu Jan 1 00:00:00 1970 From: =?iso-8859-1?Q?N=E9lio?= Laranjeiro Subject: Re: [PATCH v2] net/mlx5: fix drop action seg fault Date: Mon, 26 Jun 2017 14:28:46 +0200 Message-ID: <20170626122846.GB3093@autoinstall.dev.6wind.com> References: <4233196997a3d8aba05b16a130ccc87f27f076bf.1498046009.git.shacharbe@mellanox.com> <09f627ea8059ff7fd490ea1120e5c68137fa4944.1498376886.git.shacharbe@mellanox.com> Mime-Version: 1.0 Content-Type: text/plain; charset=iso-8859-1 Content-Transfer-Encoding: 8bit Cc: dev@dpdk.org, Adrien Mazarguil To: Shachar Beiser Return-path: Received: from mail-wm0-f41.google.com (mail-wm0-f41.google.com [74.125.82.41]) by dpdk.org (Postfix) with ESMTP id CCC84374 for ; Mon, 26 Jun 2017 14:28:54 +0200 (CEST) Received: by mail-wm0-f41.google.com with SMTP id i127so6235409wma.0 for ; Mon, 26 Jun 2017 05:28:54 -0700 (PDT) Content-Disposition: inline In-Reply-To: <09f627ea8059ff7fd490ea1120e5c68137fa4944.1498376886.git.shacharbe@mellanox.com> List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org Sender: "dev" On Sun, Jun 25, 2017 at 07:55:01AM +0000, Shachar Beiser wrote: > Missing room in flow allocation to store the drop specification. > Changing flow without storing the change in rte_flow. > Fixes: 88c77dedfbb0 ("net/mlx5: implement drop action in hardware classifier") > > Signed-off-by: Shachar Beiser > --- > drivers/net/mlx5/mlx5_flow.c | 10 +++++++--- > 1 file changed, 7 insertions(+), 3 deletions(-) > > diff --git a/drivers/net/mlx5/mlx5_flow.c b/drivers/net/mlx5/mlx5_flow.c > index 12893c6..86be929 100644 > --- a/drivers/net/mlx5/mlx5_flow.c > +++ b/drivers/net/mlx5/mlx5_flow.c > @@ -580,6 +580,10 @@ struct mlx5_flow_action { > } > if (action->mark && !flow->ibv_attr && !action->drop) > flow->offset += sizeof(struct ibv_exp_flow_spec_action_tag); > +#ifdef HAVE_VERBS_IBV_EXP_FLOW_SPEC_ACTION_DROP > + if (!flow->ibv_attr && action->drop) > + flow->offset += sizeof(struct ibv_exp_flow_spec_action_drop); > +#endif > if (!action->queue && !action->drop) { > rte_flow_error_set(error, ENOTSUP, RTE_FLOW_ERROR_TYPE_HANDLE, > NULL, "no valid action"); > @@ -1011,9 +1015,6 @@ struct mlx5_flow_action { > return NULL; > } > rte_flow->drop = 1; > - rte_flow->ibv_attr = flow->ibv_attr; > - if (!priv->started) > - return rte_flow; > #ifdef HAVE_VERBS_IBV_EXP_FLOW_SPEC_ACTION_DROP > drop = (void *)((uintptr_t)flow->ibv_attr + flow->offset); > *drop = (struct ibv_exp_flow_spec_action_drop){ > @@ -1023,6 +1024,9 @@ struct mlx5_flow_action { > ++flow->ibv_attr->num_of_specs; > flow->offset += sizeof(struct ibv_exp_flow_spec_action_drop); > #endif > + rte_flow->ibv_attr = flow->ibv_attr; > + if (!priv->started) > + return rte_flow; > rte_flow->qp = priv->flow_drop_queue->qp; > rte_flow->ibv_flow = ibv_exp_create_flow(rte_flow->qp, > rte_flow->ibv_attr); > -- > 1.8.3.1 Acked-by: Nelio Laranjeiro -- Nélio Laranjeiro 6WIND