Skip to content

Commit f3f911f

Browse files
authored
Merge pull request #9743 from roiedanino/memic/perftest_failures
UCT/IB/MLX5/DV: fixed memic iova in ksm registration
2 parents fe0b074 + 29fcd3f commit f3f911f

1 file changed

Lines changed: 11 additions & 10 deletions

File tree

src/uct/ib/mlx5/dv/ib_mlx5dv_md.c

Lines changed: 11 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -242,7 +242,7 @@ static ucs_status_t uct_ib_mlx5_devx_reg_ksm_data_addr(
242242
* that were registered in single-threaded mode.
243243
*/
244244
static ucs_status_t uct_ib_mlx5_devx_reg_ksm_data_contig(
245-
uct_ib_mlx5_md_t *md, void *address, uint32_t iova_offset, int atomic,
245+
uct_ib_mlx5_md_t *md, void *address, uint64_t iova, int atomic,
246246
uint32_t mkey_index, const char *reason, uct_ib_mlx5_devx_mr_t *mr,
247247
struct mlx5dv_devx_obj **mr_p, uint32_t *mkey)
248248
{
@@ -255,7 +255,7 @@ static ucs_status_t uct_ib_mlx5_devx_reg_ksm_data_contig(
255255
/* FW requires indirect atomic MR address and length to be aligned
256256
* to max supported atomic argument size */
257257
ksm_address = ucs_align_down_pow2((uint64_t)address, UCT_IB_MD_MAX_MR_SIZE);
258-
ksm_iova = ksm_address + iova_offset;
258+
ksm_iova = ksm_address - (uint64_t)address + iova;
259259
ksm_length = mr_length + (uint64_t)address - ksm_address;
260260
ksm_length = ucs_align_up(ksm_length, md->super.dev.atomic_align);
261261

@@ -437,16 +437,16 @@ uct_ib_mlx5_devx_reg_ksm_data(uct_ib_mlx5_md_t *md,
437437
{
438438
uct_ib_mlx5_devx_mr_t *mr = &memh->mrs[mr_type];
439439
void *address = uct_ib_mlx5_devx_memh_base_address(memh);
440+
uint64_t iova = (uint64_t)memh->address + iova_offset;
440441

441442
if (memh->super.flags & UCT_IB_MEM_MULTITHREADED) {
442-
return uct_ib_mlx5_devx_reg_ksm_data_mt(md, address,
443-
(uint64_t)address + iova_offset,
444-
atomic, mkey_index, reason,
443+
return uct_ib_mlx5_devx_reg_ksm_data_mt(md, address, iova, atomic,
444+
mkey_index, reason,
445445
mr->ksm_data, mr_p, mkey);
446446
} else {
447-
return uct_ib_mlx5_devx_reg_ksm_data_contig(md, address, iova_offset,
448-
atomic, mkey_index, reason,
449-
mr, mr_p, mkey);
447+
return uct_ib_mlx5_devx_reg_ksm_data_contig(md, address, iova, atomic,
448+
mkey_index, reason, mr,
449+
mr_p, mkey);
450450
}
451451
}
452452

@@ -651,7 +651,7 @@ static void uct_ib_mlx5_devx_reg_symmetric(uct_ib_mlx5_md_t *md,
651651
/* Best effort, only allocate in the range below the atomic keys. */
652652
while (md->smkey_index < md->super.mkey_by_name_reserve.size) {
653653
status = uct_ib_mlx5_devx_reg_ksm_data_contig(
654-
md, address, 0,
654+
md, address, (uint64_t)address,
655655
(memh->super.flags & UCT_IB_MEM_ACCESS_REMOTE_ATOMIC),
656656
md->super.mkey_by_name_reserve.base + md->smkey_index,
657657
"symmetric-key", &memh->mrs[UCT_IB_MR_DEFAULT], &smkey_mr,
@@ -2116,7 +2116,8 @@ UCS_PROFILE_FUNC_ALWAYS(ucs_status_t, uct_ib_mlx5_devx_reg_exported_key,
21162116
}
21172117

21182118
ucs_assert(!(memh->super.flags & UCT_IB_MEM_MULTITHREADED));
2119-
status = uct_ib_mlx5_devx_reg_ksm_data_contig(md, memh->address, 0, 0, 0,
2119+
status = uct_ib_mlx5_devx_reg_ksm_data_contig(md, memh->address,
2120+
(uint64_t)memh->address, 0, 0,
21202121
"exported-key",
21212122
&memh->mrs[UCT_IB_MR_DEFAULT],
21222123
&cross_mr, &exported_lkey);

0 commit comments

Comments
 (0)