Clean MR key use across mlx5_* modules
Subsystems (9)
cover Clean MR key use across mlx5_* modules
From: Leon Romanovsky <[email protected]>
Hi,
This is cleanup series of mlx5_* MR mkey management.
Thanks
Aharon Landau (7):
RDMA/mlx5: Don't set esc_size in user mr RDMA/mlx5: Remove iova from struct mlx5_core_mkey RDMA/mlx5: Remove size from struct mlx5_core_mkey RDMA/mlx5: Remove pd from struct mlx5_core_mkey RDMA/mlx5: Replace struct mlx5_core_mkey by u32 key RDMA/mlx5: Move struct mlx5_core_mkey to mlx5_ib RDMA/mlx5: Attach ndescs to mlx5_ib_mkey
drivers/infiniband/hw/mlx5/devx.c | 13 +-- drivers/infiniband/hw/mlx5/devx.h | 2 +- drivers/infiniband/hw/mlx5/mlx5_ib.h | 31 ++++--- drivers/infiniband/hw/mlx5/mr.c | 82 +++++++++---------- drivers/infiniband/hw/mlx5/odp.c | 38 +++------ drivers/infiniband/hw/mlx5/wr.c | 10 +-- .../mellanox/mlx5/core/diag/fw_tracer.c | 6 +- .../mellanox/mlx5/core/diag/fw_tracer.h | 2 +- .../mellanox/mlx5/core/diag/rsc_dump.c | 10 +-- drivers/net/ethernet/mellanox/mlx5/core/en.h | 2 +- .../net/ethernet/mellanox/mlx5/core/en/ptp.c | 2 +- .../net/ethernet/mellanox/mlx5/core/en/trap.c | 2 +- .../ethernet/mellanox/mlx5/core/en_common.c | 6 +- .../net/ethernet/mellanox/mlx5/core/en_main.c | 13 ++- .../ethernet/mellanox/mlx5/core/fpga/conn.c | 10 +-- .../ethernet/mellanox/mlx5/core/fpga/core.h | 2 +- drivers/net/ethernet/mellanox/mlx5/core/mr.c | 27 +++--- .../mellanox/mlx5/core/steering/dr_icm_pool.c | 10 +-- .../mellanox/mlx5/core/steering/dr_send.c | 11 ++- .../mellanox/mlx5/core/steering/dr_types.h | 2 +- drivers/vdpa/mlx5/core/mlx5_vdpa.h | 8 +- drivers/vdpa/mlx5/core/mr.c | 8 +- drivers/vdpa/mlx5/core/resources.c | 13 +-- drivers/vdpa/mlx5/net/mlx5_vnet.c | 2 +- include/linux/mlx5/driver.h | 30 ++----- 25 files changed, 147 insertions(+), 195 deletions(-)
Signature · 1 line
2.31.1
PATCH 1/7 RDMA/mlx5: Don't set esc_size in user mr
From: Aharon Landau <[email protected]>
reg_create() is used for user MRs only and should not set desc_size at all. Attempt to set it causes to the following trace:
BUG: unable to handle page fault for address: 0000000800000000 PGD 0 P4D 0 Oops: 0000 [#1] SMP PTI CPU: 5 PID: 890 Comm: ib_write_bw Not tainted 5.15.0-rc4+ #47 Hardware name: QEMU Standard PC (Q35 + ICH9, 2009), BIOS rel-1.13.0-0-gf21b5a4aeb02-prebuilt.qemu.org 04/01/2014 RIP: 0010:mlx5_ib_dereg_mr+0x14/0x3b0 [mlx5_ib] Code: 48 63 cd 4c 89 f7 48 89 0c 24 e8 37 30 03 e1 48 8b 0c 24 eb a0 90 0f 1f 44 00 00 41 56 41 55 41 54 55 53 48 89 fb 48 83 ec 30 <48> 8b 2f 65 48 8b 04 25 28 00 00 00 48 89 44 24 28 31 c0 8b 87 c8 RSP: 0018:ffff88811afa3a60 EFLAGS: 00010286 RAX: 000000000000001c RBX: 0000000800000000 RCX: 0000000000000000 RDX: 0000000000000000 RSI: 0000000000000000 RDI: 0000000800000000 RBP: 0000000800000000 R08: 0000000000000000 R09: c0000000fffff7ff R10: ffff88811afa38f8 R11: ffff88811afa38f0 R12: ffffffffa02c7ac0 R13: 0000000000000000 R14: ffff88811afa3cd8 R15: ffff88810772fa00 FS: 00007f47b9080740(0000) GS:ffff88852cd40000(0000) knlGS:0000000000000000 CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033 CR2: 0000000800000000 CR3: 000000010761e003 CR4: 0000000000370ea0 DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000 DR3: 0000000000000000 DR6: 00000000fffe0ff0 DR7: 0000000000000400 Call Trace: mlx5_ib_free_odp_mr+0x95/0xc0 [mlx5_ib] mlx5_ib_dereg_mr+0x128/0x3b0 [mlx5_ib] ib_dereg_mr_user+0x45/0xb0 [ib_core] ? xas_load+0x8/0x80 destroy_hw_idr_uobject+0x1a/0x50 [ib_uverbs] uverbs_destroy_uobject+0x2f/0x150 [ib_uverbs] uobj_destroy+0x3c/0x70 [ib_uverbs] ib_uverbs_cmd_verbs+0x467/0xb00 [ib_uverbs] ? uverbs_finalize_object+0x60/0x60 [ib_uverbs] ? ttwu_queue_wakelist+0xa9/0xe0 ? pty_write+0x85/0x90 ? file_tty_write.isra.33+0x214/0x330 ? process_echoes+0x60/0x60 ib_uverbs_ioctl+0xa7/0x110 [ib_uverbs] __x64_sys_ioctl+0x10d/0x8e0 ? vfs_write+0x17f/0x260 do_syscall_64+0x3c/0x80 entry_SYSCALL_64_after_hwframe+0x44/0xae
--- drivers/infiniband/hw/mlx5/mr.c | 1 - 1 file changed, 1 deletion(-)
drivers/infiniband/hw/mlx5/mr.c +0 -1
@@ -1335,7 +1335,6 @@ static struct mlx5_ib_mr *reg_create(struct ib_pd *pd, struct ib_umem *umem, goto err_2; } mr->mmkey.type =MLX5_MKEY_MR ; - mr->desc_size =sizeof (struct mlx5_mtt ); mr->umem = umem;set_mr_fields (dev, mr, umem->length, access_flags);kvfree (in);
Signature · 1 line
2.31.1
Jason Gunthorpe
maintainerRe: [PATCH mlx5-next 1/7] RDMA/mlx5: Don't set esc_size in user mr
Quoted 43 lines · Leon Romanovsky
From: Aharon Landau <[email protected]>
reg_create()is used for user MRs only and should not setdesc_sizeat all. Attempt to set it causes to the following trace:BUG: unable to handle page fault for address: 0000000800000000 PGD 0 P4D 0 Oops: 0000 [#1] SMP PTI CPU: 5 PID: 890 Comm: ib_write_bw Not tainted 5.15.0-rc4+ #47 Hardware name: QEMU Standard PC (Q35 + ICH9, 2009), BIOS rel-1.13.0-0-gf21b5a4aeb02-prebuilt.qemu.org 04/01/2014 RIP: 0010:mlx5_ib_dereg_mr+0x14/0x3b0 [mlx5_ib] Code: 48 63 cd 4c 89 f7 48 89 0c 24 e8 37 30 03 e1 48 8b 0c 24 eb a0 90 0f 1f 44 00 00 41 56 41 55 41 54 55 53 48 89 fb 48 83 ec 30 <48> 8b 2f 65 48 8b 04 25 28 00 00 00 48 89 44 24 28 31 c0 8b 87 c8 RSP: 0018:ffff88811afa3a60 EFLAGS: 00010286 RAX: 000000000000001c RBX: 0000000800000000 RCX: 0000000000000000 RDX: 0000000000000000 RSI: 0000000000000000 RDI: 0000000800000000 RBP: 0000000800000000 R08: 0000000000000000 R09: c0000000fffff7ff R10: ffff88811afa38f8 R11: ffff88811afa38f0 R12: ffffffffa02c7ac0 R13: 0000000000000000 R14: ffff88811afa3cd8 R15: ffff88810772fa00 FS: 00007f47b9080740(0000) GS:ffff88852cd40000(0000) knlGS:0000000000000000 CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033 CR2: 0000000800000000 CR3: 000000010761e003 CR4: 0000000000370ea0 DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000 DR3: 0000000000000000 DR6: 00000000fffe0ff0 DR7: 0000000000000400 Call Trace: mlx5_ib_free_odp_mr+0x95/0xc0 [mlx5_ib] mlx5_ib_dereg_mr+0x128/0x3b0 [mlx5_ib] ib_dereg_mr_user+0x45/0xb0 [ib_core] ? xas_load+0x8/0x80 destroy_hw_idr_uobject+0x1a/0x50 [ib_uverbs] uverbs_destroy_uobject+0x2f/0x150 [ib_uverbs] uobj_destroy+0x3c/0x70 [ib_uverbs] ib_uverbs_cmd_verbs+0x467/0xb00 [ib_uverbs] ? uverbs_finalize_object+0x60/0x60 [ib_uverbs] ? ttwu_queue_wakelist+0xa9/0xe0 ? pty_write+0x85/0x90 ? file_tty_write.isra.33+0x214/0x330 ? process_echoes+0x60/0x60 ib_uverbs_ioctl+0xa7/0x110 [ib_uverbs] __x64_sys_ioctl+0x10d/0x8e0 ? vfs_write+0x17f/0x260 do_syscall_64+0x3c/0x80 entry_SYSCALL_64_after_hwframe+0x44/0xae
Quoted 1 line
Fixes a639e66703ee ("RDMA/mlx5: Zero out ODP related items in the mlx5_ib_mr")
Can you explain why this is crashing?
reg_create isn't used on the ODP implicit children path.
Jason
Re: [PATCH mlx5-next 1/7] RDMA/mlx5: Don't set esc_size in user mr
Quoted 44 lines · Jason Gunthorpe
Quoted 43 lines · Leon Romanovsky
From: Aharon Landau <[email protected]>
reg_create()is used for user MRs only and should not setdesc_sizeat all. Attempt to set it causes to the following trace:BUG: unable to handle page fault for address: 0000000800000000 PGD 0 P4D 0 Oops: 0000 [#1] SMP PTI CPU: 5 PID: 890 Comm: ib_write_bw Not tainted 5.15.0-rc4+ #47 Hardware name: QEMU Standard PC (Q35 + ICH9, 2009), BIOS rel-1.13.0-0-gf21b5a4aeb02-prebuilt.qemu.org 04/01/2014 RIP: 0010:mlx5_ib_dereg_mr+0x14/0x3b0 [mlx5_ib] Code: 48 63 cd 4c 89 f7 48 89 0c 24 e8 37 30 03 e1 48 8b 0c 24 eb a0 90 0f 1f 44 00 00 41 56 41 55 41 54 55 53 48 89 fb 48 83 ec 30 <48> 8b 2f 65 48 8b 04 25 28 00 00 00 48 89 44 24 28 31 c0 8b 87 c8 RSP: 0018:ffff88811afa3a60 EFLAGS: 00010286 RAX: 000000000000001c RBX: 0000000800000000 RCX: 0000000000000000 RDX: 0000000000000000 RSI: 0000000000000000 RDI: 0000000800000000 RBP: 0000000800000000 R08: 0000000000000000 R09: c0000000fffff7ff R10: ffff88811afa38f8 R11: ffff88811afa38f0 R12: ffffffffa02c7ac0 R13: 0000000000000000 R14: ffff88811afa3cd8 R15: ffff88810772fa00 FS: 00007f47b9080740(0000) GS:ffff88852cd40000(0000) knlGS:0000000000000000 CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033 CR2: 0000000800000000 CR3: 000000010761e003 CR4: 0000000000370ea0 DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000 DR3: 0000000000000000 DR6: 00000000fffe0ff0 DR7: 0000000000000400 Call Trace: mlx5_ib_free_odp_mr+0x95/0xc0 [mlx5_ib] mlx5_ib_dereg_mr+0x128/0x3b0 [mlx5_ib] ib_dereg_mr_user+0x45/0xb0 [ib_core] ? xas_load+0x8/0x80 destroy_hw_idr_uobject+0x1a/0x50 [ib_uverbs] uverbs_destroy_uobject+0x2f/0x150 [ib_uverbs] uobj_destroy+0x3c/0x70 [ib_uverbs] ib_uverbs_cmd_verbs+0x467/0xb00 [ib_uverbs] ? uverbs_finalize_object+0x60/0x60 [ib_uverbs] ? ttwu_queue_wakelist+0xa9/0xe0 ? pty_write+0x85/0x90 ? file_tty_write.isra.33+0x214/0x330 ? process_echoes+0x60/0x60 ib_uverbs_ioctl+0xa7/0x110 [ib_uverbs] __x64_sys_ioctl+0x10d/0x8e0 ? vfs_write+0x17f/0x260 do_syscall_64+0x3c/0x80 entry_SYSCALL_64_after_hwframe+0x44/0xae
Quoted 6 lines
Quoted 1 line
Fixes a639e66703ee ("RDMA/mlx5: Zero out ODP related items in the mlx5_ib_mr")Can you explain why this is crashing?
reg_createisn't used on the ODP implicit children path.Jason
It is not implicit ODP flow, therefore, mr->implicit_children shouldn't be set.
desc_size shares the same union with implicit_children, and setting it leads to a wrong iteration.
Aharon
Jason Gunthorpe
maintainerRe: [PATCH mlx5-next 1/7] RDMA/mlx5: Don't set esc_size in user mr
Quoted 46 lines · Aharon Landau
Quoted 44 lines · Jason Gunthorpe
Quoted 43 lines · Leon Romanovsky
From: Aharon Landau <[email protected]>
reg_create()is used for user MRs only and should not setdesc_sizeat all. Attempt to set it causes to the following trace:BUG: unable to handle page fault for address: 0000000800000000 PGD 0 P4D 0 Oops: 0000 [#1] SMP PTI CPU: 5 PID: 890 Comm: ib_write_bw Not tainted 5.15.0-rc4+ #47 Hardware name: QEMU Standard PC (Q35 + ICH9, 2009), BIOS rel-1.13.0-0-gf21b5a4aeb02-prebuilt.qemu.org 04/01/2014 RIP: 0010:mlx5_ib_dereg_mr+0x14/0x3b0 [mlx5_ib] Code: 48 63 cd 4c 89 f7 48 89 0c 24 e8 37 30 03 e1 48 8b 0c 24 eb a0 90 0f 1f 44 00 00 41 56 41 55 41 54 55 53 48 89 fb 48 83 ec 30 <48> 8b 2f 65 48 8b 04 25 28 00 00 00 48 89 44 24 28 31 c0 8b 87 c8 RSP: 0018:ffff88811afa3a60 EFLAGS: 00010286 RAX: 000000000000001c RBX: 0000000800000000 RCX: 0000000000000000 RDX: 0000000000000000 RSI: 0000000000000000 RDI: 0000000800000000 RBP: 0000000800000000 R08: 0000000000000000 R09: c0000000fffff7ff R10: ffff88811afa38f8 R11: ffff88811afa38f0 R12: ffffffffa02c7ac0 R13: 0000000000000000 R14: ffff88811afa3cd8 R15: ffff88810772fa00 FS: 00007f47b9080740(0000) GS:ffff88852cd40000(0000) knlGS:0000000000000000 CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033 CR2: 0000000800000000 CR3: 000000010761e003 CR4: 0000000000370ea0 DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000 DR3: 0000000000000000 DR6: 00000000fffe0ff0 DR7: 0000000000000400 Call Trace: mlx5_ib_free_odp_mr+0x95/0xc0 [mlx5_ib] mlx5_ib_dereg_mr+0x128/0x3b0 [mlx5_ib] ib_dereg_mr_user+0x45/0xb0 [ib_core] ? xas_load+0x8/0x80 destroy_hw_idr_uobject+0x1a/0x50 [ib_uverbs] uverbs_destroy_uobject+0x2f/0x150 [ib_uverbs] uobj_destroy+0x3c/0x70 [ib_uverbs] ib_uverbs_cmd_verbs+0x467/0xb00 [ib_uverbs] ? uverbs_finalize_object+0x60/0x60 [ib_uverbs] ? ttwu_queue_wakelist+0xa9/0xe0 ? pty_write+0x85/0x90 ? file_tty_write.isra.33+0x214/0x330 ? process_echoes+0x60/0x60 ib_uverbs_ioctl+0xa7/0x110 [ib_uverbs] __x64_sys_ioctl+0x10d/0x8e0 ? vfs_write+0x17f/0x260 do_syscall_64+0x3c/0x80 entry_SYSCALL_64_after_hwframe+0x44/0xae
Quoted 8 lines
Quoted 6 lines
Quoted 1 line
Fixes a639e66703ee ("RDMA/mlx5: Zero out ODP related items in the mlx5_ib_mr")Can you explain why this is crashing?
reg_createisn't used on the ODP implicit children path.Jason
It is not implicit ODP flow, therefore,
mr->implicit_childrenshouldn't be set.
It should always be initialized. That seems to be the bug here, add the missing xa_init as well as delete the extra desc_size set:
drivers/infiniband/hw/mlx5/mr.c +1 -0
@@ -1525,6 +1525,7 @@ static struct ib_mr *create_user_odp_mr(struct ib_pd *pd, u64 start, u64 length,ib_umem_release (&odp->umem);return ERR_CAST (mr); } +xa_init (&mr->implicit_children); odp->private = mr; err =mlx5r_store_odp_mkey (dev, &mr->mmkey);
Jason
Re: [PATCH mlx5-next 1/7] RDMA/mlx5: Don't set esc_size in user mr
Quoted 50 lines · Jason Gunthorpe
Quoted 49 lines · Aharon Landau
Quoted 47 lines · Jason Gunthorpe
Quoted 43 lines · Leon Romanovsky
From: Aharon Landau <[email protected]>
reg_create()is used for user MRs only and should not setdesc_sizeat all. Attempt to set it causes to the following trace:BUG: unable to handle page fault for address: 0000000800000000 PGD 0 P4D 0 Oops: 0000 [#1] SMP PTI CPU: 5 PID: 890 Comm: ib_write_bw Not tainted 5.15.0-rc4+ #47 Hardware name: QEMU Standard PC (Q35 + ICH9, 2009), BIOS rel-1.13.0-0-gf21b5a4aeb02-prebuilt.qemu.org 04/01/2014 RIP: 0010:mlx5_ib_dereg_mr+0x14/0x3b0 [mlx5_ib] Code: 48 63 cd 4c 89 f7 48 89 0c 24 e8 37 30 03 e1 48 8b 0c 24 eb a0 90 0f 1f 44 00 00 41 56 41 55 41 54 55 53 48 89 fb 48 83 ec 30 <48> 8b 2f 65 48 8b 04 25 28 00 00 00 48 89 44 24 28 31 c0 8b 87 c8 RSP: 0018:ffff88811afa3a60 EFLAGS: 00010286 RAX: 000000000000001c RBX: 0000000800000000 RCX: 0000000000000000 RDX: 0000000000000000 RSI: 0000000000000000 RDI: 0000000800000000 RBP: 0000000800000000 R08: 0000000000000000 R09: c0000000fffff7ff R10: ffff88811afa38f8 R11: ffff88811afa38f0 R12: ffffffffa02c7ac0 R13: 0000000000000000 R14: ffff88811afa3cd8 R15: ffff88810772fa00 FS: 00007f47b9080740(0000) GS:ffff88852cd40000(0000) knlGS:0000000000000000 CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033 CR2: 0000000800000000 CR3: 000000010761e003 CR4: 0000000000370ea0 DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000 DR3: 0000000000000000 DR6: 00000000fffe0ff0 DR7: 0000000000000400 Call Trace: mlx5_ib_free_odp_mr+0x95/0xc0 [mlx5_ib] mlx5_ib_dereg_mr+0x128/0x3b0 [mlx5_ib] ib_dereg_mr_user+0x45/0xb0 [ib_core] ? xas_load+0x8/0x80 destroy_hw_idr_uobject+0x1a/0x50 [ib_uverbs] uverbs_destroy_uobject+0x2f/0x150 [ib_uverbs] uobj_destroy+0x3c/0x70 [ib_uverbs] ib_uverbs_cmd_verbs+0x467/0xb00 [ib_uverbs] ? uverbs_finalize_object+0x60/0x60 [ib_uverbs] ? ttwu_queue_wakelist+0xa9/0xe0 ? pty_write+0x85/0x90 ? file_tty_write.isra.33+0x214/0x330 ? process_echoes+0x60/0x60 ib_uverbs_ioctl+0xa7/0x110 [ib_uverbs] __x64_sys_ioctl+0x10d/0x8e0 ? vfs_write+0x17f/0x260 do_syscall_64+0x3c/0x80 entry_SYSCALL_64_after_hwframe+0x44/0xaeQuoted 1 line
Fixes a639e66703ee ("RDMA/mlx5: Zero out ODP related items in the mlx5_ib_mr")Can you explain why this is crashing?
Quoted 8 lines
Quoted 5 lines
Quoted 3 lines
reg_createisn't used on the ODP implicit children path.Jason
It is not implicit ODP flow, therefore,
mr->implicit_childrenshouldn't be set.It should always be initialized. That seems to be the bug here, add the missing
xa_initas well as delete the extradesc_sizeset:
I would expect such change in mlx5_ib_init_odp_mr().
Quoted 14 lines
drivers/infiniband/hw/mlx5/mr.c +1
-0@@ -1525,6 +1525,7 @@ static struct ib_mr *create_user_odp_mr(struct ib_pd *pd, u64 start, u64 length,ib_umem_release (&odp->umem);return ERR_CAST (mr); } +xa_init (&mr->implicit_children); odp->private = mr; err =mlx5r_store_odp_mkey (dev, &mr->mmkey);
Quoted 1 line
Jason
_______________________________________________
Virtualization mailing list
[email protected]
https://lists.linuxfoundation.org/mailman/listinfo/virtualization
Jason Gunthorpe
maintainerRe: [PATCH mlx5-next 1/7] RDMA/mlx5: Don't set esc_size in user mr
Quoted 53 lines · Leon Romanovsky
Quoted 52 lines · Jason Gunthorpe
Quoted 51 lines · Aharon Landau
Quoted 49 lines · Jason Gunthorpe
Quoted 43 lines · Leon Romanovsky
From: Aharon Landau <[email protected]>
reg_create()is used for user MRs only and should not setdesc_sizeat all. Attempt to set it causes to the following trace:BUG: unable to handle page fault for address: 0000000800000000 PGD 0 P4D 0 Oops: 0000 [#1] SMP PTI CPU: 5 PID: 890 Comm: ib_write_bw Not tainted 5.15.0-rc4+ #47 Hardware name: QEMU Standard PC (Q35 + ICH9, 2009), BIOS rel-1.13.0-0-gf21b5a4aeb02-prebuilt.qemu.org 04/01/2014 RIP: 0010:mlx5_ib_dereg_mr+0x14/0x3b0 [mlx5_ib] Code: 48 63 cd 4c 89 f7 48 89 0c 24 e8 37 30 03 e1 48 8b 0c 24 eb a0 90 0f 1f 44 00 00 41 56 41 55 41 54 55 53 48 89 fb 48 83 ec 30 <48> 8b 2f 65 48 8b 04 25 28 00 00 00 48 89 44 24 28 31 c0 8b 87 c8 RSP: 0018:ffff88811afa3a60 EFLAGS: 00010286 RAX: 000000000000001c RBX: 0000000800000000 RCX: 0000000000000000 RDX: 0000000000000000 RSI: 0000000000000000 RDI: 0000000800000000 RBP: 0000000800000000 R08: 0000000000000000 R09: c0000000fffff7ff R10: ffff88811afa38f8 R11: ffff88811afa38f0 R12: ffffffffa02c7ac0 R13: 0000000000000000 R14: ffff88811afa3cd8 R15: ffff88810772fa00 FS: 00007f47b9080740(0000) GS:ffff88852cd40000(0000) knlGS:0000000000000000 CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033 CR2: 0000000800000000 CR3: 000000010761e003 CR4: 0000000000370ea0 DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000 DR3: 0000000000000000 DR6: 00000000fffe0ff0 DR7: 0000000000000400 Call Trace: mlx5_ib_free_odp_mr+0x95/0xc0 [mlx5_ib] mlx5_ib_dereg_mr+0x128/0x3b0 [mlx5_ib] ib_dereg_mr_user+0x45/0xb0 [ib_core] ? xas_load+0x8/0x80 destroy_hw_idr_uobject+0x1a/0x50 [ib_uverbs] uverbs_destroy_uobject+0x2f/0x150 [ib_uverbs] uobj_destroy+0x3c/0x70 [ib_uverbs] ib_uverbs_cmd_verbs+0x467/0xb00 [ib_uverbs] ? uverbs_finalize_object+0x60/0x60 [ib_uverbs] ? ttwu_queue_wakelist+0xa9/0xe0 ? pty_write+0x85/0x90 ? file_tty_write.isra.33+0x214/0x330 ? process_echoes+0x60/0x60 ib_uverbs_ioctl+0xa7/0x110 [ib_uverbs] __x64_sys_ioctl+0x10d/0x8e0 ? vfs_write+0x17f/0x260 do_syscall_64+0x3c/0x80 entry_SYSCALL_64_after_hwframe+0x44/0xaeQuoted 1 line
Fixes a639e66703ee ("RDMA/mlx5: Zero out ODP related items in the mlx5_ib_mr")Can you explain why this is crashing?
reg_createisn't used on the ODP implicit children path.
Quoted 8 lines
Quoted 6 lines
Quoted 3 lines
Quoted 1 line
Jason
It is not implicit ODP flow, therefore,
mr->implicit_childrenshouldn't be set.It should always be initialized. That seems to be the bug here, add the missing
xa_initas well as delete the extradesc_sizeset:I would expect such change in
mlx5_ib_init_odp_mr().
It is too late
Jason
PATCH 2/7 RDMA/mlx5: Remove iova from struct mlx5_core_mkey
In reply to Leon RomanovskyFrom: Aharon Landau <[email protected]>
iova is already stored in ibmr->iova, no need to store it here.
--- drivers/infiniband/hw/mlx5/devx.c | 1 - drivers/infiniband/hw/mlx5/mr.c | 16 ++++++++-------- drivers/infiniband/hw/mlx5/odp.c | 8 ++++---- drivers/net/ethernet/mellanox/mlx5/core/mr.c | 1 - drivers/vdpa/mlx5/core/resources.c | 1 - include/linux/mlx5/driver.h | 1 - 6 files changed, 12 insertions(+), 16 deletions(-)
drivers/infiniband/hw/mlx5/devx.c +0 -1
@@ -1303,7 +1303,6 @@ static int devx_handle_mkey_indirect(struct devx_obj *obj, mkey->key =mlx5_idx_to_mkey (MLX5_GET (create_mkey_out, out, mkey_index)) | key; mkey->type =MLX5_MKEY_INDIRECT_DEVX ; - mkey->iova =MLX5_GET64 (mkc, mkc, start_addr); mkey->size =MLX5_GET64 (mkc, mkc, len); mkey->pd =MLX5_GET (mkc, mkc, pd); devx_mr->ndescs =MLX5_GET (mkc, mkc, translations_octword_size);
drivers/infiniband/hw/mlx5/mr.c +8 -8
@@ -904,12 +904,13 @@ static struct mlx5_cache_ent *mr_cache_ent_from_order(struct mlx5_ib_dev *dev, }static void set_mr_fields (struct mlx5_ib_dev *dev,struct mlx5_ib_mr *mr, -u64 length,int access_flags) +u64 length,int access_flags,u64 iova) { mr->ibmr.lkey = mr->mmkey.key; mr->ibmr.rkey = mr->mmkey.key; mr->ibmr.length = length; mr->ibmr.device = &dev->ib_dev; + mr->ibmr.iova = iova; mr->access_flags = access_flags; }
@@ -967,11 +968,10 @@ static struct mlx5_ib_mr *alloc_cacheable_mr(struct ib_pd *pd, mr->ibmr.pd = pd; mr->umem = umem; - mr->mmkey.iova = iova; mr->mmkey.size = umem->length; mr->mmkey.pd =to_mpd (pd)->pdn; mr->page_shift =order_base_2 (page_size); -set_mr_fields (dev, mr, umem->length, access_flags); +set_mr_fields (dev, mr, umem->length, access_flags, iova);return mr; }
@@ -1081,7 +1081,7 @@ static void *mlx5_ib_create_xlt_wr(struct mlx5_ib_mr *mr, wr->pd = mr->ibmr.pd; wr->mkey = mr->mmkey.key; wr->length = mr->mmkey.size; - wr->virt_addr = mr->mmkey.iova; + wr->virt_addr = mr->ibmr.iova; wr->access_flags = mr->access_flags; wr->page_shift = mr->page_shift; wr->xlt_size = sg->length;
@@ -1336,7 +1336,7 @@ static struct mlx5_ib_mr *reg_create(struct ib_pd *pd, struct ib_umem *umem, } mr->mmkey.type =MLX5_MKEY_MR ; mr->umem = umem; -set_mr_fields (dev, mr, umem->length, access_flags); +set_mr_fields (dev, mr, umem->length, access_flags, iova);kvfree (in);mlx5_ib_dbg (dev,"mkey = 0x%x\n" , mr->mmkey.key);
@@ -1383,7 +1383,7 @@ static struct ib_mr *mlx5_ib_get_dm_mr(struct ib_pd *pd, u64 start_addr,kfree (in); -set_mr_fields (dev, mr, length, acc); +set_mr_fields (dev, mr, length, acc, start_addr);return &mr->ibmr;
@@ -1767,7 +1767,7 @@ static int umr_rereg_pas(struct mlx5_ib_mr *mr, struct ib_pd *pd, } mr->ibmr.length = new_umem->length; - mr->mmkey.iova = iova; + mr->ibmr.iova = iova; mr->mmkey.size = new_umem->length; mr->page_shift =order_base_2 (page_size); mr->umem = new_umem;
@@ -1847,7 +1847,7 @@ struct ib_mr *mlx5_ib_rereg_user_mr(struct ib_mr *ib_mr, int flags, u64 start, mr->umem =NULL ;atomic_sub (ib_umem_num_pages (umem), &dev->mdev->priv.reg_pages); -return create_real_mr (new_pd, umem, mr->mmkey.iova, +return create_real_mr (new_pd, umem, mr->ibmr.iova, new_access_flags); }
drivers/infiniband/hw/mlx5/odp.c +4 -4
@@ -430,7 +430,7 @@ static struct mlx5_ib_mr *implicit_get_child_mr(struct mlx5_ib_mr *imr, mr->umem = &odp->umem; mr->ibmr.lkey = mr->mmkey.key; mr->ibmr.rkey = mr->mmkey.key; - mr->mmkey.iova = idx *MLX5_IMR_MTT_SIZE ; + mr->ibmr.iova = idx *MLX5_IMR_MTT_SIZE ; mr->parent = imr; odp->private = mr;
@@ -500,7 +500,7 @@ struct mlx5_ib_mr *mlx5_ib_alloc_implicit_mr(struct mlx5_ib_pd *pd, } imr->ibmr.pd = &pd->ibpd; - imr->mmkey.iova =0 ; + imr->ibmr.iova =0 ; imr->umem = &umem_odp->umem; imr->ibmr.lkey = imr->mmkey.key; imr->ibmr.rkey = imr->mmkey.key;
@@ -738,7 +738,7 @@ static int pagefault_mr(struct mlx5_ib_mr *mr, u64 io_virt, size_t bcnt, {struct ib_umem_odp *odp =to_ib_umem_odp (mr->umem); -if (unlikely (io_virt < mr->mmkey.iova)) +if (unlikely (io_virt < mr->ibmr.iova))return -EFAULT ;if (mr->umem->is_dmabuf)
@@ -747,7 +747,7 @@ static int pagefault_mr(struct mlx5_ib_mr *mr, u64 io_virt, size_t bcnt,if (!odp->is_implicit_odp) {u64 user_va; -if (check_add_overflow (io_virt - mr->mmkey.iova, +if (check_add_overflow (io_virt - mr->ibmr.iova, (u64 )odp->umem.address, &user_va))return -EFAULT ; if (unlikely(user_va >= ib_umem_end(odp) ||
drivers/net/ethernet/mellanox/mlx5/core/mr.c +0 -1
@@ -52,7 +52,6 @@ int mlx5_core_create_mkey(struct mlx5_core_dev *dev, mkc =MLX5_ADDR_OF (create_mkey_in, in, memory_key_mkey_entry); mkey_index =MLX5_GET (create_mkey_out, lout, mkey_index); - mkey->iova =MLX5_GET64 (mkc, mkc, start_addr); mkey->size =MLX5_GET64 (mkc, mkc, len); mkey->key = (u32 )mlx5_mkey_variant (mkey->key) |mlx5_idx_to_mkey (mkey_index); mkey->pd =MLX5_GET (mkc, mkc, pd);
drivers/vdpa/mlx5/core/resources.c +0 -1
@@ -215,7 +215,6 @@ int mlx5_vdpa_create_mkey(struct mlx5_vdpa_dev *mvdev, struct mlx5_core_mkey *mk mkc =MLX5_ADDR_OF (create_mkey_in, in, memory_key_mkey_entry); mkey_index =MLX5_GET (create_mkey_out, lout, mkey_index); - mkey->iova =MLX5_GET64 (mkc, mkc, start_addr); mkey->size =MLX5_GET64 (mkc, mkc, len); mkey->key |=mlx5_idx_to_mkey (mkey_index); mkey->pd =MLX5_GET (mkc, mkc, pd);
include/linux/mlx5/driver.h +0 -1
@@ -364,7 +364,6 @@ enum { };struct mlx5_core_mkey { -u64 iova;u64 size;u32 key;u32 pd;
Signature · 1 line
2.31.1
PATCH 3/7 RDMA/mlx5: Remove size from struct mlx5_core_mkey
In reply to Leon RomanovskyFrom: Aharon Landau <[email protected]>
mkey->size is already stored in ibmr->length, no need to store it here.
--- drivers/infiniband/hw/mlx5/devx.c | 1 - drivers/infiniband/hw/mlx5/mr.c | 5 ++--- drivers/net/ethernet/mellanox/mlx5/core/mr.c | 1 - drivers/vdpa/mlx5/core/resources.c | 1 - include/linux/mlx5/driver.h | 1 - 5 files changed, 2 insertions(+), 7 deletions(-)
drivers/infiniband/hw/mlx5/devx.c +0 -1
@@ -1303,7 +1303,6 @@ static int devx_handle_mkey_indirect(struct devx_obj *obj, mkey->key =mlx5_idx_to_mkey (MLX5_GET (create_mkey_out, out, mkey_index)) | key; mkey->type =MLX5_MKEY_INDIRECT_DEVX ; - mkey->size =MLX5_GET64 (mkc, mkc, len); mkey->pd =MLX5_GET (mkc, mkc, pd); devx_mr->ndescs =MLX5_GET (mkc, mkc, translations_octword_size);init_waitqueue_head (&mkey->wait);
drivers/infiniband/hw/mlx5/mr.c +2 -3
@@ -968,7 +968,6 @@ static struct mlx5_ib_mr *alloc_cacheable_mr(struct ib_pd *pd, mr->ibmr.pd = pd; mr->umem = umem; - mr->mmkey.size = umem->length; mr->mmkey.pd =to_mpd (pd)->pdn; mr->page_shift =order_base_2 (page_size);set_mr_fields (dev, mr, umem->length, access_flags, iova);
@@ -1080,7 +1079,7 @@ static void *mlx5_ib_create_xlt_wr(struct mlx5_ib_mr *mr, wr->wr.opcode =MLX5_IB_WR_UMR ; wr->pd = mr->ibmr.pd; wr->mkey = mr->mmkey.key; - wr->length = mr->mmkey.size; + wr->length = mr->ibmr.length; wr->virt_addr = mr->ibmr.iova; wr->access_flags = mr->access_flags; wr->page_shift = mr->page_shift;
@@ -1768,7 +1767,7 @@ static int umr_rereg_pas(struct mlx5_ib_mr *mr, struct ib_pd *pd, mr->ibmr.length = new_umem->length; mr->ibmr.iova = iova; - mr->mmkey.size = new_umem->length; + mr->ibmr.length = new_umem->length; mr->page_shift =order_base_2 (page_size); mr->umem = new_umem; err =mlx5_ib_update_mr_pas (mr, upd_flags);
drivers/net/ethernet/mellanox/mlx5/core/mr.c +0 -1
@@ -52,7 +52,6 @@ int mlx5_core_create_mkey(struct mlx5_core_dev *dev, mkc =MLX5_ADDR_OF (create_mkey_in, in, memory_key_mkey_entry); mkey_index =MLX5_GET (create_mkey_out, lout, mkey_index); - mkey->size =MLX5_GET64 (mkc, mkc, len); mkey->key = (u32 )mlx5_mkey_variant (mkey->key) |mlx5_idx_to_mkey (mkey_index); mkey->pd =MLX5_GET (mkc, mkc, pd);init_waitqueue_head (&mkey->wait);
drivers/vdpa/mlx5/core/resources.c +0 -1
@@ -215,7 +215,6 @@ int mlx5_vdpa_create_mkey(struct mlx5_vdpa_dev *mvdev, struct mlx5_core_mkey *mk mkc =MLX5_ADDR_OF (create_mkey_in, in, memory_key_mkey_entry); mkey_index =MLX5_GET (create_mkey_out, lout, mkey_index); - mkey->size =MLX5_GET64 (mkc, mkc, len); mkey->key |=mlx5_idx_to_mkey (mkey_index); mkey->pd =MLX5_GET (mkc, mkc, pd);return 0 ;
include/linux/mlx5/driver.h +0 -1
@@ -364,7 +364,6 @@ enum { };struct mlx5_core_mkey { -u64 size;u32 key;u32 pd;u32 type;
Signature · 6 lines
2.31.1 _______________________________________________ Virtualization mailing list [email protected] https://lists.linuxfoundation.org/mailman/listinfo/virtualization
PATCH 4/7 RDMA/mlx5: Remove pd from struct mlx5_core_mkey
In reply to Leon RomanovskyFrom: Aharon Landau <[email protected]>
There is no read of mkey->pd, only write. Remove it.
--- drivers/infiniband/hw/mlx5/devx.c | 1 - drivers/infiniband/hw/mlx5/mr.c | 3 --- drivers/net/ethernet/mellanox/mlx5/core/mr.c | 3 --- drivers/vdpa/mlx5/core/resources.c | 3 --- include/linux/mlx5/driver.h | 1 - 5 files changed, 11 deletions(-)
drivers/infiniband/hw/mlx5/devx.c +0 -1
@@ -1303,7 +1303,6 @@ static int devx_handle_mkey_indirect(struct devx_obj *obj, mkey->key =mlx5_idx_to_mkey (MLX5_GET (create_mkey_out, out, mkey_index)) | key; mkey->type =MLX5_MKEY_INDIRECT_DEVX ; - mkey->pd =MLX5_GET (mkc, mkc, pd); devx_mr->ndescs =MLX5_GET (mkc, mkc, translations_octword_size);init_waitqueue_head (&mkey->wait);
drivers/infiniband/hw/mlx5/mr.c +0 -3
@@ -968,7 +968,6 @@ static struct mlx5_ib_mr *alloc_cacheable_mr(struct ib_pd *pd, mr->ibmr.pd = pd; mr->umem = umem; - mr->mmkey.pd =to_mpd (pd)->pdn; mr->page_shift =order_base_2 (page_size);set_mr_fields (dev, mr, umem->length, access_flags, iova);
@@ -1712,7 +1711,6 @@ static int umr_rereg_pd_access(struct mlx5_ib_mr *mr, struct ib_pd *pd,return err; mr->access_flags = access_flags; - mr->mmkey.pd =to_mpd (pd)->pdn;return 0 ; }
@@ -1757,7 +1755,6 @@ static int umr_rereg_pas(struct mlx5_ib_mr *mr, struct ib_pd *pd,if (flags &IB_MR_REREG_PD ) { mr->ibmr.pd = pd; - mr->mmkey.pd =to_mpd (pd)->pdn; upd_flags |=MLX5_IB_UPD_XLT_PD ; }if (flags &IB_MR_REREG_ACCESS ) {
drivers/net/ethernet/mellanox/mlx5/core/mr.c +0 -3
@@ -41,7 +41,6 @@ int mlx5_core_create_mkey(struct mlx5_core_dev *dev, {u32 lout[MLX5_ST_SZ_DW (create_mkey_out)] = {};u32 mkey_index; -void *mkc;int err;MLX5_SET (create_mkey_in, in, opcode,MLX5_CMD_OP_CREATE_MKEY );
@@ -50,10 +49,8 @@ int mlx5_core_create_mkey(struct mlx5_core_dev *dev,if (err)return err; - mkc =MLX5_ADDR_OF (create_mkey_in, in, memory_key_mkey_entry); mkey_index =MLX5_GET (create_mkey_out, lout, mkey_index); mkey->key = (u32 )mlx5_mkey_variant (mkey->key) |mlx5_idx_to_mkey (mkey_index); - mkey->pd =MLX5_GET (mkc, mkc, pd);init_waitqueue_head (&mkey->wait);mlx5_core_dbg (dev,"out 0x%x, mkey 0x%x\n" , mkey_index, mkey->key);
drivers/vdpa/mlx5/core/resources.c +0 -3
@@ -203,7 +203,6 @@ int mlx5_vdpa_create_mkey(struct mlx5_vdpa_dev *mvdev, struct mlx5_core_mkey *mk {u32 lout[MLX5_ST_SZ_DW (create_mkey_out)] = {};u32 mkey_index; -void *mkc;int err;MLX5_SET (create_mkey_in, in, opcode,MLX5_CMD_OP_CREATE_MKEY );
@@ -213,10 +212,8 @@ int mlx5_vdpa_create_mkey(struct mlx5_vdpa_dev *mvdev, struct mlx5_core_mkey *mkif (err)return err; - mkc =MLX5_ADDR_OF (create_mkey_in, in, memory_key_mkey_entry); mkey_index =MLX5_GET (create_mkey_out, lout, mkey_index); mkey->key |=mlx5_idx_to_mkey (mkey_index); - mkey->pd =MLX5_GET (mkc, mkc, pd);return 0 ; }
include/linux/mlx5/driver.h +0 -1
@@ -365,7 +365,6 @@ enum {struct mlx5_core_mkey {u32 key; -u32 pd;u32 type;struct wait_queue_head wait;refcount_t usecount;
Signature · 6 lines
2.31.1 _______________________________________________ Virtualization mailing list [email protected] https://lists.linuxfoundation.org/mailman/listinfo/virtualization
PATCH 5/7 RDMA/mlx5: Replace struct mlx5_core_mkey by u32 key
In reply to Leon RomanovskyFrom: Aharon Landau <[email protected]>
In mlx5_core and vdpa there is no use of mlx5_core_mkey members except for the key itself.
As preparation for moving mlx5_core_mkey to mlx5_ib, the occurrences of struct mlx5_core_mkey in all modules except for mlx5_ib are replaced by a u32 key.
--- drivers/infiniband/hw/mlx5/mr.c | 21 ++++++++++++------ drivers/infiniband/hw/mlx5/odp.c | 2 +- .../mellanox/mlx5/core/diag/fw_tracer.c | 6 ++--- .../mellanox/mlx5/core/diag/fw_tracer.h | 2 +- .../mellanox/mlx5/core/diag/rsc_dump.c | 10 ++++----- drivers/net/ethernet/mellanox/mlx5/core/en.h | 2 +- .../net/ethernet/mellanox/mlx5/core/en/ptp.c | 2 +- .../net/ethernet/mellanox/mlx5/core/en/trap.c | 2 +- .../ethernet/mellanox/mlx5/core/en_common.c | 6 ++--- .../net/ethernet/mellanox/mlx5/core/en_main.c | 13 +++++------ .../ethernet/mellanox/mlx5/core/fpga/conn.c | 10 ++++----- .../ethernet/mellanox/mlx5/core/fpga/core.h | 2 +- drivers/net/ethernet/mellanox/mlx5/core/mr.c | 22 +++++++++---------- .../mellanox/mlx5/core/steering/dr_icm_pool.c | 10 ++++----- .../mellanox/mlx5/core/steering/dr_send.c | 11 +++++----- .../mellanox/mlx5/core/steering/dr_types.h | 2 +- drivers/vdpa/mlx5/core/mlx5_vdpa.h | 8 +++---- drivers/vdpa/mlx5/core/mr.c | 8 +++---- drivers/vdpa/mlx5/core/resources.c | 8 +++---- drivers/vdpa/mlx5/net/mlx5_vnet.c | 2 +- include/linux/mlx5/driver.h | 14 +++++------- 21 files changed, 82 insertions(+), 81 deletions(-)
drivers/infiniband/hw/mlx5/mr.c +14 -7
@@ -105,8 +105,14 @@ static int mlx5_ib_create_mkey(struct mlx5_ib_dev *dev, struct mlx5_core_mkey *mkey, u32 *in, int inlen) { + int ret; +assign_mkey_variant (dev, mkey, in); -return mlx5_core_create_mkey (dev->mdev, mkey, in, inlen); + ret =mlx5_core_create_mkey (dev->mdev, &mkey->key, in, inlen); +if (!ret) +init_waitqueue_head (&mkey->wait); + +return ret; } static int
@@ -134,7 +140,7 @@ static int destroy_mkey(struct mlx5_ib_dev *dev, struct mlx5_ib_mr *mr) {WARN_ON (xa_load (&dev->odp_mkeys,mlx5_base_mkey (mr->mmkey.key))); -return mlx5_core_destroy_mkey (dev->mdev, &mr->mmkey); +return mlx5_core_destroy_mkey (dev->mdev, mr->mmkey.key); }static void create_mkey_callback (int status,struct mlx5_async_work *context)
@@ -261,10 +267,11 @@ static struct mlx5_ib_mr *create_cache_mr(struct mlx5_cache_ent *ent) goto free_in; } - err =mlx5_core_create_mkey (ent->dev->mdev, &mr->mmkey, in, inlen); + err =mlx5_core_create_mkey (ent->dev->mdev, &mr->mmkey.key, in, inlen);if (err) goto free_mr; +init_waitqueue_head (&mr->mmkey.wait); mr->mmkey.type =MLX5_MKEY_MR ;WRITE_ONCE (ent->dev->cache.last_add, jiffies);spin_lock_irq (&ent->lock);
@@ -291,7 +298,7 @@ static void remove_cache_mr_locked(struct mlx5_cache_ent *ent) ent->available_mrs--; ent->total_mrs--;spin_unlock_irq (&ent->lock); -mlx5_core_destroy_mkey (ent->dev->mdev, &mr->mmkey); +mlx5_core_destroy_mkey (ent->dev->mdev, mr->mmkey.key);kfree (mr);spin_lock_irq (&ent->lock); }
@@ -651,7 +658,7 @@ static void clean_keys(struct mlx5_ib_dev *dev, int c) ent->available_mrs--; ent->total_mrs--;spin_unlock_irq (&ent->lock); -mlx5_core_destroy_mkey (dev->mdev, &mr->mmkey); +mlx5_core_destroy_mkey (dev->mdev, mr->mmkey.key); }list_for_each_entry_safe (mr, tmp_mr, &del_list, list) {
@@ -2350,7 +2357,7 @@ int mlx5_ib_alloc_mw(struct ib_mw *ibmw, struct ib_udata *udata)return 0 ; free_mkey: -mlx5_core_destroy_mkey (dev->mdev, &mw->mmkey); +mlx5_core_destroy_mkey (dev->mdev, mw->mmkey.key); free:kfree (in);return err;
@@ -2369,7 +2376,7 @@ int mlx5_ib_dealloc_mw(struct ib_mw *mw)*/ mlx5r_deref_wait_odp_mkey (&mmw->mmkey); -return mlx5_core_destroy_mkey (dev->mdev, &mmw->mmkey); +return mlx5_core_destroy_mkey (dev->mdev, mmw->mmkey.key); } int mlx5_ib_check_mr_status(struct ib_mr *ibmr, u32 check_mask,
drivers/infiniband/hw/mlx5/odp.c +1 -1
@@ -909,7 +909,7 @@ static int pagefault_single_data_segment(struct mlx5_ib_dev *dev, pklm = (struct mlx5_klm *)MLX5_ADDR_OF (query_mkey_out, out, bsf0_klm0_pas_mtt0_1); - ret =mlx5_core_query_mkey (dev->mdev, mmkey, out, outlen); + ret =mlx5_core_query_mkey (dev->mdev, mmkey->key, out, outlen);if (ret) goto end;
drivers/net/ethernet/mellanox/mlx5/core/diag/fw_tracer.c +3 -3
@@ -745,7 +745,7 @@ static int mlx5_fw_tracer_set_mtrc_conf(struct mlx5_fw_tracer *tracer)MLX5_SET (mtrc_conf, in, trace_mode,TRACE_TO_MEMORY );MLX5_SET (mtrc_conf, in, log_trace_buffer_size,ilog2 (TRACER_BUFFER_PAGE_NUM )); -MLX5_SET (mtrc_conf, in, trace_mkey, tracer->buff.mkey.key); +MLX5_SET (mtrc_conf, in, trace_mkey, tracer->buff.mkey); err =mlx5_core_access_reg (dev, in,sizeof (in), out,sizeof (out),MLX5_REG_MTRC_CONF ,0 ,1 );
@@ -1028,7 +1028,7 @@ int mlx5_fw_tracer_init(struct mlx5_fw_tracer *tracer) err_notifier_unregister:mlx5_eq_notifier_unregister (dev, &tracer->nb); -mlx5_core_destroy_mkey (dev, &tracer->buff.mkey); +mlx5_core_destroy_mkey (dev, tracer->buff.mkey); err_dealloc_pd:mlx5_core_dealloc_pd (dev, tracer->buff.pdn); err_cancel_work:
@@ -1051,7 +1051,7 @@ void mlx5_fw_tracer_cleanup(struct mlx5_fw_tracer *tracer)if (tracer->owner)mlx5_fw_tracer_ownership_release (tracer); -mlx5_core_destroy_mkey (tracer->dev, &tracer->buff.mkey); +mlx5_core_destroy_mkey (tracer->dev, tracer->buff.mkey);mlx5_core_dealloc_pd (tracer->dev, tracer->buff.pdn); }
drivers/net/ethernet/mellanox/mlx5/core/diag/fw_tracer.h +1 -1
@@ -89,7 +89,7 @@ struct mlx5_fw_tracer {void *log_buf;dma_addr_t dma;u32 size; -struct mlx5_core_mkey mkey; +u32 mkey;u32 consumer_index; } buff;
drivers/net/ethernet/mellanox/mlx5/core/diag/rsc_dump.c +5 -5
@@ -30,7 +30,7 @@ static const char *const mlx5_rsc_sgmt_name[] = {struct mlx5_rsc_dump {u32 pdn; -struct mlx5_core_mkey mkey; +u32 mkey;u16 fw_segment_type[MLX5_SGMT_TYPE_NUM ]; };
@@ -89,7 +89,7 @@ static int mlx5_rsc_dump_trigger(struct mlx5_core_dev *dev, struct mlx5_rsc_dumpreturn -ENOMEM ; in_seq_num =MLX5_GET (resource_dump, cmd->cmd, seq_num); -MLX5_SET (resource_dump, cmd->cmd, mkey, rsc_dump->mkey.key); +MLX5_SET (resource_dump, cmd->cmd, mkey, rsc_dump->mkey);MLX5_SET64 (resource_dump, cmd->cmd, address, dma); err = mlx5_core_access_reg(dev, cmd->cmd, sizeof(cmd->cmd), cmd->cmd,
@@ -202,7 +202,7 @@ static int mlx5_rsc_dump_menu(struct mlx5_core_dev *dev) }static int mlx5_rsc_dump_create_mkey (struct mlx5_core_dev *mdev,u32 pdn, -struct mlx5_core_mkey *mkey) +u32 *mkey) {int inlen =MLX5_ST_SZ_BYTES (create_mkey_in);void *mkc;
@@ -276,7 +276,7 @@ int mlx5_rsc_dump_init(struct mlx5_core_dev *dev)return err; destroy_mkey: -mlx5_core_destroy_mkey (dev, &rsc_dump->mkey); +mlx5_core_destroy_mkey (dev, rsc_dump->mkey); free_pd:mlx5_core_dealloc_pd (dev, rsc_dump->pdn);return err;
@@ -287,6 +287,6 @@ void mlx5_rsc_dump_cleanup(struct mlx5_core_dev *dev)if (IS_ERR_OR_NULL (dev->rsc_dump))return ; -mlx5_core_destroy_mkey (dev, &dev->rsc_dump->mkey); +mlx5_core_destroy_mkey (dev, dev->rsc_dump->mkey);mlx5_core_dealloc_pd (dev, dev->rsc_dump->pdn); }
drivers/net/ethernet/mellanox/mlx5/core/en.h +1 -1
@@ -664,7 +664,7 @@ struct mlx5e_rq {u8 wq_type;u32 rqn;struct mlx5_core_dev *mdev; -struct mlx5_core_mkey umr_mkey; +u32 umr_mkey;struct mlx5e_dma_info wqe_overflow;/* XDP read-mostly */
drivers/net/ethernet/mellanox/mlx5/core/en/ptp.c +1 -1
@@ -683,7 +683,7 @@ int mlx5e_ptp_open(struct mlx5e_priv *priv, struct mlx5e_params *params, c->tstamp = &priv->tstamp; c->pdev =mlx5_core_dma_dev (priv->mdev); c->netdev = priv->netdev; - c->mkey_be =cpu_to_be32 (priv->mdev->mlx5e_res.hw_objs.mkey.key); + c->mkey_be =cpu_to_be32 (priv->mdev->mlx5e_res.hw_objs.mkey); c->num_tc =mlx5e_get_dcb_num_tc (params); c->stats = &priv->ptp_stats.ch; c->lag_port = lag_port;
drivers/net/ethernet/mellanox/mlx5/core/en/trap.c +1 -1
@@ -137,7 +137,7 @@ static struct mlx5e_trap *mlx5e_open_trap(struct mlx5e_priv *priv) t->tstamp = &priv->tstamp; t->pdev =mlx5_core_dma_dev (priv->mdev); t->netdev = priv->netdev; - t->mkey_be =cpu_to_be32 (priv->mdev->mlx5e_res.hw_objs.mkey.key); + t->mkey_be =cpu_to_be32 (priv->mdev->mlx5e_res.hw_objs.mkey); t->stats = &priv->trap_stats.ch;netif_napi_add (netdev, &t->napi, mlx5e_trap_napi_poll,64 );
drivers/net/ethernet/mellanox/mlx5/core/en_common.c +3 -3
@@ -47,7 +47,7 @@ void mlx5e_mkey_set_relaxed_ordering(struct mlx5_core_dev *mdev, void *mkc) }static int mlx5e_create_mkey (struct mlx5_core_dev *mdev,u32 pdn, -struct mlx5_core_mkey *mkey) +u32 *mkey) {int inlen =MLX5_ST_SZ_BYTES (create_mkey_in);void *mkc;
@@ -108,7 +108,7 @@ int mlx5e_create_mdev_resources(struct mlx5_core_dev *mdev)return 0 ; err_destroy_mkey: -mlx5_core_destroy_mkey (mdev, &res->mkey); +mlx5_core_destroy_mkey (mdev, res->mkey); err_dealloc_transport_domain:mlx5_core_dealloc_transport_domain (mdev, res->td.tdn); err_dealloc_pd:
@@ -121,7 +121,7 @@ void mlx5e_destroy_mdev_resources(struct mlx5_core_dev *mdev)struct mlx5e_hw_objs *res = &mdev->mlx5e_res.hw_objs;mlx5_free_bfreg (mdev, &res->bfreg); -mlx5_core_destroy_mkey (mdev, &res->mkey); +mlx5_core_destroy_mkey (mdev, res->mkey);mlx5_core_dealloc_transport_domain (mdev, res->td.tdn);mlx5_core_dealloc_pd (mdev, res->pdn);memset (res,0 ,sizeof (*res));
drivers/net/ethernet/mellanox/mlx5/core/en_main.c +6 -7
@@ -234,8 +234,7 @@ static int mlx5e_rq_alloc_mpwqe_info(struct mlx5e_rq *rq, int node) }static int mlx5e_create_umr_mkey (struct mlx5_core_dev *mdev, -u64 npages,u8 page_shift, -struct mlx5_core_mkey *umr_mkey, +u64 npages,u8 page_shift,u32 *umr_mkey,dma_addr_t filler_addr) {struct mlx5_mtt *mtt;
@@ -455,7 +454,7 @@ static int mlx5e_alloc_rq(struct mlx5e_params *params, err =mlx5e_create_rq_umr_mkey (mdev, rq);if (err) goto err_rq_drop_page; - rq->mkey_be =cpu_to_be32 (rq->umr_mkey.key); + rq->mkey_be =cpu_to_be32 (rq->umr_mkey); err =mlx5e_rq_alloc_mpwqe_info (rq, node);if (err)
@@ -487,7 +486,7 @@ static int mlx5e_alloc_rq(struct mlx5e_params *params,if (err) goto err_rq_frags; - rq->mkey_be =cpu_to_be32 (mdev->mlx5e_res.hw_objs.mkey.key); + rq->mkey_be =cpu_to_be32 (mdev->mlx5e_res.hw_objs.mkey); }if (xsk) {
@@ -574,7 +573,7 @@ static int mlx5e_alloc_rq(struct mlx5e_params *params,case MLX5_WQ_TYPE_LINKED_LIST_STRIDING_RQ :kvfree (rq->mpwqe.info); err_rq_mkey: -mlx5_core_destroy_mkey (mdev, &rq->umr_mkey); +mlx5_core_destroy_mkey (mdev, rq->umr_mkey); err_rq_drop_page:mlx5e_free_mpwqe_rq_drop_page (rq);break ;
@@ -607,7 +606,7 @@ static void mlx5e_free_rq(struct mlx5e_rq *rq)switch (rq->wq_type) {case MLX5_WQ_TYPE_LINKED_LIST_STRIDING_RQ :kvfree (rq->mpwqe.info); -mlx5_core_destroy_mkey (rq->mdev, &rq->umr_mkey); +mlx5_core_destroy_mkey (rq->mdev, rq->umr_mkey);mlx5e_free_mpwqe_rq_drop_page (rq);break ;default :/* MLX5_WQ_TYPE_CYCLIC */
@@ -1991,7 +1990,7 @@ static int mlx5e_open_channel(struct mlx5e_priv *priv, int ix, c->cpu = cpu; c->pdev =mlx5_core_dma_dev (priv->mdev); c->netdev = priv->netdev; - c->mkey_be =cpu_to_be32 (priv->mdev->mlx5e_res.hw_objs.mkey.key); + c->mkey_be =cpu_to_be32 (priv->mdev->mlx5e_res.hw_objs.mkey); c->num_tc =mlx5e_get_dcb_num_tc (params); c->xdp = !!params->xdp_prog; c->stats = &priv->channel_stats[ix].ch;
drivers/net/ethernet/mellanox/mlx5/core/fpga/conn.c +5 -5
@@ -115,7 +115,7 @@ static int mlx5_fpga_conn_post_recv(struct mlx5_fpga_conn *conn, ix = conn->qp.rq.pc & (conn->qp.rq.size -1 ); data =mlx5_wq_cyc_get_wqe (&conn->qp.wq.rq, ix); data->byte_count =cpu_to_be32 (buf->sg[0 ].size); - data->lkey =cpu_to_be32 (conn->fdev->conn_res.mkey.key); + data->lkey =cpu_to_be32 (conn->fdev->conn_res.mkey); data->addr =cpu_to_be64 (buf->sg[0 ].dma_addr); conn->qp.rq.pc++;
@@ -155,7 +155,7 @@ static void mlx5_fpga_conn_post_send(struct mlx5_fpga_conn *conn,if (!buf->sg[sgi].data)break ; data->byte_count =cpu_to_be32 (buf->sg[sgi].size); - data->lkey =cpu_to_be32 (conn->fdev->conn_res.mkey.key); + data->lkey =cpu_to_be32 (conn->fdev->conn_res.mkey); data->addr =cpu_to_be64 (buf->sg[sgi].dma_addr); data++; size++;
@@ -221,7 +221,7 @@ static int mlx5_fpga_conn_post_recv_buf(struct mlx5_fpga_conn *conn) }static int mlx5_fpga_conn_create_mkey (struct mlx5_core_dev *mdev,u32 pdn, -struct mlx5_core_mkey *mkey) +u32 *mkey) {int inlen =MLX5_ST_SZ_BYTES (create_mkey_in);void *mkc;
@@ -978,7 +978,7 @@ int mlx5_fpga_conn_device_init(struct mlx5_fpga_device *fdev)mlx5_fpga_err (fdev,"create mkey failed, %d\n" , err); goto err_dealloc_pd; } -mlx5_fpga_dbg (fdev,"Created mkey 0x%x\n" , fdev->conn_res.mkey.key); +mlx5_fpga_dbg (fdev,"Created mkey 0x%x\n" , fdev->conn_res.mkey);return 0 ;
@@ -994,7 +994,7 @@ int mlx5_fpga_conn_device_init(struct mlx5_fpga_device *fdev)void mlx5_fpga_conn_device_cleanup (struct mlx5_fpga_device *fdev) { -mlx5_core_destroy_mkey (fdev->mdev, &fdev->conn_res.mkey); +mlx5_core_destroy_mkey (fdev->mdev, fdev->conn_res.mkey);mlx5_core_dealloc_pd (fdev->mdev, fdev->conn_res.pdn);mlx5_put_uars_page (fdev->mdev, fdev->conn_res.uar);mlx5_nic_vport_disable_roce (fdev->mdev);
drivers/net/ethernet/mellanox/mlx5/core/fpga/core.h +1 -1
@@ -54,7 +54,7 @@ struct mlx5_fpga_device {/* QP Connection resources */ struct {u32 pdn; -struct mlx5_core_mkey mkey; +u32 mkey;struct mlx5_uars_page *uar; } conn_res;
drivers/net/ethernet/mellanox/mlx5/core/mr.c +10 -12
@@ -35,9 +35,8 @@#include <linux/mlx5/driver.h> #include "mlx5_core.h" -int mlx5_core_create_mkey (struct mlx5_core_dev *dev, -struct mlx5_core_mkey *mkey, -u32 *in,int inlen) +int mlx5_core_create_mkey (struct mlx5_core_dev *dev,u32 *mkey,u32 *in, +int inlen) {u32 lout[MLX5_ST_SZ_DW (create_mkey_out)] = {};u32 mkey_index;
@@ -50,33 +49,32 @@ int mlx5_core_create_mkey(struct mlx5_core_dev *dev,return err; mkey_index =MLX5_GET (create_mkey_out, lout, mkey_index); - mkey->key = (u32 )mlx5_mkey_variant (mkey->key) |mlx5_idx_to_mkey (mkey_index); -init_waitqueue_head (&mkey->wait); + *mkey =MLX5_GET (create_mkey_in, in, memory_key_mkey_entry.mkey_7_0) | +mlx5_idx_to_mkey (mkey_index); -mlx5_core_dbg (dev,"out 0x%x, mkey 0x%x\n" , mkey_index, mkey->key); +mlx5_core_dbg (dev,"out 0x%x, mkey 0x%x\n" , mkey_index, *mkey);return 0 ; }EXPORT_SYMBOL (mlx5_core_create_mkey); -int mlx5_core_destroy_mkey (struct mlx5_core_dev *dev, -struct mlx5_core_mkey *mkey) +int mlx5_core_destroy_mkey (struct mlx5_core_dev *dev,u32 mkey) {u32 in[MLX5_ST_SZ_DW (destroy_mkey_in)] = {};MLX5_SET (destroy_mkey_in, in, opcode,MLX5_CMD_OP_DESTROY_MKEY ); -MLX5_SET (destroy_mkey_in, in, mkey_index,mlx5_mkey_to_idx (mkey->key)); +MLX5_SET (destroy_mkey_in, in, mkey_index,mlx5_mkey_to_idx (mkey));return mlx5_cmd_exec_in (dev, destroy_mkey, in); }EXPORT_SYMBOL (mlx5_core_destroy_mkey); -int mlx5_core_query_mkey (struct mlx5_core_dev *dev,struct mlx5_core_mkey *mkey, -u32 *out,int outlen) +int mlx5_core_query_mkey (struct mlx5_core_dev *dev,u32 mkey,u32 *out, +int outlen) {u32 in[MLX5_ST_SZ_DW (query_mkey_in)] = {};memset (out,0 , outlen);MLX5_SET (query_mkey_in, in, opcode,MLX5_CMD_OP_QUERY_MKEY ); -MLX5_SET (query_mkey_in, in, mkey_index,mlx5_mkey_to_idx (mkey->key)); +MLX5_SET (query_mkey_in, in, mkey_index,mlx5_mkey_to_idx (mkey));return mlx5_cmd_exec (dev, in,sizeof (in), out, outlen); }EXPORT_SYMBOL (mlx5_core_query_mkey);
drivers/net/ethernet/mellanox/mlx5/core/steering/dr_icm_pool.c +5 -5
@@ -24,7 +24,7 @@ struct mlx5dr_icm_dm { };struct mlx5dr_icm_mr { -struct mlx5_core_mkey mkey; +u32 mkey;struct mlx5dr_icm_dm dm;struct mlx5dr_domain *dmn;size_t length;
@@ -33,7 +33,7 @@ struct mlx5dr_icm_mr {static int dr_icm_create_dm_mkey (struct mlx5_core_dev *mdev,u32 pd,u64 length,u64 start_addr,int mode, -struct mlx5_core_mkey *mkey) +u32 *mkey) {u32 inlen =MLX5_ST_SZ_BYTES (create_mkey_in);u32 in[MLX5_ST_SZ_DW (create_mkey_in)] = {};
@@ -116,7 +116,7 @@ dr_icm_pool_mr_create(struct mlx5dr_icm_pool *pool)return icm_mr; free_mkey: -mlx5_core_destroy_mkey (mdev, &icm_mr->mkey); +mlx5_core_destroy_mkey (mdev, icm_mr->mkey); free_dm:mlx5_dm_sw_icm_dealloc (mdev, icm_mr->dm.type, icm_mr->dm.length,0 , icm_mr->dm.addr, icm_mr->dm.obj_id);
@@ -130,7 +130,7 @@ static void dr_icm_pool_mr_destroy(struct mlx5dr_icm_mr *icm_mr)struct mlx5_core_dev *mdev = icm_mr->dmn->mdev;struct mlx5dr_icm_dm *dm = &icm_mr->dm; -mlx5_core_destroy_mkey (mdev, &icm_mr->mkey); +mlx5_core_destroy_mkey (mdev, icm_mr->mkey);mlx5_dm_sw_icm_dealloc (mdev, dm->type, dm->length,0 , dm->addr, dm->obj_id);kvfree (icm_mr);
@@ -252,7 +252,7 @@ dr_icm_chunk_create(struct mlx5dr_icm_pool *pool, offset =mlx5dr_icm_pool_dm_type_to_entry_size (pool->icm_type) * seg; - chunk->rkey = buddy_mem_pool->icm_mr->mkey.key; + chunk->rkey = buddy_mem_pool->icm_mr->mkey; chunk->mr_addr = offset; chunk->icm_addr = (uintptr_t )buddy_mem_pool->icm_mr->icm_start_addr + offset;
drivers/net/ethernet/mellanox/mlx5/core/steering/dr_send.c +5 -6
@@ -350,7 +350,7 @@ static void dr_fill_data_segs(struct mlx5dr_send_ring *send_ring, send_info->read.length = send_info->write.length;/* Read into the same write area */ send_info->read.addr = (uintptr_t )send_info->write.addr; - send_info->read.lkey = send_ring->mr->mkey.key; + send_info->read.lkey = send_ring->mr->mkey;if (send_ring->pending_wqe % send_ring->signal_th ==0 ) send_info->read.send_flags =IB_SEND_SIGNALED ;
@@ -388,7 +388,7 @@ static int dr_postsend_icm_data(struct mlx5dr_domain *dmn, (void *)(uintptr_t )send_info->write.addr, send_info->write.length); send_info->write.addr = (uintptr_t )send_ring->mr->dma_addr + buff_offset; - send_info->write.lkey = send_ring->mr->mkey.key; + send_info->write.lkey = send_ring->mr->mkey; } send_ring->tx_head++;
@@ -848,8 +848,7 @@ static void dr_destroy_cq(struct mlx5_core_dev *mdev, struct mlx5dr_cq *cq)kfree (cq); } -static int -dr_create_mkey (struct mlx5_core_dev *mdev,u32 pdn,struct mlx5_core_mkey *mkey) +static int dr_create_mkey (struct mlx5_core_dev *mdev,u32 pdn,u32 *mkey) {u32 in[MLX5_ST_SZ_DW (create_mkey_in)] = {};void *mkc;
@@ -908,7 +907,7 @@ static struct mlx5dr_mr *dr_reg_mr(struct mlx5_core_dev *mdev,static void dr_dereg_mr (struct mlx5_core_dev *mdev,struct mlx5dr_mr *mr) { -mlx5_core_destroy_mkey (mdev, &mr->mkey); +mlx5_core_destroy_mkey (mdev, mr->mkey);dma_unmap_single (mlx5_core_dma_dev (mdev), mr->dma_addr, mr->size,DMA_BIDIRECTIONAL );kfree (mr);
@@ -1039,7 +1038,7 @@ int mlx5dr_send_ring_force_drain(struct mlx5dr_domain *dmn) send_info.write.lkey =0 ;/* Using the sync_mr in order to write/read */ send_info.remote_addr = (uintptr_t )send_ring->sync_mr->addr; - send_info.rkey = send_ring->sync_mr->mkey.key; + send_info.rkey = send_ring->sync_mr->mkey;for (i =0 ; i < num_of_sends_req; i++) { ret =dr_postsend_icm_data (dmn, &send_info);
drivers/net/ethernet/mellanox/mlx5/core/steering/dr_types.h +1 -1
@@ -1275,7 +1275,7 @@ struct mlx5dr_cq {struct mlx5dr_mr {struct mlx5_core_dev *mdev; -struct mlx5_core_mkey mkey; +u32 mkey;dma_addr_t dma_addr;void *addr;size_t size;
drivers/vdpa/mlx5/core/mlx5_vdpa.h +4 -4
@@ -15,7 +15,7 @@ struct mlx5_vdpa_direct_mr {u64 start;u64 end;u32 perm; -struct mlx5_core_mkey mr; +u32 mr;struct sg_table sg_head;int log_size;int nsg;
@@ -25,7 +25,7 @@ struct mlx5_vdpa_direct_mr { };struct mlx5_vdpa_mr { -struct mlx5_core_mkey mkey; +u32 mkey;/* list of direct MRs descendants of this indirect mr */ struct list_head head;
@@ -99,9 +99,9 @@ int mlx5_vdpa_alloc_transport_domain(struct mlx5_vdpa_dev *mvdev, u32 *tdn);void mlx5_vdpa_dealloc_transport_domain (struct mlx5_vdpa_dev *mvdev,u32 tdn);int mlx5_vdpa_alloc_resources (struct mlx5_vdpa_dev *mvdev);void mlx5_vdpa_free_resources (struct mlx5_vdpa_dev *mvdev); -int mlx5_vdpa_create_mkey (struct mlx5_vdpa_dev *mvdev,struct mlx5_core_mkey *mkey,u32 *in, +int mlx5_vdpa_create_mkey (struct mlx5_vdpa_dev *mvdev,u32 *mkey,u32 *in,int inlen); -int mlx5_vdpa_destroy_mkey (struct mlx5_vdpa_dev *mvdev,struct mlx5_core_mkey *mkey); +int mlx5_vdpa_destroy_mkey (struct mlx5_vdpa_dev *mvdev,u32 mkey);int mlx5_vdpa_handle_set_map (struct mlx5_vdpa_dev *mvdev,struct vhost_iotlb *iotlb,bool *change_map);int mlx5_vdpa_create_mr (struct mlx5_vdpa_dev *mvdev,struct vhost_iotlb *iotlb);
drivers/vdpa/mlx5/core/mr.c +4 -4
@@ -88,7 +88,7 @@ static int create_direct_mr(struct mlx5_vdpa_dev *mvdev, struct mlx5_vdpa_directstatic void destroy_direct_mr (struct mlx5_vdpa_dev *mvdev,struct mlx5_vdpa_direct_mr *mr) { -mlx5_vdpa_destroy_mkey (mvdev, &mr->mr); +mlx5_vdpa_destroy_mkey (mvdev, mr->mr); }static u64 map_start (struct vhost_iotlb_map *map,struct mlx5_vdpa_direct_mr *mr)
@@ -162,7 +162,7 @@ static void fill_indir(struct mlx5_vdpa_dev *mvdev, struct mlx5_vdpa_mr *mkey, v }if (preve == dmr->start) { - klm->key =cpu_to_be32 (dmr->mr.key); + klm->key =cpu_to_be32 (dmr->mr); klm->bcount =cpu_to_be32 (klm_bcount (dmr->end - dmr->start)); preve = dmr->end; }else {
@@ -217,7 +217,7 @@ static int create_indirect_key(struct mlx5_vdpa_dev *mvdev, struct mlx5_vdpa_mrstatic void destroy_indirect_key (struct mlx5_vdpa_dev *mvdev,struct mlx5_vdpa_mr *mkey) { -mlx5_vdpa_destroy_mkey (mvdev, &mkey->mkey); +mlx5_vdpa_destroy_mkey (mvdev, mkey->mkey); } static int map_direct_mr(struct mlx5_vdpa_dev *mvdev, struct mlx5_vdpa_direct_mr *mr,
@@ -449,7 +449,7 @@ static int create_dma_mr(struct mlx5_vdpa_dev *mvdev, struct mlx5_vdpa_mr *mr)static void destroy_dma_mr (struct mlx5_vdpa_dev *mvdev,struct mlx5_vdpa_mr *mr) { -mlx5_vdpa_destroy_mkey (mvdev, &mr->mkey); +mlx5_vdpa_destroy_mkey (mvdev, mr->mkey); }static int dup_iotlb (struct mlx5_vdpa_dev *mvdev,struct vhost_iotlb *src)
drivers/vdpa/mlx5/core/resources.c +4 -4
@@ -198,7 +198,7 @@ void mlx5_vdpa_dealloc_transport_domain(struct mlx5_vdpa_dev *mvdev, u32 tdn)mlx5_cmd_exec_in (mvdev->mdev, dealloc_transport_domain, in); } -int mlx5_vdpa_create_mkey (struct mlx5_vdpa_dev *mvdev,struct mlx5_core_mkey *mkey,u32 *in, +int mlx5_vdpa_create_mkey (struct mlx5_vdpa_dev *mvdev,u32 *mkey,u32 *in,int inlen) {u32 lout[MLX5_ST_SZ_DW (create_mkey_out)] = {};
@@ -213,17 +213,17 @@ int mlx5_vdpa_create_mkey(struct mlx5_vdpa_dev *mvdev, struct mlx5_core_mkey *mkreturn err; mkey_index =MLX5_GET (create_mkey_out, lout, mkey_index); - mkey->key |=mlx5_idx_to_mkey (mkey_index); + *mkey |=mlx5_idx_to_mkey (mkey_index);return 0 ; } -int mlx5_vdpa_destroy_mkey (struct mlx5_vdpa_dev *mvdev,struct mlx5_core_mkey *mkey) +int mlx5_vdpa_destroy_mkey (struct mlx5_vdpa_dev *mvdev,u32 mkey) {u32 in[MLX5_ST_SZ_DW (destroy_mkey_in)] = {};MLX5_SET (destroy_mkey_in, in, uid, mvdev->res.uid);MLX5_SET (destroy_mkey_in, in, opcode,MLX5_CMD_OP_DESTROY_MKEY ); -MLX5_SET (destroy_mkey_in, in, mkey_index,mlx5_mkey_to_idx (mkey->key)); +MLX5_SET (destroy_mkey_in, in, mkey_index,mlx5_mkey_to_idx (mkey));return mlx5_cmd_exec_in (mvdev->mdev, destroy_mkey, in); }
drivers/vdpa/mlx5/net/mlx5_vnet.c +1 -1
@@ -865,7 +865,7 @@ static int create_virtqueue(struct mlx5_vdpa_net *ndev, struct mlx5_vdpa_virtqueMLX5_SET64 (virtio_q, vq_ctx, desc_addr, mvq->desc_addr);MLX5_SET64 (virtio_q, vq_ctx, used_addr, mvq->device_addr);MLX5_SET64 (virtio_q, vq_ctx, available_addr, mvq->driver_addr); -MLX5_SET (virtio_q, vq_ctx, virtio_q_mkey, ndev->mvdev.mr.mkey.key); +MLX5_SET (virtio_q, vq_ctx, virtio_q_mkey, ndev->mvdev.mr.mkey);MLX5_SET (virtio_q, vq_ctx, umem_1_id, mvq->umem1.id);MLX5_SET (virtio_q, vq_ctx, umem_1_size, mvq->umem1.size);MLX5_SET (virtio_q, vq_ctx, umem_2_id, mvq->umem2.id);
include/linux/mlx5/driver.h +6 -8
@@ -650,7 +650,7 @@ struct mlx5e_resources {struct mlx5e_hw_objs {u32 pdn;struct mlx5_td td; -struct mlx5_core_mkey mkey; +u32 mkey;struct mlx5_sq_bfreg bfreg; } hw_objs;struct devlink_port dl_port;
@@ -1019,13 +1019,11 @@ struct mlx5_cmd_mailbox *mlx5_alloc_cmd_mailbox_chain(struct mlx5_core_dev *dev, gfp_t flags, int npages);void mlx5_free_cmd_mailbox_chain (struct mlx5_core_dev *dev,struct mlx5_cmd_mailbox *head); -int mlx5_core_create_mkey (struct mlx5_core_dev *dev, -struct mlx5_core_mkey *mkey, -u32 *in,int inlen); -int mlx5_core_destroy_mkey (struct mlx5_core_dev *dev, -struct mlx5_core_mkey *mkey); -int mlx5_core_query_mkey (struct mlx5_core_dev *dev,struct mlx5_core_mkey *mkey, -u32 *out,int outlen); +int mlx5_core_create_mkey (struct mlx5_core_dev *dev,u32 *mkey,u32 *in, +int inlen); +int mlx5_core_destroy_mkey (struct mlx5_core_dev *dev,u32 mkey); +int mlx5_core_query_mkey (struct mlx5_core_dev *dev,u32 mkey,u32 *out, +int outlen);int mlx5_core_alloc_pd (struct mlx5_core_dev *dev,u32 *pdn);int mlx5_core_dealloc_pd (struct mlx5_core_dev *dev,u32 pdn);int mlx5_pagealloc_init (struct mlx5_core_dev *dev);
Signature · 6 lines
2.31.1 _______________________________________________ Virtualization mailing list [email protected] https://lists.linuxfoundation.org/mailman/listinfo/virtualization
PATCH 6/7 RDMA/mlx5: Move struct mlx5_core_mkey to mlx5_ib
In reply to Leon RomanovskyFrom: Aharon Landau <[email protected]>
Move mlx5_core_mkey struct to mlx5_ib, as the mlx5_core doesn't use it at this point.
--- drivers/infiniband/hw/mlx5/devx.c | 2 +- drivers/infiniband/hw/mlx5/mlx5_ib.h | 25 +++++++++++++++++++------ drivers/infiniband/hw/mlx5/mr.c | 12 +++++------- drivers/infiniband/hw/mlx5/odp.c | 8 ++++---- include/linux/mlx5/driver.h | 13 ------------- 5 files changed, 29 insertions(+), 31 deletions(-)
drivers/infiniband/hw/mlx5/devx.c +1 -1
@@ -1293,7 +1293,7 @@ static int devx_handle_mkey_indirect(struct devx_obj *obj, void *in, void *out) { struct mlx5_ib_devx_mr *devx_mr = &obj->devx_mr; -struct mlx5_core_mkey *mkey; +struct mlx5_ib_mkey *mkey;void *mkc;u8 key;
drivers/infiniband/hw/mlx5/mlx5_ib.h +19 -6
@@ -628,6 +628,19 @@ struct mlx5_user_mmap_entry {u32 page_idx; }; +enum mlx5_mkey_type { +MLX5_MKEY_MR =1 , +MLX5_MKEY_MW , +MLX5_MKEY_INDIRECT_DEVX , +}; + +struct mlx5_ib_mkey { +u32 key; +enum mlx5_mkey_type type; +struct wait_queue_head wait; +refcount_t usecount; +}; +#define MLX5_IB_MTT_PRESENT (MLX5_IB_MTT_READ | MLX5_IB_MTT_WRITE)#define MLX5_IB_DM_MEMIC_ALLOWED_ACCESS (IB_ACCESS_LOCAL_WRITE |\
@@ -646,7 +659,7 @@ struct mlx5_user_mmap_entry {struct mlx5_ib_mr {struct ib_mr ibmr; -struct mlx5_core_mkey mmkey; +struct mlx5_ib_mkey mmkey;/* User MR data */ struct mlx5_cache_ent *cache_ent;
@@ -722,12 +735,12 @@ static inline bool is_dmabuf_mr(struct mlx5_ib_mr *mr)struct mlx5_ib_mw {struct ib_mw ibmw; -struct mlx5_core_mkey mmkey; +struct mlx5_ib_mkey mmkey;int ndescs; };struct mlx5_ib_devx_mr { -struct mlx5_core_mkey mmkey; +struct mlx5_ib_mkey mmkey;int ndescs; };
@@ -1605,7 +1618,7 @@ static inline bool mlx5_ib_can_reconfig_with_umr(struct mlx5_ib_dev *dev, }static inline int mlx5r_store_odp_mkey (struct mlx5_ib_dev *dev, -struct mlx5_core_mkey *mmkey) +struct mlx5_ib_mkey *mmkey) {refcount_set (&mmkey->usecount,1 );
@@ -1614,14 +1627,14 @@ static inline int mlx5r_store_odp_mkey(struct mlx5_ib_dev *dev, }/* deref an mkey that can participate in ODP flow */ -static inline void mlx5r_deref_odp_mkey (struct mlx5_core_mkey *mmkey) +static inline void mlx5r_deref_odp_mkey (struct mlx5_ib_mkey *mmkey) {if (refcount_dec_and_test (&mmkey->usecount))wake_up (&mmkey->wait); }/* deref an mkey that can participate in ODP flow and wait for relese */ -static inline void mlx5r_deref_wait_odp_mkey (struct mlx5_core_mkey *mmkey) +static inline void mlx5r_deref_wait_odp_mkey (struct mlx5_ib_mkey *mmkey) {mlx5r_deref_odp_mkey (mmkey);wait_event (mmkey->wait,refcount_read (&mmkey->usecount) ==0 );
drivers/infiniband/hw/mlx5/mr.c +5 -7
@@ -89,9 +89,8 @@ static void set_mkc_access_pd_addr_fields(void *mkc, int acc, u64 start_addr,MLX5_SET64 (mkc, mkc, start_addr, start_addr); } -static void -assign_mkey_variant (struct mlx5_ib_dev *dev,struct mlx5_core_mkey *mkey, -u32 *in) +static void assign_mkey_variant (struct mlx5_ib_dev *dev, +struct mlx5_ib_mkey *mkey,u32 *in) {u8 key =atomic_inc_return (&dev->mkey_var);void *mkc;
@@ -101,9 +100,8 @@ assign_mkey_variant(struct mlx5_ib_dev *dev, struct mlx5_core_mkey *mkey, mkey->key = key; } -static int -mlx5_ib_create_mkey (struct mlx5_ib_dev *dev,struct mlx5_core_mkey *mkey, -u32 *in,int inlen) +static int mlx5_ib_create_mkey (struct mlx5_ib_dev *dev, +struct mlx5_ib_mkey *mkey,u32 *in,int inlen) {int ret;
@@ -117,7 +115,7 @@ mlx5_ib_create_mkey(struct mlx5_ib_dev *dev, struct mlx5_core_mkey *mkey,static int mlx5_ib_create_mkey_cb (struct mlx5_ib_dev *dev, -struct mlx5_core_mkey *mkey, +struct mlx5_ib_mkey *mkey,struct mlx5_async_ctx *async_ctx,u32 *in,int inlen,u32 *out,int outlen,struct mlx5_async_work *context)
drivers/infiniband/hw/mlx5/odp.c +4 -4
@@ -788,7 +788,7 @@ struct pf_frame {int depth; }; -static bool mkey_is_eq (struct mlx5_core_mkey *mmkey,u32 key) +static bool mkey_is_eq (struct mlx5_ib_mkey *mmkey,u32 key) {if (!mmkey)return false;
@@ -797,7 +797,7 @@ static bool mkey_is_eq(struct mlx5_core_mkey *mmkey, u32 key)return mmkey->key == key; } -static int get_indirect_num_descs (struct mlx5_core_mkey *mmkey) +static int get_indirect_num_descs (struct mlx5_ib_mkey *mmkey) {struct mlx5_ib_mw *mw;struct mlx5_ib_devx_mr *devx_mr;
@@ -831,7 +831,7 @@ static int pagefault_single_data_segment(struct mlx5_ib_dev *dev, {int npages =0 , ret, i, outlen, cur_outlen =0 , depth =0 ;struct pf_frame *head =NULL , *frame; -struct mlx5_core_mkey *mmkey; +struct mlx5_ib_mkey *mmkey;struct mlx5_ib_mr *mr;struct mlx5_klm *pklm;u32 *out =NULL ;
@@ -1703,8 +1703,8 @@ get_prefetchable_mr(struct ib_pd *pd, enum ib_uverbs_advise_mr_advice advice, u32 lkey) {struct mlx5_ib_dev *dev =to_mdev (pd->device); -struct mlx5_core_mkey *mmkey;struct mlx5_ib_mr *mr =NULL ; +struct mlx5_ib_mkey *mmkey;xa_lock (&dev->odp_mkeys); mmkey =xa_load (&dev->odp_mkeys,mlx5_base_mkey (lkey));
include/linux/mlx5/driver.h +0 -13
@@ -357,19 +357,6 @@ struct mlx5_core_sig_ctx {u32 sigerr_count; }; -enum { -MLX5_MKEY_MR =1 , -MLX5_MKEY_MW , -MLX5_MKEY_INDIRECT_DEVX , -}; - -struct mlx5_core_mkey { -u32 key; -u32 type; -struct wait_queue_head wait; -refcount_t usecount; -}; -#define MLX5_24BIT_MASK ((1 << 24) - 1)enum mlx5_res_type {
Signature · 6 lines
2.31.1 _______________________________________________ Virtualization mailing list [email protected] https://lists.linuxfoundation.org/mailman/listinfo/virtualization
Jason Gunthorpe
maintainerRe: [PATCH mlx5-next 6/7] RDMA/mlx5: Move struct mlx5_core_mkey to mlx5_ib
Quoted 36 lines · Leon Romanovsky
From: Aharon Landau <[email protected]>
Move
mlx5_core_mkeystruct tomlx5_ib, as themlx5_coredoesn't use it at this point.Signed-off-by Aharon Landau <[email protected]>Reviewed-by Shay Drory <[email protected]>Signed-off-by Leon Romanovsky <[email protected]>drivers/infiniband/hw/mlx5/devx.c | 2 +- drivers/infiniband/hw/mlx5/mlx5_ib.h | 25 +++++++++++++++++++------ drivers/infiniband/hw/mlx5/mr.c | 12 +++++------- drivers/infiniband/hw/mlx5/odp.c | 8 ++++---- include/linux/mlx5/driver.h | 13 ------------- 5 files changed, 29 insertions(+), 31 deletions(-)drivers/infiniband/hw/mlx5/devx.c +2
-1+++ b/drivers/infiniband/hw/mlx5/devx.c@@ -1293,7 +1293,7 @@ static int devx_handle_mkey_indirect(struct devx_obj *obj, void *in, void *out) { struct mlx5_ib_devx_mr *devx_mr = &obj->devx_mr; -struct mlx5_core_mkey *mkey; +struct mlx5_ib_mkey *mkey;void *mkc;u8 key;drivers/infiniband/hw/mlx5/mlx5_ib.h +3
-0+++ b/drivers/infiniband/hw/mlx5/mlx5_ib.h@@ -628,6 +628,19 @@ struct mlx5_user_mmap_entry {u32 page_idx; }; +enum mlx5_mkey_type { +MLX5_MKEY_MR =1 ,
drivers/infiniband/hw/mlx5/mlx5_ib.h struct mlx5_user_mmap_entry { · line 642
Quoted 10 lines
drivers/infiniband/hw/mlx5/mlx5_ib.h +10
-0+MLX5_MKEY_MW , + MLX5_MKEY_INDIRECT_DEVX, +}; + +struct mlx5_ib_mkey { +u32 key; +enum mlx5_mkey_type type; +struct wait_queue_head wait; +refcount_t usecount; +};
Please drop the horizontal whitespace when you move the struct
Jason
PATCH 7/7 RDMA/mlx5: Attach ndescs to mlx5_ib_mkey
In reply to Leon RomanovskyFrom: Aharon Landau <[email protected]>
Generalize the use of ndescs by adding it to mlx5_ib_mkey.
--- drivers/infiniband/hw/mlx5/devx.c | 10 ++++------ drivers/infiniband/hw/mlx5/devx.h | 2 +- drivers/infiniband/hw/mlx5/mlx5_ib.h | 8 +------- drivers/infiniband/hw/mlx5/mr.c | 24 ++++++++++++------------ drivers/infiniband/hw/mlx5/odp.c | 22 ++-------------------- drivers/infiniband/hw/mlx5/wr.c | 10 +++++----- 6 files changed, 25 insertions(+), 51 deletions(-)
drivers/infiniband/hw/mlx5/devx.c +4 -6
@@ -1292,18 +1292,16 @@ static int devx_handle_mkey_indirect(struct devx_obj *obj,struct mlx5_ib_dev *dev, void *in, void *out) { - struct mlx5_ib_devx_mr *devx_mr = &obj->devx_mr; -struct mlx5_ib_mkey *mkey; + struct mlx5_ib_mkey *mkey = &obj->mkey;void *mkc;u8 key; - mkey = &devx_mr->mmkey; mkc =MLX5_ADDR_OF (create_mkey_in, in, memory_key_mkey_entry); key =MLX5_GET (mkc, mkc, mkey_7_0); mkey->key =mlx5_idx_to_mkey (MLX5_GET (create_mkey_out, out, mkey_index)) | key; mkey->type =MLX5_MKEY_INDIRECT_DEVX ; - devx_mr->ndescs =MLX5_GET (mkc, mkc, translations_octword_size); + mkey->ndescs =MLX5_GET (mkc, mkc, translations_octword_size);init_waitqueue_head (&mkey->wait);return mlx5r_store_odp_mkey (dev, mkey);
@@ -1381,13 +1379,13 @@ static int devx_obj_cleanup(struct ib_uobject *uobject, dev =mlx5_udata_to_mdev (&attrs->driver_udata);if (obj->flags &DEVX_OBJ_FLAGS_INDIRECT_MKEY &&xa_erase (&obj->ib_dev->odp_mkeys, -mlx5_base_mkey (obj->devx_mr.mmkey.key))) +mlx5_base_mkey (obj->mkey.key)))/* * The pagefault_single_data_segment() does commands against * the mmkey, we must wait for that to stop before freeing the * mkey, as another allocation could get the same mkey #. */ -mlx5r_deref_wait_odp_mkey (&obj->devx_mr.mmkey); +mlx5r_deref_wait_odp_mkey (&obj->mkey);if (obj->flags &DEVX_OBJ_FLAGS_DCT ) ret =mlx5_core_destroy_dct (obj->ib_dev, &obj->core_dct);
drivers/infiniband/hw/mlx5/devx.h +1 -1
@@ -16,7 +16,7 @@ struct devx_obj {u32 dinbox[MLX5_MAX_DESTROY_INBOX_SIZE_DW ];u32 flags;union { -struct mlx5_ib_devx_mr devx_mr; +struct mlx5_ib_mkey mkey;struct mlx5_core_dct core_dct;struct mlx5_core_cq core_cq;u32 flow_counter_bulk_size;
drivers/infiniband/hw/mlx5/mlx5_ib.h +1 -7
@@ -637,6 +637,7 @@ enum mlx5_mkey_type {struct mlx5_ib_mkey {u32 key;enum mlx5_mkey_type type; +int ndescs;struct wait_queue_head wait;refcount_t usecount; };
@@ -681,7 +682,6 @@ struct mlx5_ib_mr {void *descs_alloc;dma_addr_t desc_map;int max_descs; -int ndescs;int desc_size;int access_mode;
@@ -736,12 +736,6 @@ static inline bool is_dmabuf_mr(struct mlx5_ib_mr *mr)struct mlx5_ib_mw {struct ib_mw ibmw;struct mlx5_ib_mkey mmkey; -int ndescs; -}; - -struct mlx5_ib_devx_mr { -struct mlx5_ib_mkey mmkey; -int ndescs; };struct mlx5_ib_umr_context {
drivers/infiniband/hw/mlx5/mr.c +12 -12
@@ -2335,7 +2335,7 @@ int mlx5_ib_alloc_mw(struct ib_mw *ibmw, struct ib_udata *udata) mw->mmkey.type =MLX5_MKEY_MW ; ibmw->rkey = mw->mmkey.key; - mw->ndescs = ndescs; + mw->mmkey.ndescs = ndescs; resp.response_length =min (offsetofend (typeof (resp), response_length), udata->outlen);
@@ -2431,7 +2431,7 @@ mlx5_ib_map_pa_mr_sg_pi(struct ib_mr *ibmr, struct scatterlist *data_sg, mr->meta_length =0 ;if (data_sg_nents ==1 ) { n++; - mr->ndescs =1 ; + mr->mmkey.ndescs =1 ;if (data_sg_offset) sg_offset = *data_sg_offset; mr->data_length =sg_dma_len (data_sg) - sg_offset;
@@ -2484,7 +2484,7 @@ mlx5_ib_sg_to_klms(struct mlx5_ib_mr *mr,if (sg_offset_p) *sg_offset_p = sg_offset; - mr->ndescs = i; + mr->mmkey.ndescs = i; mr->data_length = mr->ibmr.length;if (meta_sg_nents) {
@@ -2517,11 +2517,11 @@ static int mlx5_set_page(struct ib_mr *ibmr, u64 addr)struct mlx5_ib_mr *mr =to_mmr (ibmr);__be64 *descs; -if (unlikely (mr->ndescs == mr->max_descs)) +if (unlikely (mr->mmkey.ndescs == mr->max_descs))return -ENOMEM ; descs = mr->descs; - descs[mr->ndescs++] =cpu_to_be64 (addr |MLX5_EN_RD |MLX5_EN_WR ); + descs[mr->mmkey.ndescs++] =cpu_to_be64 (addr |MLX5_EN_RD |MLX5_EN_WR );return 0 ; }
@@ -2531,11 +2531,11 @@ static int mlx5_set_page_pi(struct ib_mr *ibmr, u64 addr)struct mlx5_ib_mr *mr =to_mmr (ibmr);__be64 *descs; -if (unlikely (mr->ndescs + mr->meta_ndescs == mr->max_descs)) +if (unlikely (mr->mmkey.ndescs + mr->meta_ndescs == mr->max_descs))return -ENOMEM ; descs = mr->descs; - descs[mr->ndescs + mr->meta_ndescs++] = + descs[mr->mmkey.ndescs + mr->meta_ndescs++] =cpu_to_be64 (addr |MLX5_EN_RD |MLX5_EN_WR );return 0 ;
@@ -2551,7 +2551,7 @@ mlx5_ib_map_mtt_mr_sg_pi(struct ib_mr *ibmr, struct scatterlist *data_sg,struct mlx5_ib_mr *pi_mr = mr->mtt_mr;int n; - pi_mr->ndescs =0 ; + pi_mr->mmkey.ndescs =0 ; pi_mr->meta_ndescs =0 ; pi_mr->meta_length =0 ;
@@ -2585,7 +2585,7 @@ mlx5_ib_map_mtt_mr_sg_pi(struct ib_mr *ibmr, struct scatterlist *data_sg,* metadata offset at the first metadata page */ pi_mr->pi_iova = (iova & page_mask) + - pi_mr->ndescs * ibmr->page_size + + pi_mr->mmkey.ndescs * ibmr->page_size + (pi_mr->ibmr.iova & ~page_mask);/* * In order to use one MTT MR for data and metadata, we register
@@ -2616,7 +2616,7 @@ mlx5_ib_map_klm_mr_sg_pi(struct ib_mr *ibmr, struct scatterlist *data_sg,struct mlx5_ib_mr *pi_mr = mr->klm_mr;int n; - pi_mr->ndescs =0 ; + pi_mr->mmkey.ndescs =0 ; pi_mr->meta_ndescs =0 ; pi_mr->meta_length =0 ;
@@ -2651,7 +2651,7 @@ int mlx5_ib_map_mr_sg_pi(struct ib_mr *ibmr, struct scatterlist *data_sg,WARN_ON (ibmr->type !=IB_MR_TYPE_INTEGRITY ); - mr->ndescs =0 ; + mr->mmkey.ndescs =0 ; mr->data_length =0 ; mr->data_iova =0 ; mr->meta_ndescs =0 ;
@@ -2707,7 +2707,7 @@ int mlx5_ib_map_mr_sg(struct ib_mr *ibmr, struct scatterlist *sg, int sg_nents,struct mlx5_ib_mr *mr =to_mmr (ibmr);int n; - mr->ndescs =0 ; + mr->mmkey.ndescs =0 ; ib_dma_sync_single_for_cpu(ibmr->device, mr->desc_map, mr->desc_size * mr->max_descs,
drivers/infiniband/hw/mlx5/odp.c +2 -20
@@ -797,21 +797,6 @@ static bool mkey_is_eq(struct mlx5_ib_mkey *mmkey, u32 key)return mmkey->key == key; } -static int get_indirect_num_descs (struct mlx5_ib_mkey *mmkey) -{ -struct mlx5_ib_mw *mw; -struct mlx5_ib_devx_mr *devx_mr; - -if (mmkey->type ==MLX5_MKEY_MW ) { - mw = container_of(mmkey, struct mlx5_ib_mw, mmkey); -return mw->ndescs; - } - - devx_mr = container_of(mmkey, struct mlx5_ib_devx_mr, - mmkey); -return devx_mr->ndescs; -} -/* * Handle a single data segment in a page-fault WQE or RDMA region. *
@@ -836,7 +821,6 @@ static int pagefault_single_data_segment(struct mlx5_ib_dev *dev,struct mlx5_klm *pklm;u32 *out =NULL ;size_t offset; -int ndescs; io_virt += *bytes_committed; bcnt -= *bytes_committed;
@@ -885,8 +869,6 @@ static int pagefault_single_data_segment(struct mlx5_ib_dev *dev,case MLX5_MKEY_MW :case MLX5_MKEY_INDIRECT_DEVX : - ndescs =get_indirect_num_descs (mmkey); -if (depth >=MLX5_CAP_GEN (dev->mdev, max_indirection)) {mlx5_ib_dbg (dev,"indirection level exceeded\n" ); ret = -EFAULT ;
@@ -894,7 +876,7 @@ static int pagefault_single_data_segment(struct mlx5_ib_dev *dev, } outlen =MLX5_ST_SZ_BYTES (query_mkey_out) + -sizeof (*pklm) * (ndescs -2 ); +sizeof (*pklm) * (mmkey->ndescs -2 );if (outlen > cur_outlen) {kfree (out);
@@ -916,7 +898,7 @@ static int pagefault_single_data_segment(struct mlx5_ib_dev *dev, offset = io_virt -MLX5_GET64 (query_mkey_out, out, memory_key_mkey_entry.start_addr); -for (i =0 ; bcnt && i < ndescs; i++, pklm++) { +for (i =0 ; bcnt && i < mmkey->ndescs; i++, pklm++) {if (offset >=be32_to_cpu (pklm->bcount)) { offset -=be32_to_cpu (pklm->bcount);continue ;
drivers/infiniband/hw/mlx5/wr.c +5 -5
@@ -217,7 +217,7 @@ static __be64 sig_mkey_mask(void)static void set_reg_umr_seg (struct mlx5_wqe_umr_ctrl_seg *umr,struct mlx5_ib_mr *mr,u8 flags,bool atomic) { -int size = (mr->ndescs + mr->meta_ndescs) * mr->desc_size; +int size = (mr->mmkey.ndescs + mr->meta_ndescs) * mr->desc_size;memset (umr,0 ,sizeof (*umr));
@@ -374,7 +374,7 @@ static void set_reg_mkey_seg(struct mlx5_mkey_seg *seg,struct mlx5_ib_mr *mr, u32 key, int access) { - int ndescs = ALIGN(mr->ndescs + mr->meta_ndescs, 8) >> 1; + int ndescs = ALIGN(mr->mmkey.ndescs + mr->meta_ndescs, 8) >> 1;memset (seg,0 ,sizeof (*seg));
@@ -439,7 +439,7 @@ static void set_reg_data_seg(struct mlx5_wqe_data_seg *dseg,struct mlx5_ib_mr *mr, struct mlx5_ib_pd *pd) { - int bcount = mr->desc_size * (mr->ndescs + mr->meta_ndescs); + int bcount = mr->desc_size * (mr->mmkey.ndescs + mr->meta_ndescs); dseg->addr =cpu_to_be64 (mr->desc_map); dseg->byte_count =cpu_to_be32 (ALIGN (bcount,64 ));
@@ -861,7 +861,7 @@ static int set_reg_wr(struct mlx5_ib_qp *qp,struct mlx5_ib_mr *mr =to_mmr (wr->mr);struct mlx5_ib_pd *pd =to_mpd (qp->ibqp.pd);struct mlx5_ib_dev *dev =to_mdev (pd->ibpd.device); -int mr_list_size = (mr->ndescs + mr->meta_ndescs) * mr->desc_size; +int mr_list_size = (mr->mmkey.ndescs + mr->meta_ndescs) * mr->desc_size;bool umr_inline = mr_list_size <=MLX5_IB_SQ_UMR_INLINE_THRESHOLD ;bool atomic = wr->access &IB_ACCESS_REMOTE_ATOMIC ;u8 flags =0 ;
@@ -1111,7 +1111,7 @@ static int handle_reg_mr_integrity(struct mlx5_ib_dev *dev,memset (&pa_pi_mr,0 ,sizeof (struct mlx5_ib_mr ));/* No UMR, use local_dma_lkey */ pa_pi_mr.ibmr.lkey = mr->ibmr.pd->local_dma_lkey; - pa_pi_mr.ndescs = mr->ndescs; + pa_pi_mr.mmkey.ndescs = mr->mmkey.ndescs; pa_pi_mr.data_length = mr->data_length; pa_pi_mr.data_iova = mr->data_iova;if (mr->meta_ndescs) {
Signature · 6 lines
2.31.1 _______________________________________________ Virtualization mailing list [email protected] https://lists.linuxfoundation.org/mailman/listinfo/virtualization
Jason Gunthorpe
maintainerRe: [PATCH mlx5-next 7/7] RDMA/mlx5: Attach ndescs to mlx5_ib_mkey
drivers/infiniband/hw/mlx5/mlx5_ib.h enum mlx5_mkey_type { · line 640
Quoted 8 lines · Leon Romanovsky
drivers/infiniband/hw/mlx5/mlx5_ib.h +2
-0+++ b/drivers/infiniband/hw/mlx5/mlx5_ib.h@@ -637,6 +637,7 @@ enum mlx5_mkey_type {struct mlx5_ib_mkey {u32 key;enum mlx5_mkey_type type; +int ndescs;
unsigned int
Jason
Quoted 7 lines · Leon Romanovsky
From: Leon Romanovsky <[email protected]>
Hi,
This is cleanup series of mlx5_* MR mkey management.
Thanks
Looks fine superficially
Quoted 38 lines
Aharon Landau (7):
RDMA/mlx5: Don't setesc_sizein user mr RDMA/mlx5: Remove iova from structmlx5_core_mkeyRDMA/mlx5: Remove size from structmlx5_core_mkeyRDMA/mlx5: Remove pd from structmlx5_core_mkeyRDMA/mlx5: Replace structmlx5_core_mkeyby u32 key RDMA/mlx5: Move structmlx5_core_mkeytomlx5_ibRDMA/mlx5: Attach ndescs tomlx5_ib_mkeydrivers/infiniband/hw/mlx5/devx.c | 13 +-- drivers/infiniband/hw/mlx5/devx.h | 2 +- drivers/infiniband/hw/mlx5/mlx5_ib.h | 31 ++++--- drivers/infiniband/hw/mlx5/mr.c | 82 +++++++++---------- drivers/infiniband/hw/mlx5/odp.c | 38 +++------ drivers/infiniband/hw/mlx5/wr.c | 10 +-- .../mellanox/mlx5/core/diag/fw_tracer.c | 6 +- .../mellanox/mlx5/core/diag/fw_tracer.h | 2 +- .../mellanox/mlx5/core/diag/rsc_dump.c | 10 +-- drivers/net/ethernet/mellanox/mlx5/core/en.h | 2 +- .../net/ethernet/mellanox/mlx5/core/en/ptp.c | 2 +- .../net/ethernet/mellanox/mlx5/core/en/trap.c | 2 +- .../ethernet/mellanox/mlx5/core/en_common.c | 6 +- .../net/ethernet/mellanox/mlx5/core/en_main.c | 13 ++- .../ethernet/mellanox/mlx5/core/fpga/conn.c | 10 +-- .../ethernet/mellanox/mlx5/core/fpga/core.h | 2 +- drivers/net/ethernet/mellanox/mlx5/core/mr.c | 27 +++--- .../mellanox/mlx5/core/steering/dr_icm_pool.c | 10 +-- .../mellanox/mlx5/core/steering/dr_send.c | 11 ++- .../mellanox/mlx5/core/steering/dr_types.h | 2 +- drivers/vdpa/mlx5/core/mlx5_vdpa.h | 8 +- drivers/vdpa/mlx5/core/mr.c | 8 +- drivers/vdpa/mlx5/core/resources.c | 13 +-- drivers/vdpa/mlx5/net/mlx5_vnet.c | 2 +- include/linux/mlx5/driver.h | 30 ++----- 25 files changed, 147 insertions(+), 195 deletions(-)Signature · 1 line
2.31.1
Leon Romanovsky
maintainerQuoted 10 lines · Leon Romanovsky
From: Leon Romanovsky <[email protected]>
Hi,
This is cleanup series of mlx5_* MR mkey management.
Thanks
Aharon Landau (7):
RDMA/mlx5: Don't setesc_sizein user mr
^^^^ this typo, I will fix when apply to mmlx5-next.
Thanks
Quoted 41 lines
RDMA/mlx5: Remove iova from struct
mlx5_core_mkeyRDMA/mlx5: Remove size from structmlx5_core_mkeyRDMA/mlx5: Remove pd from structmlx5_core_mkeyRDMA/mlx5: Replace structmlx5_core_mkeyby u32 key RDMA/mlx5: Move structmlx5_core_mkeytomlx5_ibRDMA/mlx5: Attach ndescs tomlx5_ib_mkeydrivers/infiniband/hw/mlx5/devx.c | 13 +-- drivers/infiniband/hw/mlx5/devx.h | 2 +- drivers/infiniband/hw/mlx5/mlx5_ib.h | 31 ++++--- drivers/infiniband/hw/mlx5/mr.c | 82 +++++++++---------- drivers/infiniband/hw/mlx5/odp.c | 38 +++------ drivers/infiniband/hw/mlx5/wr.c | 10 +-- .../mellanox/mlx5/core/diag/fw_tracer.c | 6 +- .../mellanox/mlx5/core/diag/fw_tracer.h | 2 +- .../mellanox/mlx5/core/diag/rsc_dump.c | 10 +-- drivers/net/ethernet/mellanox/mlx5/core/en.h | 2 +- .../net/ethernet/mellanox/mlx5/core/en/ptp.c | 2 +- .../net/ethernet/mellanox/mlx5/core/en/trap.c | 2 +- .../ethernet/mellanox/mlx5/core/en_common.c | 6 +- .../net/ethernet/mellanox/mlx5/core/en_main.c | 13 ++- .../ethernet/mellanox/mlx5/core/fpga/conn.c | 10 +-- .../ethernet/mellanox/mlx5/core/fpga/core.h | 2 +- drivers/net/ethernet/mellanox/mlx5/core/mr.c | 27 +++--- .../mellanox/mlx5/core/steering/dr_icm_pool.c | 10 +-- .../mellanox/mlx5/core/steering/dr_send.c | 11 ++- .../mellanox/mlx5/core/steering/dr_types.h | 2 +- drivers/vdpa/mlx5/core/mlx5_vdpa.h | 8 +- drivers/vdpa/mlx5/core/mr.c | 8 +- drivers/vdpa/mlx5/core/resources.c | 13 +-- drivers/vdpa/mlx5/net/mlx5_vnet.c | 2 +- include/linux/mlx5/driver.h | 30 ++----- 25 files changed, 147 insertions(+), 195 deletions(-)Signature · 6 lines
2.31.1 _______________________________________________ Virtualization mailing list [email protected] https://lists.linuxfoundation.org/mailman/listinfo/virtualization
Jason Gunthorpe
maintainerQuoted 10 lines · Leon Romanovsky
From: Leon Romanovsky <[email protected]>
Hi,
This is cleanup series of mlx5_* MR mkey management.
Thanks
Aharon Landau (7):
RDMA/mlx5: Don't setesc_sizein user mr
Please sent just this patch to -rc after modifying as I noted, don't put this in mlx5-next
Quoted 6 lines
RDMA/mlx5: Remove iova from struct
mlx5_core_mkeyRDMA/mlx5: Remove size from structmlx5_core_mkeyRDMA/mlx5: Remove pd from structmlx5_core_mkeyRDMA/mlx5: Replace structmlx5_core_mkeyby u32 key RDMA/mlx5: Move structmlx5_core_mkeytomlx5_ibRDMA/mlx5: Attach ndescs tomlx5_ib_mkey
It seems fine to me, other than the little notes, a V2 can go to mlx5-next
Jason
Leon Romanovsky
AppliedQuoted 22 lines · Jason Gunthorpe
Quoted 10 lines · Leon Romanovsky
From: Leon Romanovsky <[email protected]>
Hi,
This is cleanup series of mlx5_* MR mkey management.
Thanks
Aharon Landau (7):
RDMA/mlx5: Don't setesc_sizein user mrPlease sent just this patch to -rc after modifying as I noted, don't put this in mlx5-next
Quoted 6 lines
RDMA/mlx5: Remove iova from struct
mlx5_core_mkeyRDMA/mlx5: Remove size from structmlx5_core_mkeyRDMA/mlx5: Remove pd from structmlx5_core_mkeyRDMA/mlx5: Replace structmlx5_core_mkeyby u32 key RDMA/mlx5: Move structmlx5_core_mkeytomlx5_ibRDMA/mlx5: Attach ndescs tomlx5_ib_mkey
Quoted 2 lines
It seems fine to me, other than the little notes, a V2 can go to mlx5-next
Applied to vfio-next, to serve as a basis for live migration patches.
https://lore.kernel.org/kvm/[email protected]/T/#m89f4f0ec4baddeb2828a2b38dcbbd6900009fb83
ae0579acde81 RDMA/mlx5: Attach ndescs to mlx5_ib_mkey 4123bfb0b28b RDMA/mlx5: Move struct mlx5_core_mkey to mlx5_ib 83fec3f12a59 RDMA/mlx5: Replace struct mlx5_core_mkey by u32 key c64674168b6a RDMA/mlx5: Remove pd from struct mlx5_core_mkey 062fd731e51e RDMA/mlx5: Remove size from struct mlx5_core_mkey cf6a8b1b24d6 RDMA/mlx5: Remove iova from struct mlx5_core_mkey
https://git.kernel.org/pub/scm/linux/kernel/git/mellanox/linux.git/log/?h=vfio-next
Thanks
Quoted 2 lines
Jason