On Thu, Apr 26, 2018 at 06:17:46PM +0200, Adrien Mazarguil wrote: > Flow director rules matching traffic properties above layer 2 do not > target a fixed hash Rx queue (HASH_RXQ_ETH), it actually depends on the > highest protocol layer specified by each flow rule. > > mlx5_fdir_filter_delete() makes this wrong assumption and causes a crash > when attempting to destroy flow rules with L3/L4 specifications. > > Fixes: 4c3e9bcdd52e ("net/mlx5: support flow director") > Cc: Nelio Laranjeiro <nelio.laranje...@6wind.com> > Cc: sta...@dpdk.org > > Signed-off-by: Adrien Mazarguil <adrien.mazarg...@6wind.com>
Acked-by: Nelio Laranjeiro <nelio.laranje...@6wind.com> > --- > drivers/net/mlx5/mlx5_flow.c | 10 +++++----- > 1 file changed, 5 insertions(+), 5 deletions(-) > > diff --git a/drivers/net/mlx5/mlx5_flow.c b/drivers/net/mlx5/mlx5_flow.c > index 8f5fcf4d6..05def2b14 100644 > --- a/drivers/net/mlx5/mlx5_flow.c > +++ b/drivers/net/mlx5/mlx5_flow.c > @@ -3409,13 +3409,13 @@ mlx5_fdir_filter_delete(struct rte_eth_dev *dev, > if (parser.drop) { > struct ibv_flow_spec_action_drop *drop; > > - drop = (void *)((uintptr_t)parser.queue[HASH_RXQ_ETH].ibv_attr + > - parser.queue[HASH_RXQ_ETH].offset); > + drop = (void *)((uintptr_t)parser.queue[parser.layer].ibv_attr + > + parser.queue[parser.layer].offset); > *drop = (struct ibv_flow_spec_action_drop){ > .type = IBV_FLOW_SPEC_ACTION_DROP, > .size = sizeof(struct ibv_flow_spec_action_drop), > }; > - parser.queue[HASH_RXQ_ETH].ibv_attr->num_of_specs++; > + parser.queue[parser.layer].ibv_attr->num_of_specs++; > } > TAILQ_FOREACH(flow, &priv->flows, next) { > struct ibv_flow_attr *attr; > @@ -3426,8 +3426,8 @@ mlx5_fdir_filter_delete(struct rte_eth_dev *dev, > void *flow_spec; > unsigned int specs_n; > > - attr = parser.queue[HASH_RXQ_ETH].ibv_attr; > - flow_attr = flow->frxq[HASH_RXQ_ETH].ibv_attr; > + attr = parser.queue[parser.layer].ibv_attr; > + flow_attr = flow->frxq[parser.layer].ibv_attr; > /* Compare first the attributes. */ > if (memcmp(attr, flow_attr, sizeof(struct ibv_flow_attr))) > continue; > -- > 2.11.0 -- Nélio Laranjeiro 6WIND