[PATCH 3/4] drm/amdgpu: Add CRIU mapping info ioctl

kernel test robot lkp at intel.com
Wed Jun 18 12:42:39 UTC 2025


Hi David,

kernel test robot noticed the following build errors:

[auto build test ERROR on drm-exynos/exynos-drm-next]
[also build test ERROR on linus/master v6.16-rc2]
[cannot apply to next-20250618]
[If your patch is applied to the wrong git tree, kindly drop us a note.
And when submitting patch, we suggest to use '--base' as documented in
https://git-scm.com/docs/git-format-patch#_base_tree_information]

url:    https://github.com/intel-lab-lkp/linux/commits/David-Francis/drm-amdgpu-Add-CRIU-ioctl-to-get-bo-info/20250618-044539
base:   https://git.kernel.org/pub/scm/linux/kernel/git/daeinki/drm-exynos.git exynos-drm-next
patch link:    https://lore.kernel.org/r/20250617194536.538681-4-David.Francis%40amd.com
patch subject: [PATCH 3/4] drm/amdgpu: Add CRIU mapping info ioctl
config: i386-buildonly-randconfig-005-20250618 (https://download.01.org/0day-ci/archive/20250618/202506182058.pHESGM1d-lkp@intel.com/config)
compiler: clang version 20.1.2 (https://github.com/llvm/llvm-project 58df0ef89dd64126512e4ee27b4ac3fd8ddf6247)
reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20250618/202506182058.pHESGM1d-lkp@intel.com/reproduce)

If you fix the issue in a separate patch/commit (i.e. not just a new version of
the same patch/commit), kindly add following tags
| Reported-by: kernel test robot <lkp at intel.com>
| Closes: https://lore.kernel.org/oe-kbuild-all/202506182058.pHESGM1d-lkp@intel.com/

All errors (new ones prefixed by >>):

>> drivers/gpu/drm/amd/amdgpu/amdgpu_criu.c:208:2: error: no member named 'invalids' in 'struct amdgpu_bo_va_mapping'
     208 |         amdgpu_vm_bo_va_for_each_invalid_mapping(mapping, bo_va) {
         |         ^                                        ~~~~~~~
   drivers/gpu/drm/amd/amdgpu/amdgpu_vm.h:674:40: note: expanded from macro 'amdgpu_vm_bo_va_for_each_invalid_mapping'
     674 |                 list_for_each_entry(mapping, &bo_va->invalids, list)
         |                                               ~~~~~  ^
   include/linux/list.h:770:30: note: expanded from macro 'list_for_each_entry'
     770 |         for (pos = list_first_entry(head, typeof(*pos), member);        \
         |                                     ^~~~
   include/linux/list.h:612:14: note: expanded from macro 'list_first_entry'
     612 |         list_entry((ptr)->next, type, member)
         |                     ^~~
   include/linux/list.h:601:15: note: expanded from macro 'list_entry'
     601 |         container_of(ptr, type, member)
         |                      ^~~
   include/linux/container_of.h:19:26: note: expanded from macro 'container_of'
      19 |         void *__mptr = (void *)(ptr);                                   \
         |                                 ^~~
>> drivers/gpu/drm/amd/amdgpu/amdgpu_criu.c:208:2: error: no member named 'invalids' in 'struct amdgpu_bo_va_mapping'
     208 |         amdgpu_vm_bo_va_for_each_invalid_mapping(mapping, bo_va) {
         |         ^                                        ~~~~~~~
   drivers/gpu/drm/amd/amdgpu/amdgpu_vm.h:674:40: note: expanded from macro 'amdgpu_vm_bo_va_for_each_invalid_mapping'
     674 |                 list_for_each_entry(mapping, &bo_va->invalids, list)
         |                                               ~~~~~  ^
   include/linux/list.h:770:30: note: expanded from macro 'list_for_each_entry'
     770 |         for (pos = list_first_entry(head, typeof(*pos), member);        \
         |                                     ^~~~
   include/linux/list.h:612:14: note: expanded from macro 'list_first_entry'
     612 |         list_entry((ptr)->next, type, member)
         |                     ^~~
   note: (skipping 2 expansions in backtrace; use -fmacro-backtrace-limit=0 to see all)
   include/linux/compiler_types.h:503:63: note: expanded from macro '__same_type'
     503 | #define __same_type(a, b) __builtin_types_compatible_p(typeof(a), typeof(b))
         |                                                               ^
   include/linux/build_bug.h:77:50: note: expanded from macro 'static_assert'
      77 | #define static_assert(expr, ...) __static_assert(expr, ##__VA_ARGS__, #expr)
         |                                                  ^~~~
   include/linux/build_bug.h:78:56: note: expanded from macro '__static_assert'
      78 | #define __static_assert(expr, msg, ...) _Static_assert(expr, msg)
         |                                                        ^~~~
>> drivers/gpu/drm/amd/amdgpu/amdgpu_criu.c:208:2: error: no member named 'invalids' in 'struct amdgpu_bo_va_mapping'
     208 |         amdgpu_vm_bo_va_for_each_invalid_mapping(mapping, bo_va) {
         |         ^                                        ~~~~~~~
   drivers/gpu/drm/amd/amdgpu/amdgpu_vm.h:674:40: note: expanded from macro 'amdgpu_vm_bo_va_for_each_invalid_mapping'
     674 |                 list_for_each_entry(mapping, &bo_va->invalids, list)
         |                                               ~~~~~  ^
   include/linux/list.h:770:30: note: expanded from macro 'list_for_each_entry'
     770 |         for (pos = list_first_entry(head, typeof(*pos), member);        \
         |                                     ^~~~
   include/linux/list.h:612:14: note: expanded from macro 'list_first_entry'
     612 |         list_entry((ptr)->next, type, member)
         |                     ^~~
   note: (skipping 2 expansions in backtrace; use -fmacro-backtrace-limit=0 to see all)
   include/linux/compiler_types.h:503:63: note: expanded from macro '__same_type'
     503 | #define __same_type(a, b) __builtin_types_compatible_p(typeof(a), typeof(b))
         |                                                               ^
   include/linux/build_bug.h:77:50: note: expanded from macro 'static_assert'
      77 | #define static_assert(expr, ...) __static_assert(expr, ##__VA_ARGS__, #expr)
         |                                                  ^~~~
   include/linux/build_bug.h:78:56: note: expanded from macro '__static_assert'
      78 | #define __static_assert(expr, msg, ...) _Static_assert(expr, msg)
         |                                                        ^~~~
>> drivers/gpu/drm/amd/amdgpu/amdgpu_criu.c:208:2: error: no member named 'list' in 'amdgpu_bo_va'
     208 |         amdgpu_vm_bo_va_for_each_invalid_mapping(mapping, bo_va) {
         |         ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   drivers/gpu/drm/amd/amdgpu/amdgpu_vm.h:674:3: note: expanded from macro 'amdgpu_vm_bo_va_for_each_invalid_mapping'
     674 |                 list_for_each_entry(mapping, &bo_va->invalids, list)
         |                 ^                                              ~~~~
   include/linux/list.h:770:13: note: expanded from macro 'list_for_each_entry'
     770 |         for (pos = list_first_entry(head, typeof(*pos), member);        \
         |                    ^                                    ~~~~~~
   include/linux/list.h:612:2: note: expanded from macro 'list_first_entry'
     612 |         list_entry((ptr)->next, type, member)
         |         ^                             ~~~~~~
   include/linux/list.h:601:2: note: expanded from macro 'list_entry'
     601 |         container_of(ptr, type, member)
         |         ^                       ~~~~~~
   include/linux/container_of.h:23:21: note: expanded from macro 'container_of'
      23 |         ((type *)(__mptr - offsetof(type, member))); })
         |                            ^              ~~~~~~
   include/linux/stddef.h:16:32: note: expanded from macro 'offsetof'
      16 | #define offsetof(TYPE, MEMBER)  __builtin_offsetof(TYPE, MEMBER)
         |                                 ^                        ~~~~~~
>> drivers/gpu/drm/amd/amdgpu/amdgpu_criu.c:208:2: error: no member named 'list' in 'struct amdgpu_bo_va'
     208 |         amdgpu_vm_bo_va_for_each_invalid_mapping(mapping, bo_va) {
         |         ^                                                 ~~~~~
   drivers/gpu/drm/amd/amdgpu/amdgpu_vm.h:674:50: note: expanded from macro 'amdgpu_vm_bo_va_for_each_invalid_mapping'
     674 |                 list_for_each_entry(mapping, &bo_va->invalids, list)
         |                                     ~~~~~~~                    ^
   include/linux/list.h:771:38: note: expanded from macro 'list_for_each_entry'
     771 |              !list_entry_is_head(pos, head, member);                    \
         |                                  ~~~        ^
   include/linux/list.h:761:21: note: expanded from macro 'list_entry_is_head'
     761 |         list_is_head(&pos->member, (head))
         |                       ~~~  ^
>> drivers/gpu/drm/amd/amdgpu/amdgpu_criu.c:208:2: error: no member named 'invalids' in 'struct amdgpu_bo_va_mapping'
     208 |         amdgpu_vm_bo_va_for_each_invalid_mapping(mapping, bo_va) {
         |         ^                                        ~~~~~~~
   drivers/gpu/drm/amd/amdgpu/amdgpu_vm.h:674:40: note: expanded from macro 'amdgpu_vm_bo_va_for_each_invalid_mapping'
     674 |                 list_for_each_entry(mapping, &bo_va->invalids, list)
         |                                               ~~~~~  ^
   include/linux/list.h:771:32: note: expanded from macro 'list_for_each_entry'
     771 |              !list_entry_is_head(pos, head, member);                    \
         |                                       ^~~~
   include/linux/list.h:761:30: note: expanded from macro 'list_entry_is_head'
     761 |         list_is_head(&pos->member, (head))
         |                                     ^~~~
>> drivers/gpu/drm/amd/amdgpu/amdgpu_criu.c:208:2: error: no member named 'list' in 'struct amdgpu_bo_va'
     208 |         amdgpu_vm_bo_va_for_each_invalid_mapping(mapping, bo_va) {
         |         ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   drivers/gpu/drm/amd/amdgpu/amdgpu_vm.h:674:50: note: expanded from macro 'amdgpu_vm_bo_va_for_each_invalid_mapping'
     674 |                 list_for_each_entry(mapping, &bo_va->invalids, list)
         |                 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~
   include/linux/list.h:772:34: note: expanded from macro 'list_for_each_entry'
     772 |              pos = list_next_entry(pos, member))
         |                    ~~~~~~~~~~~~~~~~~~~~~^~~~~~~
   include/linux/list.h:645:20: note: expanded from macro 'list_next_entry'
     645 |         list_entry((pos)->member.next, typeof(*(pos)), member)
         |         ~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   include/linux/list.h:601:15: note: expanded from macro 'list_entry'
     601 |         container_of(ptr, type, member)
         |         ~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~
   include/linux/container_of.h:19:26: note: expanded from macro 'container_of'
      19 |         void *__mptr = (void *)(ptr);                                   \
         |                                 ^~~
>> drivers/gpu/drm/amd/amdgpu/amdgpu_criu.c:208:2: error: no member named 'list' in 'struct amdgpu_bo_va'
     208 |         amdgpu_vm_bo_va_for_each_invalid_mapping(mapping, bo_va) {
         |         ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   drivers/gpu/drm/amd/amdgpu/amdgpu_vm.h:674:50: note: expanded from macro 'amdgpu_vm_bo_va_for_each_invalid_mapping'
     674 |                 list_for_each_entry(mapping, &bo_va->invalids, list)
         |                 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~
   include/linux/list.h:772:34: note: expanded from macro 'list_for_each_entry'
     772 |              pos = list_next_entry(pos, member))
         |                    ~~~~~~~~~~~~~~~~~~~~~^~~~~~~
   include/linux/list.h:645:20: note: expanded from macro 'list_next_entry'
     645 |         list_entry((pos)->member.next, typeof(*(pos)), member)
         |         ~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   note: (skipping 2 expansions in backtrace; use -fmacro-backtrace-limit=0 to see all)
   include/linux/compiler_types.h:503:63: note: expanded from macro '__same_type'
     503 | #define __same_type(a, b) __builtin_types_compatible_p(typeof(a), typeof(b))
         |                                                               ^
   include/linux/build_bug.h:77:50: note: expanded from macro 'static_assert'
      77 | #define static_assert(expr, ...) __static_assert(expr, ##__VA_ARGS__, #expr)
         |                                  ~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~
   include/linux/build_bug.h:78:56: note: expanded from macro '__static_assert'
      78 | #define __static_assert(expr, msg, ...) _Static_assert(expr, msg)
         |                                                        ^~~~
>> drivers/gpu/drm/amd/amdgpu/amdgpu_criu.c:208:2: error: no member named 'list' in 'struct amdgpu_bo_va'
     208 |         amdgpu_vm_bo_va_for_each_invalid_mapping(mapping, bo_va) {
         |         ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   drivers/gpu/drm/amd/amdgpu/amdgpu_vm.h:674:50: note: expanded from macro 'amdgpu_vm_bo_va_for_each_invalid_mapping'
     674 |                 list_for_each_entry(mapping, &bo_va->invalids, list)
         |                 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~
   include/linux/list.h:772:34: note: expanded from macro 'list_for_each_entry'
     772 |              pos = list_next_entry(pos, member))
         |                    ~~~~~~~~~~~~~~~~~~~~~^~~~~~~
   include/linux/list.h:645:20: note: expanded from macro 'list_next_entry'
     645 |         list_entry((pos)->member.next, typeof(*(pos)), member)
         |         ~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   note: (skipping 2 expansions in backtrace; use -fmacro-backtrace-limit=0 to see all)
   include/linux/compiler_types.h:503:63: note: expanded from macro '__same_type'
     503 | #define __same_type(a, b) __builtin_types_compatible_p(typeof(a), typeof(b))
         |                                                               ^
   include/linux/build_bug.h:77:50: note: expanded from macro 'static_assert'
      77 | #define static_assert(expr, ...) __static_assert(expr, ##__VA_ARGS__, #expr)
         |                                  ~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~
   include/linux/build_bug.h:78:56: note: expanded from macro '__static_assert'
      78 | #define __static_assert(expr, msg, ...) _Static_assert(expr, msg)
         |                                                        ^~~~
>> drivers/gpu/drm/amd/amdgpu/amdgpu_criu.c:208:2: error: no member named 'list' in 'amdgpu_bo_va'
     208 |         amdgpu_vm_bo_va_for_each_invalid_mapping(mapping, bo_va) {
         |         ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   drivers/gpu/drm/amd/amdgpu/amdgpu_vm.h:674:3: note: expanded from macro 'amdgpu_vm_bo_va_for_each_invalid_mapping'
     674 |                 list_for_each_entry(mapping, &bo_va->invalids, list)
         |                 ^                                              ~~~~
   include/linux/list.h:772:13: note: expanded from macro 'list_for_each_entry'
     772 |              pos = list_next_entry(pos, member))
         |                    ^                    ~~~~~~
   include/linux/list.h:645:2: note: expanded from macro 'list_next_entry'
     645 |         list_entry((pos)->member.next, typeof(*(pos)), member)
         |         ^                                              ~~~~~~
   include/linux/list.h:601:2: note: expanded from macro 'list_entry'
     601 |         container_of(ptr, type, member)
         |         ^                       ~~~~~~
   include/linux/container_of.h:23:21: note: expanded from macro 'container_of'
      23 |         ((type *)(__mptr - offsetof(type, member))); })
         |                            ^              ~~~~~~
   include/linux/stddef.h:16:32: note: expanded from macro 'offsetof'
      16 | #define offsetof(TYPE, MEMBER)  __builtin_offsetof(TYPE, MEMBER)
         |                                 ^                        ~~~~~~
   10 errors generated.


vim +208 drivers/gpu/drm/amd/amdgpu/amdgpu_criu.c

   145	
   146	/**
   147	 * amdgpu_criu_mapping_info_ioctl - get information about a buffer's mappings
   148	 *
   149	 * @dev: drm device pointer
   150	 * @data: drm_amdgpu_criu_mapping_info_args
   151	 * @filp: drm file pointer
   152	 *
   153	 * num_mappings is set as an input to the size of the vm_buckets array.
   154	 * num_mappings is sent back as output as the number of mappings the bo has.
   155	 * If that number is larger than the size of the array, the ioctl must
   156	 * be retried.
   157	 *
   158	 * Returns:
   159	 * 0 for success, -errno for errors.
   160	 */
   161	int amdgpu_criu_mapping_info_ioctl(struct drm_device *dev, void *data,
   162	                struct drm_file *filp)
   163	{
   164	    struct drm_amdgpu_criu_mapping_info_args *args = data;
   165	    struct drm_gem_object *gobj = idr_find(&filp->object_idr, args->gem_handle);
   166	    struct amdgpu_vm *avm = &((struct amdgpu_fpriv *)filp->driver_priv)->vm;
   167	    struct amdgpu_bo *bo = gem_to_amdgpu_bo(gobj);
   168	    struct amdgpu_bo_va *bo_va = amdgpu_vm_bo_find(avm, bo);
   169	    struct amdgpu_fpriv *fpriv = filp->driver_priv;
   170	    struct drm_amdgpu_criu_vm_bucket *vm_buckets;
   171	    struct amdgpu_bo_va_mapping *mapping;
   172	    struct drm_exec exec;
   173	    int num_mappings = 0;
   174	    int ret;
   175	
   176	    vm_buckets = kvzalloc(args->num_mappings * sizeof(*vm_buckets), GFP_KERNEL);
   177	    if (!vm_buckets) {
   178	        ret = -ENOMEM;
   179	        goto free_vms;
   180	    }
   181	
   182	    drm_exec_init(&exec, DRM_EXEC_INTERRUPTIBLE_WAIT |
   183	              DRM_EXEC_IGNORE_DUPLICATES, 0);
   184	    drm_exec_until_all_locked(&exec) {
   185	        if (gobj) {
   186	            ret = drm_exec_lock_obj(&exec, gobj);
   187	            drm_exec_retry_on_contention(&exec);
   188	            if (ret)
   189	                goto unlock_exec;
   190	        }
   191	
   192	        ret = amdgpu_vm_lock_pd(&fpriv->vm, &exec, 2);
   193	        drm_exec_retry_on_contention(&exec);
   194	        if (ret)
   195	            goto unlock_exec;
   196	    }
   197	
   198		amdgpu_vm_bo_va_for_each_valid_mapping(bo_va, mapping) {
   199	        if (num_mappings < args->num_mappings) {
   200	            vm_buckets[num_mappings].start = mapping->start;
   201	            vm_buckets[num_mappings].last = mapping->last;
   202	            vm_buckets[num_mappings].offset = mapping->offset;
   203	            vm_buckets[num_mappings].flags = hardware_flags_to_uapi_flags(drm_to_adev(dev), mapping->flags);
   204	        }
   205	        num_mappings += 1;
   206		}
   207	
 > 208		amdgpu_vm_bo_va_for_each_invalid_mapping(mapping, bo_va) {

-- 
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki


More information about the dri-devel mailing list