Fixes for 5.5
Subsystems (3)
cover Fixes for 5.5
From: Leon Romanovsky <[email protected]>
Hi,
Three unrelated fixes packed together.
Thanks
Maor Gottlieb (1):
IB/mlx5: Fix steering rule of drop and count
Mark Zhang (1):
RDMA/counter: Prevent auto-binding a QP which are not tracked with res
Parav Pandit (1):
IB/mlx4: Follow mirror sequence of device add during device removal
drivers/infiniband/core/counters.c | 3 +++ drivers/infiniband/hw/mlx4/main.c | 9 +++++---- drivers/infiniband/hw/mlx5/main.c | 13 ++++++------- 3 files changed, 14 insertions(+), 11 deletions(-)
--
2.20.1
PATCH 1/3 RDMA/counter: Prevent auto-binding a QP which are not tracked with res
From: Mark Zhang <[email protected]>
Some QPs (e.g. XRC QP) are not tracked in kernel, in this case they have an invalid res and should not be bound to any dynamically-allocated counter in auto mode.
This fixes below call trace:
BUG: kernel NULL pointer dereference, address: 0000000000000390 PGD 80000001a7233067 P4D 80000001a7233067 PUD 1a7215067 PMD 0 Oops: 0000 [#1] SMP PTI CPU: 2 PID: 24822 Comm: ibv_xsrq_pingpo Not tainted 5.4.0-rc5+ #21 Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS 1.10.2-2.fc27 04/01/2014 RIP: 0010:rdma_counter_bind_qp_auto+0x142/0x270 [ib_core] Code: e1 48 85 c0 48 89 c2 0f 84 bc 00 00 00 49 8b 06 48 39 42 48 75 d6 40 3a aa 90 00 00 00 75 cd 49 8b 86 00 01 00 00 48 8b 4a 28 <8b> 80 90 03 00 00 39 81 90 03 00 00 75 b4 85 c0 74 b0 48 8b 04 24 RSP: 0018:ffffc900003f39c0 EFLAGS: 00010246 RAX: 0000000000000000 RBX: 0000000000000001 RCX: 0000000000000000 RDX: ffff88820020ec00 RSI: 0000000000000004 RDI: ffffffffffffffc0 RBP: 0000000000000001 R08: ffff888224149ff0 R09: ffffc900003f3968 R10: ffffffffffffffff R11: ffff8882249c5848 R12: ffffffffffffffff R13: ffff88821d5aca50 R14: ffff8881f7690800 R15: ffff8881ff890000 FS: 00007fe53a3e1740(0000) GS:ffff888237b00000(0000) knlGS:0000000000000000 CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033 CR2: 0000000000000390 CR3: 00000001a7292006 CR4: 00000000003606a0 DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000 DR3: 0000000000000000 DR6: 00000000fffe0ff0 DR7: 0000000000000400 Call Trace: _ib_modify_qp+0x3a4/0x3f0 [ib_core] ? lookup_get_idr_uobject.part.8+0x23/0x40 [ib_uverbs] modify_qp+0x322/0x3e0 [ib_uverbs] ib_uverbs_modify_qp+0x43/0x70 [ib_uverbs] ib_uverbs_handler_UVERBS_METHOD_INVOKE_WRITE+0xb1/0xf0 [ib_uverbs] ib_uverbs_run_method+0x6be/0x760 [ib_uverbs] ? uverbs_disassociate_api+0xd0/0xd0 [ib_uverbs] ib_uverbs_cmd_verbs+0x18d/0x3a0 [ib_uverbs] ? get_acl+0x1a/0x120 ? __alloc_pages_nodemask+0x15d/0x2c0 ib_uverbs_ioctl+0xa7/0x110 [ib_uverbs] do_vfs_ioctl+0xa5/0x610 ksys_ioctl+0x60/0x90 __x64_sys_ioctl+0x16/0x20 do_syscall_64+0x48/0x110 entry_SYSCALL_64_after_hwframe+0x44/0xa9
--- drivers/infiniband/core/counters.c | 3 +++ 1 file changed, 3 insertions(+)
drivers/infiniband/core/counters.c +3 -0
@@ -286,6 +286,9 @@ int rdma_counter_bind_qp_auto(struct ib_qp *qp, u8 port)struct rdma_counter *counter;int ret; +if (!qp->res.valid) +return 0 ; +if (!rdma_is_port_valid (dev, port))return -EINVAL ;
Signature · 1 line
2.20.1
PATCH 2/3 IB/mlx4: Follow mirror sequence of device add during device removal
In reply to Leon RomanovskyFrom: Parav Pandit <[email protected]>
Current code device add sequence is:
ib_register_device()ib_mad_init()init_sriov_init()register_netdev_notifier()
Therefore, the remove sequence should be,
unregister_netdev_notifier()close_sriov()mad_cleanup()ib_unregister_device()
However it is not above.
Hence, make do above remove sequence.
--- drivers/infiniband/hw/mlx4/main.c | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-)
drivers/infiniband/hw/mlx4/main.c +5 -4
@@ -3018,16 +3018,17 @@ static void mlx4_ib_remove(struct mlx4_dev *dev, void *ibdev_ptr) ibdev->ib_active = false;flush_workqueue (wq); -mlx4_ib_close_sriov (ibdev); -mlx4_ib_mad_cleanup (ibdev); -ib_unregister_device (&ibdev->ib_dev); -mlx4_ib_diag_cleanup (ibdev);if (ibdev->iboe.nb.notifier_call) {if (unregister_netdevice_notifier (&ibdev->iboe.nb))pr_warn ("failure unregistering notifier\n" ); ibdev->iboe.nb.notifier_call =NULL ; } +mlx4_ib_close_sriov (ibdev); +mlx4_ib_mad_cleanup (ibdev); +ib_unregister_device (&ibdev->ib_dev); +mlx4_ib_diag_cleanup (ibdev); +mlx4_qp_release_range (dev, ibdev->steer_qpn_base, ibdev->steer_qpn_count);kfree (ibdev->ib_uc_qpns_bitmap);
Signature · 1 line
2.20.1
PATCH 3/3 IB/mlx5: Fix steering rule of drop and count
In reply to Leon RomanovskyFrom: Maor Gottlieb <[email protected]>
There are two flow rule destinations: QP and packet. While users are setting DROP packet rule, the QP should not be set as a destination.
--- drivers/infiniband/hw/mlx5/main.c | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-)
drivers/infiniband/hw/mlx5/main.c +6 -7
@@ -3544,10 +3544,6 @@ static struct mlx5_ib_flow_handler *_create_flow_rule(struct mlx5_ib_dev *dev, }INIT_LIST_HEAD (&handler->list); -if (dst) { -memcpy (&dest_arr[0 ], dst,sizeof (*dst)); - dest_num++; - }for (spec_index =0 ; spec_index < flow_attr->num_of_specs; spec_index++) { err = parse_flow_attr(dev->mdev, spec,
@@ -3560,6 +3556,11 @@ static struct mlx5_ib_flow_handler *_create_flow_rule(struct mlx5_ib_dev *dev, ib_flow += ((union ib_flow_spec *)ib_flow)->size; } +if (dst && !(flow_act.action &MLX5_FLOW_CONTEXT_ACTION_DROP )) { +memcpy (&dest_arr[0 ], dst,sizeof (*dst)); + dest_num++; + } +if (!flow_is_multicast_only (flow_attr))set_underlay_qp (dev, spec, underlay_qpn);
@@ -3600,10 +3601,8 @@ static struct mlx5_ib_flow_handler *_create_flow_rule(struct mlx5_ib_dev *dev, }if (flow_act.action &MLX5_FLOW_CONTEXT_ACTION_DROP ) { -if (!(flow_act.action &MLX5_FLOW_CONTEXT_ACTION_COUNT )) { +if (!dest_num) rule_dst =NULL ; - dest_num =0 ; - } }else {if (is_egress) flow_act.action |=MLX5_FLOW_CONTEXT_ACTION_ALLOW ;
Signature · 1 line
2.20.1
Doug Ledford
AppliedQuoted 18 lines · Leon Romanovsky
From: Leon Romanovsky <[email protected]>
Hi,
Three unrelated fixes packed together.
Thanks
Maor Gottlieb (1):
IB/mlx5: Fix steering rule of drop and countMark Zhang (1):
RDMA/counter: Prevent auto-binding a QP which are not tracked with
resParav Pandit (1):
IB/mlx4: Follow mirror sequence of device add during device removal
Quoted 8 lines
drivers/infiniband/core/counters.c | 3 +++ drivers/infiniband/hw/mlx4/main.c | 9 +++++---- drivers/infiniband/hw/mlx5/main.c | 13 ++++++------- 3 files changed, 14 insertions(+), 11 deletions(-)--
2.20.1
Thanks, applied to for-rc.
Signature · 3 lines
Doug Ledford <[email protected]> GPG KeyID: B826A3330E572FDD Fingerprint = AE6B 1BDA 122B 23B4 265B 1274 B826 A333 0E57 2FDD