]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
drm/pagemap: pass pagemap_addr by reference
authorArnd Bergmann <arnd@arndb.de>
Mon, 16 Feb 2026 13:46:01 +0000 (14:46 +0100)
committerRodrigo Vivi <rodrigo.vivi@intel.com>
Wed, 18 Feb 2026 00:39:44 +0000 (19:39 -0500)
Passing a structure by value into a function is sometimes problematic,
for a number of reasons. Of of these is a warning from the 32-bit arm
compiler:

drivers/gpu/drm/drm_gpusvm.c: In function '__drm_gpusvm_unmap_pages':
drivers/gpu/drm/drm_gpusvm.c:1152:33: note: parameter passing for argument of type 'struct drm_pagemap_addr' changed in GCC 9.1
 1152 |                                 dpagemap->ops->device_unmap(dpagemap,
      |                                 ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 1153 |                                                             dev, *addr);
      |                                                             ~~~~~~~~~~~

This particular problem is harmless since we are not mixing compiler versions
inside of the compiler. However, passing this by reference avoids the warning
along with providing slightly better calling conventions as it avoids an
extra copy on the stack.

Fixes: 75af93b3f5d0 ("drm/pagemap, drm/xe: Support destination migration over interconnect")
Fixes: 2df55d9e66a2 ("drm/xe: Support pcie p2p dma as a fast interconnect")
Signed-off-by: Arnd Bergmann <arnd@arndb.de>
Reviewed-by: Thomas Hellström <thomas.hellstrom@linux.intel.com>
Signed-off-by: Thomas Hellström <thomas.hellstrom@linux.intel.com>
Link: https://patch.msgid.link/20260216134644.1025365-1-arnd@kernel.org
Acked-by: Maarten Lankhorst <maarten.lankhorst@linux.intel.com>
(cherry picked from commit 95162db0208aee122d10ac1342fe97a1721cd258)
Signed-off-by: Rodrigo Vivi <rodrigo.vivi@intel.com>
drivers/gpu/drm/drm_gpusvm.c
drivers/gpu/drm/drm_pagemap.c
drivers/gpu/drm/xe/xe_svm.c
include/drm/drm_pagemap.h

index aa9a0b60e727ec0ab85dd19bccc2f538a466b045..a799447a75757f6cee17367931fd93ff28f242a3 100644 (file)
@@ -1150,7 +1150,7 @@ static void __drm_gpusvm_unmap_pages(struct drm_gpusvm *gpusvm,
                                               addr->dir);
                        else if (dpagemap && dpagemap->ops->device_unmap)
                                dpagemap->ops->device_unmap(dpagemap,
-                                                           dev, *addr);
+                                                           dev, addr);
                        i += 1 << addr->order;
                }
 
index 03ee39a761a41cee8155ec522891daf3eea9e4d8..1ea00ff308e24c28a48018996d6f13b1fa8c2696 100644 (file)
@@ -318,7 +318,7 @@ static void drm_pagemap_migrate_unmap_pages(struct device *dev,
                        struct drm_pagemap_zdd *zdd = page->zone_device_data;
                        struct drm_pagemap *dpagemap = zdd->dpagemap;
 
-                       dpagemap->ops->device_unmap(dpagemap, dev, pagemap_addr[i]);
+                       dpagemap->ops->device_unmap(dpagemap, dev, &pagemap_addr[i]);
                } else {
                        dma_unmap_page(dev, pagemap_addr[i].addr,
                                       PAGE_SIZE << pagemap_addr[i].order, dir);
index 213f0334518a467255930391267c974b7c1fdaf2..78f4b2c60670a5bdfe009daff336a5115717cd79 100644 (file)
@@ -1676,13 +1676,13 @@ xe_drm_pagemap_device_map(struct drm_pagemap *dpagemap,
 
 static void xe_drm_pagemap_device_unmap(struct drm_pagemap *dpagemap,
                                        struct device *dev,
-                                       struct drm_pagemap_addr addr)
+                                       const struct drm_pagemap_addr *addr)
 {
-       if (addr.proto != XE_INTERCONNECT_P2P)
+       if (addr->proto != XE_INTERCONNECT_P2P)
                return;
 
-       dma_unmap_resource(dev, addr.addr, PAGE_SIZE << addr.order,
-                          addr.dir, DMA_ATTR_SKIP_CPU_SYNC);
+       dma_unmap_resource(dev, addr->addr, PAGE_SIZE << addr->order,
+                          addr->dir, DMA_ATTR_SKIP_CPU_SYNC);
 }
 
 static void xe_pagemap_destroy_work(struct work_struct *work)
index 2baf0861f78f30decb1f054dcb48c33def290832..c848f578e3daa69bf126ca2a16d45629a5381f2a 100644 (file)
@@ -95,7 +95,7 @@ struct drm_pagemap_ops {
         */
        void (*device_unmap)(struct drm_pagemap *dpagemap,
                             struct device *dev,
-                            struct drm_pagemap_addr addr);
+                            const struct drm_pagemap_addr *addr);
 
        /**
         * @populate_mm: Populate part of the mm with @dpagemap memory,