Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

drm/i915: s/for_each_sgt_dma/for_each_sgt_daddr/

The sg_table for our backing store might contain addresses from
stolen-memory or in the future local-memory, at which point this is no
longer a dma-iterator. As a consequence we should now break on NULL
iter.sgp, instead of dmap == 0 which is considered an invalid dma
address.

As a bonus, gcc much prefers this construct,

Function old new delta
gen8_ggtt_insert_entries 211 192 -19
gen6_ggtt_insert_entries 292 262 -30
i915_error_object_create 996 954 -42

Signed-off-by: Matthew Auld <matthew.auld@intel.com>
Cc: Chris Wilson <chris@chris-wilson.co.uk>
Reviewed-by: Chris Wilson <chris@chris-wilson.co.uk>
Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
Link: https://patchwork.freedesktop.org/patch/msgid/20190829201919.21493-1-matthew.auld@intel.com

authored by

Matthew Auld and committed by
Chris Wilson
31444afb 9be02fde

+10 -10
+2 -2
drivers/gpu/drm/i915/i915_gem_gtt.c
··· 2208 2208 2209 2209 gtt_entries = (gen8_pte_t __iomem *)ggtt->gsm; 2210 2210 gtt_entries += vma->node.start / I915_GTT_PAGE_SIZE; 2211 - for_each_sgt_dma(addr, sgt_iter, vma->pages) 2211 + for_each_sgt_daddr(addr, sgt_iter, vma->pages) 2212 2212 gen8_set_pte(gtt_entries++, pte_encode | addr); 2213 2213 2214 2214 /* ··· 2249 2249 unsigned int i = vma->node.start / I915_GTT_PAGE_SIZE; 2250 2250 struct sgt_iter iter; 2251 2251 dma_addr_t addr; 2252 - for_each_sgt_dma(addr, iter, vma->pages) 2252 + for_each_sgt_daddr(addr, iter, vma->pages) 2253 2253 iowrite32(vm->pte_encode(addr, level, flags), &entries[i++]); 2254 2254 2255 2255 /*
+2 -2
drivers/gpu/drm/i915/i915_gem_gtt.h
··· 148 148 #define GEN8_PDE_IPS_64K BIT(11) 149 149 #define GEN8_PDE_PS_2M BIT(7) 150 150 151 - #define for_each_sgt_dma(__dmap, __iter, __sgt) \ 152 - __for_each_sgt_dma(__dmap, __iter, __sgt, I915_GTT_PAGE_SIZE) 151 + #define for_each_sgt_daddr(__dp, __iter, __sgt) \ 152 + __for_each_sgt_daddr(__dp, __iter, __sgt, I915_GTT_PAGE_SIZE) 153 153 154 154 struct intel_remapped_plane_info { 155 155 /* in gtt pages */
+1 -1
drivers/gpu/drm/i915/i915_gpu_error.c
··· 990 990 dst->unused = 0; 991 991 992 992 ret = -EINVAL; 993 - for_each_sgt_dma(dma, iter, vma->pages) { 993 + for_each_sgt_daddr(dma, iter, vma->pages) { 994 994 void __iomem *s; 995 995 996 996 ggtt->vm.insert_page(&ggtt->vm, dma, slot, I915_CACHE_NONE, 0);
+4 -4
drivers/gpu/drm/i915/i915_scatterlist.h
··· 67 67 } 68 68 69 69 /** 70 - * __for_each_sgt_dma - iterate over the DMA addresses of the given sg_table 71 - * @__dmap: DMA address (output) 70 + * __for_each_sgt_daddr - iterate over the device addresses of the given sg_table 71 + * @__dp: Device address (output) 72 72 * @__iter: 'struct sgt_iter' (iterator state, internal) 73 73 * @__sgt: sg_table to iterate over (input) 74 74 * @__step: step size 75 75 */ 76 - #define __for_each_sgt_dma(__dmap, __iter, __sgt, __step) \ 76 + #define __for_each_sgt_daddr(__dp, __iter, __sgt, __step) \ 77 77 for ((__iter) = __sgt_iter((__sgt)->sgl, true); \ 78 - ((__dmap) = (__iter).dma + (__iter).curr); \ 78 + ((__dp) = (__iter).dma + (__iter).curr), (__iter).sgp; \ 79 79 (((__iter).curr += (__step)) >= (__iter).max) ? \ 80 80 (__iter) = __sgt_iter(__sg_next((__iter).sgp), true), 0 : 0) 81 81
+1 -1
drivers/gpu/drm/i915/selftests/i915_vma.c
··· 623 623 struct sgt_iter sgt; 624 624 dma_addr_t dma; 625 625 626 - for_each_sgt_dma(dma, sgt, vma->pages) { 626 + for_each_sgt_daddr(dma, sgt, vma->pages) { 627 627 dma_addr_t src; 628 628 629 629 if (!size) {