| From 205eee8951f9ea327020cf45f84c698f5656cbbf Mon Sep 17 00:00:00 2001 |
| From: Sasha Levin <sashal@kernel.org> |
| Date: Thu, 18 Mar 2021 15:51:23 +0200 |
| Subject: RDMA/mlx5: Fix drop packet rule in egress table |
| |
| From: Maor Gottlieb <maorg@nvidia.com> |
| |
| [ Upstream commit c73700806d4e430d182c2be069d230076818a99a ] |
| |
| Initial drop action support missed that drop action can be added to egress |
| flow tables as well. Add the missing support. |
| |
| This requires making sure that dest_type isn't set to PORT which in turn |
| exposes a possibility of passing dst while indicating number of dsts as |
| zero. Explicitly check for number of dsts and pass the appropriate |
| pointer. |
| |
| Fixes: f29de9eee782 ("RDMA/mlx5: Add support for drop action in DV steering") |
| Link: https://lore.kernel.org/r/20210318135123.680759-1-leon@kernel.org |
| Reviewed-by: Mark Bloch <markb@nvidia.com> |
| Signed-off-by: Maor Gottlieb <maorg@nvidia.com> |
| Signed-off-by: Leon Romanovsky <leonro@nvidia.com> |
| Signed-off-by: Jason Gunthorpe <jgg@nvidia.com> |
| Signed-off-by: Sasha Levin <sashal@kernel.org> |
| --- |
| drivers/infiniband/hw/mlx5/fs.c | 9 +++++---- |
| 1 file changed, 5 insertions(+), 4 deletions(-) |
| |
| diff --git a/drivers/infiniband/hw/mlx5/fs.c b/drivers/infiniband/hw/mlx5/fs.c |
| index 25da0b05b4e2..f0af3f1ae039 100644 |
| --- a/drivers/infiniband/hw/mlx5/fs.c |
| +++ b/drivers/infiniband/hw/mlx5/fs.c |
| @@ -1528,8 +1528,8 @@ static struct mlx5_ib_flow_handler *raw_fs_rule_add( |
| dst_num++; |
| } |
| |
| - handler = _create_raw_flow_rule(dev, ft_prio, dst, fs_matcher, |
| - flow_context, flow_act, |
| + handler = _create_raw_flow_rule(dev, ft_prio, dst_num ? dst : NULL, |
| + fs_matcher, flow_context, flow_act, |
| cmd_in, inlen, dst_num); |
| |
| if (IS_ERR(handler)) { |
| @@ -1885,8 +1885,9 @@ static int get_dests(struct uverbs_attr_bundle *attrs, |
| else |
| *dest_id = mqp->raw_packet_qp.rq.tirn; |
| *dest_type = MLX5_FLOW_DESTINATION_TYPE_TIR; |
| - } else if (fs_matcher->ns_type == MLX5_FLOW_NAMESPACE_EGRESS || |
| - fs_matcher->ns_type == MLX5_FLOW_NAMESPACE_RDMA_TX) { |
| + } else if ((fs_matcher->ns_type == MLX5_FLOW_NAMESPACE_EGRESS || |
| + fs_matcher->ns_type == MLX5_FLOW_NAMESPACE_RDMA_TX) && |
| + !(*flags & MLX5_IB_ATTR_CREATE_FLOW_FLAGS_DROP)) { |
| *dest_type = MLX5_FLOW_DESTINATION_TYPE_PORT; |
| } |
| |
| -- |
| 2.30.2 |
| |