[PATCH] drm/i915/gem: Improve pfn calculation readability in vm_fault_gtt()
Cavitt, Jonathan
jonathan.cavitt at intel.com
Wed Aug 7 14:03:17 UTC 2024
-----Original Message-----
From: Andi Shyti <andi.shyti at linux.intel.com>
Sent: Wednesday, August 7, 2024 3:46 AM
To: intel-gfx <intel-gfx at lists.freedesktop.org>; dri-devel <dri-devel at lists.freedesktop.org>
Cc: Niemiec, Krzysztof <krzysztof.niemiec at intel.com>; Andi Shyti <andi.shyti at linux.intel.com>; Cavitt, Jonathan <jonathan.cavitt at intel.com>
Subject: [PATCH] drm/i915/gem: Improve pfn calculation readability in vm_fault_gtt()
>
> By moving the pfn calculation to the set_address_limits()
> function we improve code readability. This way,
> set_address_limits() is responsible for calculating all memory
> mapping paramenters: "start", "end" and "pfn".
>
> This suggestion from Jonathan was made during the review of
> commit 8bdd9ef7e9b1 ("drm/i915/gem: Fix Virtual Memory mapping
> boundaries calculation"), which I liked, but it got lost on the
> way.
>
> Suggested-by: Jonathan Cavitt <Jonathan.cavitt at intel.com>
> Signed-off-by: Andi Shyti <andi.shyti at linux.intel.com>
Reviewed-by: Jonathan Cavitt <jonathan.cavitt at intel.com>
-Jonathan Cavitt
> ---
> drivers/gpu/drm/i915/gem/i915_gem_mman.c | 20 ++++++++++++++------
> 1 file changed, 14 insertions(+), 6 deletions(-)
>
> diff --git a/drivers/gpu/drm/i915/gem/i915_gem_mman.c b/drivers/gpu/drm/i915/gem/i915_gem_mman.c
> index cac6d4184506..e9b2424156f0 100644
> --- a/drivers/gpu/drm/i915/gem/i915_gem_mman.c
> +++ b/drivers/gpu/drm/i915/gem/i915_gem_mman.c
> @@ -293,8 +293,10 @@ static vm_fault_t vm_fault_cpu(struct vm_fault *vmf)
> static void set_address_limits(struct vm_area_struct *area,
> struct i915_vma *vma,
> unsigned long obj_offset,
> + resource_size_t gmadr_start,
> unsigned long *start_vaddr,
> - unsigned long *end_vaddr)
> + unsigned long *end_vaddr,
> + unsigned long *pfn)
> {
> unsigned long vm_start, vm_end, vma_size; /* user's memory parameters */
> long start, end; /* memory boundaries */
> @@ -323,6 +325,10 @@ static void set_address_limits(struct vm_area_struct *area,
> /* Let's move back into the "<< PAGE_SHIFT" domain */
> *start_vaddr = (unsigned long)start << PAGE_SHIFT;
> *end_vaddr = (unsigned long)end << PAGE_SHIFT;
> +
> + *pfn = (gmadr_start + i915_ggtt_offset(vma)) >> PAGE_SHIFT;
> + *pfn += (*start_vaddr - area->vm_start) >> PAGE_SHIFT;
> + *pfn += obj_offset - vma->gtt_view.partial.offset;
> }
>
> static vm_fault_t vm_fault_gtt(struct vm_fault *vmf)
> @@ -441,11 +447,13 @@ static vm_fault_t vm_fault_gtt(struct vm_fault *vmf)
> if (ret)
> goto err_unpin;
>
> - set_address_limits(area, vma, obj_offset, &start, &end);
> -
> - pfn = (ggtt->gmadr.start + i915_ggtt_offset(vma)) >> PAGE_SHIFT;
> - pfn += (start - area->vm_start) >> PAGE_SHIFT;
> - pfn += obj_offset - vma->gtt_view.partial.offset;
> + /*
> + * Dump all the necessary parameters in this function to perform the
> + * arithmetic calculation for the virtual address start and end and
> + * the PFN (Page Frame Number).
> + */
> + set_address_limits(area, vma, obj_offset, ggtt->gmadr.start,
> + &start, &end, &pfn);
>
> /* Finally, remap it using the new GTT offset */
> ret = remap_io_mapping(area, start, pfn, end - start, &ggtt->iomap);
> --
> 2.45.2
>
>
More information about the dri-devel
mailing list