Skip to content

Commit a6097e0

Browse files
siwliu-kernelmstsirkin
authored andcommitted
vdpa/mlx5: Fix oversized null mkey longer than 32bit
create_user_mr() has correct code to count the number of null keys used to fill in a hole for the memory map. However, fill_indir() does not follow the same to cap the range up to the 1GB limit correspondingly. Fill in more null keys for the gaps in between, so that null keys are correctly populated. Fixes: 94abbcc ("vdpa/mlx5: Add shared memory registration code") Cc: [email protected] Reported-by: Cong Meng <[email protected]> Signed-off-by: Si-Wei Liu <[email protected]> Signed-off-by: Dragos Tatulea <[email protected]> Acked-by: Eugenio Pérez <[email protected]> Message-Id: <[email protected]> Signed-off-by: Michael S. Tsirkin <[email protected]> Acked-by: Jason Wang <[email protected]>
1 parent 439252e commit a6097e0

File tree

1 file changed

+5
-2
lines changed
  • drivers/vdpa/mlx5/core

1 file changed

+5
-2
lines changed

drivers/vdpa/mlx5/core/mr.c

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -190,9 +190,12 @@ static void fill_indir(struct mlx5_vdpa_dev *mvdev, struct mlx5_vdpa_mr *mkey, v
190190
klm->bcount = cpu_to_be32(klm_bcount(dmr->end - dmr->start));
191191
preve = dmr->end;
192192
} else {
193+
u64 bcount = min_t(u64, dmr->start - preve, MAX_KLM_SIZE);
194+
193195
klm->key = cpu_to_be32(mvdev->res.null_mkey);
194-
klm->bcount = cpu_to_be32(klm_bcount(dmr->start - preve));
195-
preve = dmr->start;
196+
klm->bcount = cpu_to_be32(klm_bcount(bcount));
197+
preve += bcount;
198+
196199
goto again;
197200
}
198201
}

0 commit comments

Comments
 (0)