diff mbox series

[vfio] vfio/mlx5: Fix range size calculation upon tracker creation

Message ID 20230208152234.32370-1-yishaih@nvidia.com (mailing list archive)
State New, archived
Headers show
Series [vfio] vfio/mlx5: Fix range size calculation upon tracker creation | expand

Commit Message

Yishai Hadas Feb. 8, 2023, 3:22 p.m. UTC
Fix range size calculation to include the last byte of each range.

In addition, log round up the length of the total ranges to be stricter.

Fixes: c1d050b0d169 ("vfio/mlx5: Create and destroy page tracker object")
Signed-off-by: Yishai Hadas <yishaih@nvidia.com>
---
 drivers/vfio/pci/mlx5/cmd.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

Comments

Alex Williamson Feb. 9, 2023, 9:03 p.m. UTC | #1
On Wed, 8 Feb 2023 17:22:34 +0200
Yishai Hadas <yishaih@nvidia.com> wrote:

> Fix range size calculation to include the last byte of each range.
> 
> In addition, log round up the length of the total ranges to be stricter.
> 
> Fixes: c1d050b0d169 ("vfio/mlx5: Create and destroy page tracker object")
> Signed-off-by: Yishai Hadas <yishaih@nvidia.com>
> ---
>  drivers/vfio/pci/mlx5/cmd.c | 4 ++--
>  1 file changed, 2 insertions(+), 2 deletions(-)
> 
> diff --git a/drivers/vfio/pci/mlx5/cmd.c b/drivers/vfio/pci/mlx5/cmd.c
> index 5161d845c478..deed156e6165 100644
> --- a/drivers/vfio/pci/mlx5/cmd.c
> +++ b/drivers/vfio/pci/mlx5/cmd.c
> @@ -830,7 +830,7 @@ static int mlx5vf_create_tracker(struct mlx5_core_dev *mdev,
>  	node = interval_tree_iter_first(ranges, 0, ULONG_MAX);
>  	for (i = 0; i < num_ranges; i++) {
>  		void *addr_range_i_base = range_list_ptr + record_size * i;
> -		unsigned long length = node->last - node->start;
> +		unsigned long length = node->last - node->start + 1;
>  
>  		MLX5_SET64(page_track_range, addr_range_i_base, start_address,
>  			   node->start);
> @@ -840,7 +840,7 @@ static int mlx5vf_create_tracker(struct mlx5_core_dev *mdev,
>  	}
>  
>  	WARN_ON(node);
> -	log_addr_space_size = ilog2(total_ranges_len);
> +	log_addr_space_size = ilog2(roundup_pow_of_two(total_ranges_len));
>  	if (log_addr_space_size <
>  	    (MLX5_CAP_ADV_VIRTUALIZATION(mdev, pg_track_log_min_addr_space)) ||
>  	    log_addr_space_size >

Applied to vfio next branch for v6.3.  Thanks,

Alex
diff mbox series

Patch

diff --git a/drivers/vfio/pci/mlx5/cmd.c b/drivers/vfio/pci/mlx5/cmd.c
index 5161d845c478..deed156e6165 100644
--- a/drivers/vfio/pci/mlx5/cmd.c
+++ b/drivers/vfio/pci/mlx5/cmd.c
@@ -830,7 +830,7 @@  static int mlx5vf_create_tracker(struct mlx5_core_dev *mdev,
 	node = interval_tree_iter_first(ranges, 0, ULONG_MAX);
 	for (i = 0; i < num_ranges; i++) {
 		void *addr_range_i_base = range_list_ptr + record_size * i;
-		unsigned long length = node->last - node->start;
+		unsigned long length = node->last - node->start + 1;
 
 		MLX5_SET64(page_track_range, addr_range_i_base, start_address,
 			   node->start);
@@ -840,7 +840,7 @@  static int mlx5vf_create_tracker(struct mlx5_core_dev *mdev,
 	}
 
 	WARN_ON(node);
-	log_addr_space_size = ilog2(total_ranges_len);
+	log_addr_space_size = ilog2(roundup_pow_of_two(total_ranges_len));
 	if (log_addr_space_size <
 	    (MLX5_CAP_ADV_VIRTUALIZATION(mdev, pg_track_log_min_addr_space)) ||
 	    log_addr_space_size >