Series is:
Reviewed-by: Vitaly Prosyak [email protected]
Tested-by: Vitaly Prosyak [email protected]

On 2026-05-12 12:27, Christian König wrote:
> The notifier sequence must only be read once or otherwise we could work
> with invalid pages.
>
> While at it also fix the coding style, e.g. drop the pre-initialized
> return value and use the common define for 2G range.
>
> Signed-off-by: Christian König <[email protected]>
> ---
>  drivers/gpu/drm/amd/amdgpu/amdgpu_hmm.c | 16 ++++++++--------
>  1 file changed, 8 insertions(+), 8 deletions(-)
>
> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_hmm.c 
> b/drivers/gpu/drm/amd/amdgpu/amdgpu_hmm.c
> index 90d26d820bac..eb470e252399 100644
> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_hmm.c
> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_hmm.c
> @@ -51,8 +51,6 @@
>  #include "amdgpu_amdkfd.h"
>  #include "amdgpu_hmm.h"
>  
> -#define MAX_WALK_BYTE        (2UL << 30)
> -
>  /**
>   * amdgpu_hmm_invalidate_gfx - callback to notify about mm change
>   *
> @@ -170,11 +168,13 @@ int amdgpu_hmm_range_get_pages(struct 
> mmu_interval_notifier *notifier,
>                              void *owner,
>                              struct amdgpu_hmm_range *range)
>  {
> -     unsigned long end;
> +     const u64 max_bytes = SZ_2G;
> +
> +     struct hmm_range *hmm_range = &range->hmm_range;
>       unsigned long timeout;
>       unsigned long *pfns;
> -     int r = 0;
> -     struct hmm_range *hmm_range = &range->hmm_range;
> +     unsigned long end;
> +     int r;
>  
>       pfns = kvmalloc_array(npages, sizeof(*pfns), GFP_KERNEL);
>       if (unlikely(!pfns)) {
> @@ -191,8 +191,9 @@ int amdgpu_hmm_range_get_pages(struct 
> mmu_interval_notifier *notifier,
>       end = start + npages * PAGE_SIZE;
>       hmm_range->dev_private_owner = owner;
>  
> +     hmm_range->notifier_seq = mmu_interval_read_begin(notifier);
>       do {
> -             hmm_range->end = min(hmm_range->start + MAX_WALK_BYTE, end);
> +             hmm_range->end = min(hmm_range->start + max_bytes, end);
>  
>               pr_debug("hmm range: start = 0x%lx, end = 0x%lx",
>                       hmm_range->start, hmm_range->end);
> @@ -200,7 +201,6 @@ int amdgpu_hmm_range_get_pages(struct 
> mmu_interval_notifier *notifier,
>               timeout = jiffies + msecs_to_jiffies(HMM_RANGE_DEFAULT_TIMEOUT);
>  
>  retry:
> -             hmm_range->notifier_seq = mmu_interval_read_begin(notifier);
>               r = hmm_range_fault(hmm_range);
>               if (unlikely(r)) {
>                       if (r == -EBUSY && !time_after(jiffies, timeout))
> @@ -210,7 +210,7 @@ int amdgpu_hmm_range_get_pages(struct 
> mmu_interval_notifier *notifier,
>  
>               if (hmm_range->end == end)
>                       break;
> -             hmm_range->hmm_pfns += MAX_WALK_BYTE >> PAGE_SHIFT;
> +             hmm_range->hmm_pfns += max_bytes >> PAGE_SHIFT;
>               hmm_range->start = hmm_range->end;
>       } while (hmm_range->end < end);
>  

Reply via email to