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 |
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 --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 >
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(-)