Hi Matthew, Thank you for the patch! Perhaps something to improve: [auto build test WARNING on drm-tip/drm-tip] [cannot apply to drm-intel/for-linux-next linus/master drm/drm-next v5.12 next-20210426] [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] url: https://github.com/0day-ci/linux/commits/Matthew-Auld/drm-doc-rfc-i915-DG1-uAPI/20210426-174654 base: git://anongit.freedesktop.org/drm/drm-tip drm-tip config: i386-randconfig-s002-20210426 (attached as .config) compiler: gcc-9 (Debian 9.3.0-22) 9.3.0 reproduce: # apt-get install sparse # sparse version: v0.6.3-341-g8af24329-dirty # https://github.com/0day-ci/linux/commit/97483a486d4dbfe124ad40b6c63265310fca3d7b git remote add linux-review https://github.com/0day-ci/linux git fetch --no-tags linux-review Matthew-Auld/drm-doc-rfc-i915-DG1-uAPI/20210426-174654 git checkout 97483a486d4dbfe124ad40b6c63265310fca3d7b # save the attached .config to linux build tree make W=1 C=1 CF='-fdiagnostic-prefix -D__CHECK_ENDIAN__' W=1 ARCH=i386 If you fix the issue, kindly add following tag as appropriate Reported-by: kernel test robot sparse warnings: (new ones prefixed by >>) >> drivers/gpu/drm/i915/gem/i915_gem_region.c:113:34: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected unsigned long long [usertype] * @@ got void [noderef] __iomem *[assigned] vaddr @@ drivers/gpu/drm/i915/gem/i915_gem_region.c:113:34: sparse: expected unsigned long long [usertype] * drivers/gpu/drm/i915/gem/i915_gem_region.c:113:34: sparse: got void [noderef] __iomem *[assigned] vaddr vim +113 drivers/gpu/drm/i915/gem/i915_gem_region.c 21 22 int 23 i915_gem_object_get_pages_buddy(struct drm_i915_gem_object *obj) 24 { 25 const u64 max_segment = i915_sg_segment_size(); 26 struct intel_memory_region *mem = obj->mm.region; 27 struct list_head *blocks = &obj->mm.blocks; 28 resource_size_t size = obj->base.size; 29 resource_size_t prev_end; 30 struct i915_buddy_block *block; 31 unsigned int flags; 32 struct sg_table *st; 33 struct scatterlist *sg; 34 unsigned int sg_page_sizes; 35 int ret; 36 37 st = kmalloc(sizeof(*st), GFP_KERNEL); 38 if (!st) 39 return -ENOMEM; 40 41 if (sg_alloc_table(st, size >> PAGE_SHIFT, GFP_KERNEL)) { 42 kfree(st); 43 return -ENOMEM; 44 } 45 46 flags = I915_ALLOC_MIN_PAGE_SIZE; 47 if (obj->flags & I915_BO_ALLOC_CONTIGUOUS) 48 flags |= I915_ALLOC_CONTIGUOUS; 49 50 ret = __intel_memory_region_get_pages_buddy(mem, size, flags, blocks); 51 if (ret) 52 goto err_free_sg; 53 54 GEM_BUG_ON(list_empty(blocks)); 55 56 sg = st->sgl; 57 st->nents = 0; 58 sg_page_sizes = 0; 59 prev_end = (resource_size_t)-1; 60 61 list_for_each_entry(block, blocks, link) { 62 u64 block_size, offset; 63 64 block_size = min_t(u64, size, 65 i915_buddy_block_size(&mem->mm, block)); 66 offset = i915_buddy_block_offset(block); 67 68 while (block_size) { 69 u64 len; 70 71 if (offset != prev_end || sg->length >= max_segment) { 72 if (st->nents) { 73 sg_page_sizes |= sg->length; 74 sg = __sg_next(sg); 75 } 76 77 sg_dma_address(sg) = mem->region.start + offset; 78 sg_dma_len(sg) = 0; 79 sg->length = 0; 80 st->nents++; 81 } 82 83 len = min(block_size, max_segment - sg->length); 84 sg->length += len; 85 sg_dma_len(sg) += len; 86 87 offset += len; 88 block_size -= len; 89 90 prev_end = offset; 91 } 92 } 93 94 sg_page_sizes |= sg->length; 95 sg_mark_end(sg); 96 i915_sg_trim(st); 97 98 /* Intended for kernel internal use only */ 99 if (obj->flags & I915_BO_ALLOC_CPU_CLEAR) { 100 struct scatterlist *sg; 101 unsigned long i; 102 103 for_each_sg(st->sgl, sg, st->nents, i) { 104 unsigned int length; 105 void __iomem *vaddr; 106 dma_addr_t daddr; 107 108 daddr = sg_dma_address(sg); 109 daddr -= mem->region.start; 110 length = sg_dma_len(sg); 111 112 vaddr = io_mapping_map_wc(&mem->iomap, daddr, length); > 113 memset64(vaddr, 0, length / sizeof(u64)); 114 io_mapping_unmap(vaddr); 115 } 116 117 wmb(); 118 } 119 120 __i915_gem_object_set_pages(obj, st, sg_page_sizes); 121 122 return 0; 123 124 err_free_sg: 125 sg_free_table(st); 126 kfree(st); 127 return ret; 128 } 129 --- 0-DAY CI Kernel Test Service, Intel Corporation https://lists.01.org/hyperkitty/list/kbuild-all(a)lists.01.org