RDMA/mlx5: Fix calculation of total invalidated pages
[ Upstream commit 79195147644653ebffadece31a42181e4c48c07d ]
When invalidating an address range in mlx5, there is an optimization to
do UMR operations in chunks.
Previously, the invalidation counter was incorrectly updated for the
same indexes within a chunk. Now, the invalidation counter is updated
only when a chunk is complete and mlx5r_umr_update_xlt() is called.
This ensures that the counter accurately represents the number of pages
invalidated using UMR.
Fixes: a3de94e3d6
("IB/mlx5: Introduce ODP diagnostic counters")
Signed-off-by: Chiara Meiohas <cmeiohas@nvidia.com>
Reviewed-by: Michael Guralnik <michaelgur@nvidia.com>
Link: https://patch.msgid.link/560deb2433318e5947282b070c915f3c81fef77f.1741875692.git.leon@kernel.org
Signed-off-by: Leon Romanovsky <leon@kernel.org>
Signed-off-by: Sasha Levin <sashal@kernel.org>
This commit is contained in:
parent
d5212b9964
commit
7844932c18
@ -275,9 +275,6 @@ static bool mlx5_ib_invalidate_range(struct mmu_interval_notifier *mni,
|
|||||||
blk_start_idx = idx;
|
blk_start_idx = idx;
|
||||||
in_block = 1;
|
in_block = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Count page invalidations */
|
|
||||||
invalidations += idx - blk_start_idx + 1;
|
|
||||||
} else {
|
} else {
|
||||||
u64 umr_offset = idx & umr_block_mask;
|
u64 umr_offset = idx & umr_block_mask;
|
||||||
|
|
||||||
@ -287,14 +284,19 @@ static bool mlx5_ib_invalidate_range(struct mmu_interval_notifier *mni,
|
|||||||
MLX5_IB_UPD_XLT_ZAP |
|
MLX5_IB_UPD_XLT_ZAP |
|
||||||
MLX5_IB_UPD_XLT_ATOMIC);
|
MLX5_IB_UPD_XLT_ATOMIC);
|
||||||
in_block = 0;
|
in_block = 0;
|
||||||
|
/* Count page invalidations */
|
||||||
|
invalidations += idx - blk_start_idx + 1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (in_block)
|
if (in_block) {
|
||||||
mlx5r_umr_update_xlt(mr, blk_start_idx,
|
mlx5r_umr_update_xlt(mr, blk_start_idx,
|
||||||
idx - blk_start_idx + 1, 0,
|
idx - blk_start_idx + 1, 0,
|
||||||
MLX5_IB_UPD_XLT_ZAP |
|
MLX5_IB_UPD_XLT_ZAP |
|
||||||
MLX5_IB_UPD_XLT_ATOMIC);
|
MLX5_IB_UPD_XLT_ATOMIC);
|
||||||
|
/* Count page invalidations */
|
||||||
|
invalidations += idx - blk_start_idx + 1;
|
||||||
|
}
|
||||||
|
|
||||||
mlx5_update_odp_stats(mr, invalidations, invalidations);
|
mlx5_update_odp_stats(mr, invalidations, invalidations);
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user