]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
drm/i915/gem: Improve pfn calculation readability in vm_fault_gtt()
authorAndi Shyti <andi.shyti@linux.intel.com>
Wed, 7 Aug 2024 10:45:53 +0000 (11:45 +0100)
committerAndi Shyti <andi.shyti@linux.intel.com>
Thu, 8 Aug 2024 09:49:27 +0000 (10:49 +0100)
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@intel.com>
Signed-off-by: Andi Shyti <andi.shyti@linux.intel.com>
Reviewed-by: Krzysztof Niemiec <krzysztof.niemiec@intel.com>
Reviewed-by: Jonathan Cavitt <jonathan.cavitt@intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20240807104553.481763-1-andi.shyti@linux.intel.com
drivers/gpu/drm/i915/gem/i915_gem_mman.c

index cac6d4184506cc7c289065a37e47e43bf344dae3..e9b2424156f07c1266c8622cf3a2110ed773a4ba 100644 (file)
@@ -293,8 +293,10 @@ out:
 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 @@ retry:
        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);