* [Intel-gfx] [PATCH 0/2] Fixes for incoming smarter IOMMU
@ 2020-09-10 11:58 Tvrtko Ursulin
2020-09-10 11:58 ` [Intel-gfx] [PATCH 1/2] drm/i915: Fix DMA mapped scatterlist walks Tvrtko Ursulin
` (5 more replies)
0 siblings, 6 replies; 12+ messages in thread
From: Tvrtko Ursulin @ 2020-09-10 11:58 UTC (permalink / raw)
To: Intel-gfx
From: Tvrtko Ursulin <tvrtko.ursulin@intel.com>
There are incoming improvements to Intel IOMMU code to allow sg table
coalescing on map operations. We do not handle that well (we assume 1:1 between
backing store and DMA mapped entries) so this series is an attempt to improve
this area and get ready for those changes.
Tvrtko Ursulin (2):
drm/i915: Fix DMA mapped scatterlist walks
drm/i915: Fix DMA mapped scatterlist lookup
drivers/gpu/drm/i915/gem/i915_gem_object.c | 2 ++
drivers/gpu/drm/i915/gem/i915_gem_object.h | 20 +++++++++++++++++-
.../gpu/drm/i915/gem/i915_gem_object_types.h | 17 ++++++++-------
drivers/gpu/drm/i915/gem/i915_gem_pages.c | 21 ++++++++++++-------
drivers/gpu/drm/i915/gt/gen6_ppgtt.c | 6 +++---
drivers/gpu/drm/i915/gt/gen8_ppgtt.c | 17 ++++++++-------
drivers/gpu/drm/i915/gt/intel_ggtt.c | 4 ++--
drivers/gpu/drm/i915/gt/intel_gtt.h | 2 +-
drivers/gpu/drm/i915/i915_scatterlist.h | 17 +++++++++++----
9 files changed, 73 insertions(+), 33 deletions(-)
--
2.25.1
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx
^ permalink raw reply [flat|nested] 12+ messages in thread* [Intel-gfx] [PATCH 1/2] drm/i915: Fix DMA mapped scatterlist walks 2020-09-10 11:58 [Intel-gfx] [PATCH 0/2] Fixes for incoming smarter IOMMU Tvrtko Ursulin @ 2020-09-10 11:58 ` Tvrtko Ursulin 2020-09-10 11:59 ` [Intel-gfx] [PATCH 2/2] drm/i915: Fix DMA mapped scatterlist lookup Tvrtko Ursulin ` (4 subsequent siblings) 5 siblings, 0 replies; 12+ messages in thread From: Tvrtko Ursulin @ 2020-09-10 11:58 UTC (permalink / raw) To: Intel-gfx Cc: Tom Murphy, Chris Wilson, Matthew Auld, Logan Gunthorpe, Lu Baolu From: Tvrtko Ursulin <tvrtko.ursulin@intel.com> When walking DMA mapped scatterlists sg_dma_len has to be used since it can be different (coalesced) from the backing store entry. This also means we have to end the walk when encountering a zero length DMA entry and cannot rely on the normal sg list end marker. Both issues were there in theory for some time but were hidden by the fact Intel IOMMU driver was never coalescing entries. As there are ongoing efforts to change this we need to start handling it. v2: * Use unsigned int for local storing sg_dma_len. (Logan) Signed-off-by: Tvrtko Ursulin <tvrtko.ursulin@intel.com> References: 85d1225ec066 ("drm/i915: Introduce & use new lightweight SGL iterators") References: b31144c0daa8 ("drm/i915: Micro-optimise gen6_ppgtt_insert_entries()") Reported-by: Tom Murphy <murphyt7@tcd.ie> Suggested-by: Tom Murphy <murphyt7@tcd.ie> # __sgt_iter Suggested-by: Logan Gunthorpe <logang@deltatee.com> # __sgt_iter Cc: Joonas Lahtinen <joonas.lahtinen@linux.intel.com> Cc: Chris Wilson <chris@chris-wilson.co.uk> Cc: Matthew Auld <matthew.auld@intel.com> Cc: Lu Baolu <baolu.lu@linux.intel.com> Reviewed-by: Logan Gunthorpe <logang@deltatee.com> --- drivers/gpu/drm/i915/gt/gen6_ppgtt.c | 6 +++--- drivers/gpu/drm/i915/gt/gen8_ppgtt.c | 17 ++++++++++------- drivers/gpu/drm/i915/gt/intel_gtt.h | 2 +- drivers/gpu/drm/i915/i915_scatterlist.h | 12 ++++++++---- 4 files changed, 22 insertions(+), 15 deletions(-) diff --git a/drivers/gpu/drm/i915/gt/gen6_ppgtt.c b/drivers/gpu/drm/i915/gt/gen6_ppgtt.c index fd0d24d28763..c0d17f87b00f 100644 --- a/drivers/gpu/drm/i915/gt/gen6_ppgtt.c +++ b/drivers/gpu/drm/i915/gt/gen6_ppgtt.c @@ -131,17 +131,17 @@ static void gen6_ppgtt_insert_entries(struct i915_address_space *vm, vaddr = kmap_atomic_px(i915_pt_entry(pd, act_pt)); do { - GEM_BUG_ON(iter.sg->length < I915_GTT_PAGE_SIZE); + GEM_BUG_ON(sg_dma_len(iter.sg) < I915_GTT_PAGE_SIZE); vaddr[act_pte] = pte_encode | GEN6_PTE_ADDR_ENCODE(iter.dma); iter.dma += I915_GTT_PAGE_SIZE; if (iter.dma == iter.max) { iter.sg = __sg_next(iter.sg); - if (!iter.sg) + if (!iter.sg || sg_dma_len(iter.sg) == 0) break; iter.dma = sg_dma_address(iter.sg); - iter.max = iter.dma + iter.sg->length; + iter.max = iter.dma + sg_dma_len(iter.sg); } if (++act_pte == GEN6_PTES) { diff --git a/drivers/gpu/drm/i915/gt/gen8_ppgtt.c b/drivers/gpu/drm/i915/gt/gen8_ppgtt.c index eb64f474a78c..b236aa046f91 100644 --- a/drivers/gpu/drm/i915/gt/gen8_ppgtt.c +++ b/drivers/gpu/drm/i915/gt/gen8_ppgtt.c @@ -372,19 +372,19 @@ gen8_ppgtt_insert_pte(struct i915_ppgtt *ppgtt, pd = i915_pd_entry(pdp, gen8_pd_index(idx, 2)); vaddr = kmap_atomic_px(i915_pt_entry(pd, gen8_pd_index(idx, 1))); do { - GEM_BUG_ON(iter->sg->length < I915_GTT_PAGE_SIZE); + GEM_BUG_ON(sg_dma_len(iter->sg) < I915_GTT_PAGE_SIZE); vaddr[gen8_pd_index(idx, 0)] = pte_encode | iter->dma; iter->dma += I915_GTT_PAGE_SIZE; if (iter->dma >= iter->max) { iter->sg = __sg_next(iter->sg); - if (!iter->sg) { + if (!iter->sg || sg_dma_len(iter->sg) == 0) { idx = 0; break; } iter->dma = sg_dma_address(iter->sg); - iter->max = iter->dma + iter->sg->length; + iter->max = iter->dma + sg_dma_len(iter->sg); } if (gen8_pd_index(++idx, 0) == 0) { @@ -413,8 +413,8 @@ static void gen8_ppgtt_insert_huge(struct i915_vma *vma, u32 flags) { const gen8_pte_t pte_encode = gen8_pte_encode(0, cache_level, flags); + unsigned int rem = sg_dma_len(iter->sg); u64 start = vma->node.start; - dma_addr_t rem = iter->sg->length; GEM_BUG_ON(!i915_vm_is_4lvl(vma->vm)); @@ -456,7 +456,7 @@ static void gen8_ppgtt_insert_huge(struct i915_vma *vma, } do { - GEM_BUG_ON(iter->sg->length < page_size); + GEM_BUG_ON(sg_dma_len(iter->sg) < page_size); vaddr[index++] = encode | iter->dma; start += page_size; @@ -467,7 +467,10 @@ static void gen8_ppgtt_insert_huge(struct i915_vma *vma, if (!iter->sg) break; - rem = iter->sg->length; + rem = sg_dma_len(iter->sg); + if (!rem) + break; + iter->dma = sg_dma_address(iter->sg); iter->max = iter->dma + rem; @@ -525,7 +528,7 @@ static void gen8_ppgtt_insert_huge(struct i915_vma *vma, } vma->page_sizes.gtt |= page_size; - } while (iter->sg); + } while (iter->sg && sg_dma_len(iter->sg)); } static void gen8_ppgtt_insert(struct i915_address_space *vm, diff --git a/drivers/gpu/drm/i915/gt/intel_gtt.h b/drivers/gpu/drm/i915/gt/intel_gtt.h index c13c650ced22..8a33940a71f3 100644 --- a/drivers/gpu/drm/i915/gt/intel_gtt.h +++ b/drivers/gpu/drm/i915/gt/intel_gtt.h @@ -580,7 +580,7 @@ static inline struct sgt_dma { struct scatterlist *sg = vma->pages->sgl; dma_addr_t addr = sg_dma_address(sg); - return (struct sgt_dma){ sg, addr, addr + sg->length }; + return (struct sgt_dma){ sg, addr, addr + sg_dma_len(sg) }; } #endif diff --git a/drivers/gpu/drm/i915/i915_scatterlist.h b/drivers/gpu/drm/i915/i915_scatterlist.h index b7b59328cb76..510856887628 100644 --- a/drivers/gpu/drm/i915/i915_scatterlist.h +++ b/drivers/gpu/drm/i915/i915_scatterlist.h @@ -27,13 +27,17 @@ static __always_inline struct sgt_iter { } __sgt_iter(struct scatterlist *sgl, bool dma) { struct sgt_iter s = { .sgp = sgl }; - if (s.sgp) { + if (dma && s.sgp && sg_dma_len(s.sgp) == 0) { + s.sgp = NULL; + } else if (s.sgp) { s.max = s.curr = s.sgp->offset; - s.max += s.sgp->length; - if (dma) + if (dma) { s.dma = sg_dma_address(s.sgp); - else + s.max += sg_dma_len(s.sgp); + } else { s.pfn = page_to_pfn(sg_page(s.sgp)); + s.max += s.sgp->length; + } } return s; -- 2.25.1 _______________________________________________ Intel-gfx mailing list Intel-gfx@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/intel-gfx ^ permalink raw reply related [flat|nested] 12+ messages in thread
* [Intel-gfx] [PATCH 2/2] drm/i915: Fix DMA mapped scatterlist lookup 2020-09-10 11:58 [Intel-gfx] [PATCH 0/2] Fixes for incoming smarter IOMMU Tvrtko Ursulin 2020-09-10 11:58 ` [Intel-gfx] [PATCH 1/2] drm/i915: Fix DMA mapped scatterlist walks Tvrtko Ursulin @ 2020-09-10 11:59 ` Tvrtko Ursulin 2020-09-10 13:31 ` Tom Murphy 2020-09-10 14:50 ` [Intel-gfx] [PATCH v2] " Tvrtko Ursulin 2020-09-10 14:23 ` [Intel-gfx] ✗ Fi.CI.CHECKPATCH: warning for Fixes for incoming smarter IOMMU Patchwork ` (3 subsequent siblings) 5 siblings, 2 replies; 12+ messages in thread From: Tvrtko Ursulin @ 2020-09-10 11:59 UTC (permalink / raw) To: Intel-gfx Cc: Tom Murphy, Chris Wilson, Matthew Auld, Logan Gunthorpe, Lu Baolu From: Tvrtko Ursulin <tvrtko.ursulin@intel.com> As the previous patch fixed the places where we walk the whole scatterlist for DMA addresses, this patch fixes the random lookup functionality. To achieve this we have to add a second lookup iterator and add a i915_gem_object_get_sg_dma helper, to be used analoguous to existing i915_gem_object_get_sg_dma. Therefore two lookup caches are maintained per object and they are flushed at the same point for simplicity. (Strictly speaking the DMA cache should be flushed from i915_gem_gtt_finish_pages, but today this conincides with unsetting of the pages in general.) Partial VMA view is then fixed to use the new DMA lookup and properly query sg length. Signed-off-by: Tvrtko Ursulin <tvrtko.ursulin@intel.com> Cc: Joonas Lahtinen <joonas.lahtinen@linux.intel.com> Cc: Chris Wilson <chris@chris-wilson.co.uk> Cc: Matthew Auld <matthew.auld@intel.com> Cc: Lu Baolu <baolu.lu@linux.intel.com> Cc: Tom Murphy <murphyt7@tcd.ie> Cc: Logan Gunthorpe <logang@deltatee.com> --- drivers/gpu/drm/i915/gem/i915_gem_object.c | 2 ++ drivers/gpu/drm/i915/gem/i915_gem_object.h | 20 +++++++++++++++++- .../gpu/drm/i915/gem/i915_gem_object_types.h | 17 ++++++++------- drivers/gpu/drm/i915/gem/i915_gem_pages.c | 21 ++++++++++++------- drivers/gpu/drm/i915/gt/intel_ggtt.c | 4 ++-- drivers/gpu/drm/i915/i915_scatterlist.h | 5 +++++ 6 files changed, 51 insertions(+), 18 deletions(-) diff --git a/drivers/gpu/drm/i915/gem/i915_gem_object.c b/drivers/gpu/drm/i915/gem/i915_gem_object.c index c8421fd9d2dc..ffeaf1b9b1bb 100644 --- a/drivers/gpu/drm/i915/gem/i915_gem_object.c +++ b/drivers/gpu/drm/i915/gem/i915_gem_object.c @@ -73,6 +73,8 @@ void i915_gem_object_init(struct drm_i915_gem_object *obj, obj->mm.madv = I915_MADV_WILLNEED; INIT_RADIX_TREE(&obj->mm.get_page.radix, GFP_KERNEL | __GFP_NOWARN); mutex_init(&obj->mm.get_page.lock); + INIT_RADIX_TREE(&obj->mm.get_dma_page.radix, GFP_KERNEL | __GFP_NOWARN); + mutex_init(&obj->mm.get_dma_page.lock); if (IS_ENABLED(CONFIG_LOCKDEP) && i915_gem_object_is_shrinkable(obj)) i915_gem_shrinker_taints_mutex(to_i915(obj->base.dev), diff --git a/drivers/gpu/drm/i915/gem/i915_gem_object.h b/drivers/gpu/drm/i915/gem/i915_gem_object.h index d46db8d8f38e..7ba5e958a3d0 100644 --- a/drivers/gpu/drm/i915/gem/i915_gem_object.h +++ b/drivers/gpu/drm/i915/gem/i915_gem_object.h @@ -275,8 +275,26 @@ int i915_gem_object_set_tiling(struct drm_i915_gem_object *obj, unsigned int tiling, unsigned int stride); struct scatterlist * +__i915_gem_object_get_sg(struct drm_i915_gem_object *obj, + struct i915_gem_object_page_iter *iter, + unsigned int n, + unsigned int *offset); + +static inline struct scatterlist * i915_gem_object_get_sg(struct drm_i915_gem_object *obj, - unsigned int n, unsigned int *offset); + unsigned int n, + unsigned int *offset) +{ + return __i915_gem_object_get_sg(obj, &obj->mm.get_page, n, offset); +} + +static inline struct scatterlist * +i915_gem_object_get_sg_dma(struct drm_i915_gem_object *obj, + unsigned int n, + unsigned int *offset) +{ + return __i915_gem_object_get_sg(obj, &obj->mm.get_dma_page, n, offset); +} struct page * i915_gem_object_get_page(struct drm_i915_gem_object *obj, diff --git a/drivers/gpu/drm/i915/gem/i915_gem_object_types.h b/drivers/gpu/drm/i915/gem/i915_gem_object_types.h index b5c15557cc87..fedfebf13344 100644 --- a/drivers/gpu/drm/i915/gem/i915_gem_object_types.h +++ b/drivers/gpu/drm/i915/gem/i915_gem_object_types.h @@ -80,6 +80,14 @@ struct i915_mmap_offset { struct rb_node offset; }; +struct i915_gem_object_page_iter { + struct scatterlist *sg_pos; + unsigned int sg_idx; /* in pages, but 32bit eek! */ + + struct radix_tree_root radix; + struct mutex lock; /* protects this cache */ +}; + struct drm_i915_gem_object { struct drm_gem_object base; @@ -246,13 +254,8 @@ struct drm_i915_gem_object { I915_SELFTEST_DECLARE(unsigned int page_mask); - struct i915_gem_object_page_iter { - struct scatterlist *sg_pos; - unsigned int sg_idx; /* in pages, but 32bit eek! */ - - struct radix_tree_root radix; - struct mutex lock; /* protects this cache */ - } get_page; + struct i915_gem_object_page_iter get_page; + struct i915_gem_object_page_iter get_dma_page; /** * Element within i915->mm.unbound_list or i915->mm.bound_list, diff --git a/drivers/gpu/drm/i915/gem/i915_gem_pages.c b/drivers/gpu/drm/i915/gem/i915_gem_pages.c index e8a083743e09..04a3c1233f80 100644 --- a/drivers/gpu/drm/i915/gem/i915_gem_pages.c +++ b/drivers/gpu/drm/i915/gem/i915_gem_pages.c @@ -33,6 +33,8 @@ void __i915_gem_object_set_pages(struct drm_i915_gem_object *obj, obj->mm.get_page.sg_pos = pages->sgl; obj->mm.get_page.sg_idx = 0; + obj->mm.get_dma_page.sg_pos = pages->sgl; + obj->mm.get_dma_page.sg_idx = 0; obj->mm.pages = pages; @@ -155,6 +157,8 @@ static void __i915_gem_object_reset_page_iter(struct drm_i915_gem_object *obj) rcu_read_lock(); radix_tree_for_each_slot(slot, &obj->mm.get_page.radix, &iter, 0) radix_tree_delete(&obj->mm.get_page.radix, iter.index); + radix_tree_for_each_slot(slot, &obj->mm.get_dma_page.radix, &iter, 0) + radix_tree_delete(&obj->mm.get_dma_page.radix, iter.index); rcu_read_unlock(); } @@ -424,11 +428,12 @@ void __i915_gem_object_release_map(struct drm_i915_gem_object *obj) } struct scatterlist * -i915_gem_object_get_sg(struct drm_i915_gem_object *obj, - unsigned int n, - unsigned int *offset) +__i915_gem_object_get_sg(struct drm_i915_gem_object *obj, + struct i915_gem_object_page_iter *iter, + unsigned int n, + unsigned int *offset) { - struct i915_gem_object_page_iter *iter = &obj->mm.get_page; + const bool dma = iter == &obj->mm.get_dma_page; struct scatterlist *sg; unsigned int idx, count; @@ -457,7 +462,7 @@ i915_gem_object_get_sg(struct drm_i915_gem_object *obj, sg = iter->sg_pos; idx = iter->sg_idx; - count = __sg_page_count(sg); + count = dma ? __sg_dma_page_count(sg) : __sg_page_count(sg); while (idx + count <= n) { void *entry; @@ -485,7 +490,7 @@ i915_gem_object_get_sg(struct drm_i915_gem_object *obj, idx += count; sg = ____sg_next(sg); - count = __sg_page_count(sg); + count = dma ? __sg_dma_page_count(sg) : __sg_page_count(sg); } scan: @@ -503,7 +508,7 @@ i915_gem_object_get_sg(struct drm_i915_gem_object *obj, while (idx + count <= n) { idx += count; sg = ____sg_next(sg); - count = __sg_page_count(sg); + count = dma ? __sg_dma_page_count(sg) : __sg_page_count(sg); } *offset = n - idx; @@ -570,7 +575,7 @@ i915_gem_object_get_dma_address_len(struct drm_i915_gem_object *obj, struct scatterlist *sg; unsigned int offset; - sg = i915_gem_object_get_sg(obj, n, &offset); + sg = i915_gem_object_get_sg_dma(obj, n, &offset); if (len) *len = sg_dma_len(sg) - (offset << PAGE_SHIFT); diff --git a/drivers/gpu/drm/i915/gt/intel_ggtt.c b/drivers/gpu/drm/i915/gt/intel_ggtt.c index 81c05f551b9c..95e77d56c1ce 100644 --- a/drivers/gpu/drm/i915/gt/intel_ggtt.c +++ b/drivers/gpu/drm/i915/gt/intel_ggtt.c @@ -1383,7 +1383,7 @@ intel_partial_pages(const struct i915_ggtt_view *view, if (ret) goto err_sg_alloc; - iter = i915_gem_object_get_sg(obj, view->partial.offset, &offset); + iter = i915_gem_object_get_sg_dma(obj, view->partial.offset, &offset); GEM_BUG_ON(!iter); sg = st->sgl; @@ -1391,7 +1391,7 @@ intel_partial_pages(const struct i915_ggtt_view *view, do { unsigned int len; - len = min(iter->length - (offset << PAGE_SHIFT), + len = min(sg_dma_len(iter) - (offset << PAGE_SHIFT), count << PAGE_SHIFT); sg_set_page(sg, NULL, len, 0); sg_dma_address(sg) = diff --git a/drivers/gpu/drm/i915/i915_scatterlist.h b/drivers/gpu/drm/i915/i915_scatterlist.h index 510856887628..102d8d7007b6 100644 --- a/drivers/gpu/drm/i915/i915_scatterlist.h +++ b/drivers/gpu/drm/i915/i915_scatterlist.h @@ -48,6 +48,11 @@ static inline int __sg_page_count(const struct scatterlist *sg) return sg->length >> PAGE_SHIFT; } +static inline int __sg_dma_page_count(const struct scatterlist *sg) +{ + return sg_dma_len(sg) >> PAGE_SHIFT; +} + static inline struct scatterlist *____sg_next(struct scatterlist *sg) { ++sg; -- 2.25.1 _______________________________________________ Intel-gfx mailing list Intel-gfx@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/intel-gfx ^ permalink raw reply related [flat|nested] 12+ messages in thread
* Re: [Intel-gfx] [PATCH 2/2] drm/i915: Fix DMA mapped scatterlist lookup 2020-09-10 11:59 ` [Intel-gfx] [PATCH 2/2] drm/i915: Fix DMA mapped scatterlist lookup Tvrtko Ursulin @ 2020-09-10 13:31 ` Tom Murphy 2020-09-11 8:24 ` Tvrtko Ursulin 2020-09-10 14:50 ` [Intel-gfx] [PATCH v2] " Tvrtko Ursulin 1 sibling, 1 reply; 12+ messages in thread From: Tom Murphy @ 2020-09-10 13:31 UTC (permalink / raw) To: Tvrtko Ursulin Cc: Intel-gfx, Chris Wilson, Matthew Auld, Logan Gunthorpe, Lu Baolu This patch series fixes the issue I was having. I tested it with my patch set ("[PATCH V2 0/5] Convert the intel iommu driver to the dma-iommu api") applied, excluding the last patch in that series which disables the coalescing. So once your patch set is merged we should be good to convert the intel iommu driver to the dma-iommu api On Thu, 10 Sep 2020 at 12:59, Tvrtko Ursulin <tvrtko.ursulin@linux.intel.com> wrote: > > From: Tvrtko Ursulin <tvrtko.ursulin@intel.com> > > As the previous patch fixed the places where we walk the whole scatterlist > for DMA addresses, this patch fixes the random lookup functionality. > > To achieve this we have to add a second lookup iterator and add a > i915_gem_object_get_sg_dma helper, to be used analoguous to existing > i915_gem_object_get_sg_dma. Therefore two lookup caches are maintained per > object and they are flushed at the same point for simplicity. (Strictly > speaking the DMA cache should be flushed from i915_gem_gtt_finish_pages, > but today this conincides with unsetting of the pages in general.) > > Partial VMA view is then fixed to use the new DMA lookup and properly > query sg length. > > Signed-off-by: Tvrtko Ursulin <tvrtko.ursulin@intel.com> > Cc: Joonas Lahtinen <joonas.lahtinen@linux.intel.com> > Cc: Chris Wilson <chris@chris-wilson.co.uk> > Cc: Matthew Auld <matthew.auld@intel.com> > Cc: Lu Baolu <baolu.lu@linux.intel.com> > Cc: Tom Murphy <murphyt7@tcd.ie> > Cc: Logan Gunthorpe <logang@deltatee.com> > --- > drivers/gpu/drm/i915/gem/i915_gem_object.c | 2 ++ > drivers/gpu/drm/i915/gem/i915_gem_object.h | 20 +++++++++++++++++- > .../gpu/drm/i915/gem/i915_gem_object_types.h | 17 ++++++++------- > drivers/gpu/drm/i915/gem/i915_gem_pages.c | 21 ++++++++++++------- > drivers/gpu/drm/i915/gt/intel_ggtt.c | 4 ++-- > drivers/gpu/drm/i915/i915_scatterlist.h | 5 +++++ > 6 files changed, 51 insertions(+), 18 deletions(-) > > diff --git a/drivers/gpu/drm/i915/gem/i915_gem_object.c b/drivers/gpu/drm/i915/gem/i915_gem_object.c > index c8421fd9d2dc..ffeaf1b9b1bb 100644 > --- a/drivers/gpu/drm/i915/gem/i915_gem_object.c > +++ b/drivers/gpu/drm/i915/gem/i915_gem_object.c > @@ -73,6 +73,8 @@ void i915_gem_object_init(struct drm_i915_gem_object *obj, > obj->mm.madv = I915_MADV_WILLNEED; > INIT_RADIX_TREE(&obj->mm.get_page.radix, GFP_KERNEL | __GFP_NOWARN); > mutex_init(&obj->mm.get_page.lock); > + INIT_RADIX_TREE(&obj->mm.get_dma_page.radix, GFP_KERNEL | __GFP_NOWARN); > + mutex_init(&obj->mm.get_dma_page.lock); > > if (IS_ENABLED(CONFIG_LOCKDEP) && i915_gem_object_is_shrinkable(obj)) > i915_gem_shrinker_taints_mutex(to_i915(obj->base.dev), > diff --git a/drivers/gpu/drm/i915/gem/i915_gem_object.h b/drivers/gpu/drm/i915/gem/i915_gem_object.h > index d46db8d8f38e..7ba5e958a3d0 100644 > --- a/drivers/gpu/drm/i915/gem/i915_gem_object.h > +++ b/drivers/gpu/drm/i915/gem/i915_gem_object.h > @@ -275,8 +275,26 @@ int i915_gem_object_set_tiling(struct drm_i915_gem_object *obj, > unsigned int tiling, unsigned int stride); > > struct scatterlist * > +__i915_gem_object_get_sg(struct drm_i915_gem_object *obj, > + struct i915_gem_object_page_iter *iter, > + unsigned int n, > + unsigned int *offset); > + > +static inline struct scatterlist * > i915_gem_object_get_sg(struct drm_i915_gem_object *obj, > - unsigned int n, unsigned int *offset); > + unsigned int n, > + unsigned int *offset) > +{ > + return __i915_gem_object_get_sg(obj, &obj->mm.get_page, n, offset); > +} > + > +static inline struct scatterlist * > +i915_gem_object_get_sg_dma(struct drm_i915_gem_object *obj, > + unsigned int n, > + unsigned int *offset) > +{ > + return __i915_gem_object_get_sg(obj, &obj->mm.get_dma_page, n, offset); > +} > > struct page * > i915_gem_object_get_page(struct drm_i915_gem_object *obj, > diff --git a/drivers/gpu/drm/i915/gem/i915_gem_object_types.h b/drivers/gpu/drm/i915/gem/i915_gem_object_types.h > index b5c15557cc87..fedfebf13344 100644 > --- a/drivers/gpu/drm/i915/gem/i915_gem_object_types.h > +++ b/drivers/gpu/drm/i915/gem/i915_gem_object_types.h > @@ -80,6 +80,14 @@ struct i915_mmap_offset { > struct rb_node offset; > }; > > +struct i915_gem_object_page_iter { > + struct scatterlist *sg_pos; > + unsigned int sg_idx; /* in pages, but 32bit eek! */ > + > + struct radix_tree_root radix; > + struct mutex lock; /* protects this cache */ > +}; > + > struct drm_i915_gem_object { > struct drm_gem_object base; > > @@ -246,13 +254,8 @@ struct drm_i915_gem_object { > > I915_SELFTEST_DECLARE(unsigned int page_mask); > > - struct i915_gem_object_page_iter { > - struct scatterlist *sg_pos; > - unsigned int sg_idx; /* in pages, but 32bit eek! */ > - > - struct radix_tree_root radix; > - struct mutex lock; /* protects this cache */ > - } get_page; > + struct i915_gem_object_page_iter get_page; > + struct i915_gem_object_page_iter get_dma_page; > > /** > * Element within i915->mm.unbound_list or i915->mm.bound_list, > diff --git a/drivers/gpu/drm/i915/gem/i915_gem_pages.c b/drivers/gpu/drm/i915/gem/i915_gem_pages.c > index e8a083743e09..04a3c1233f80 100644 > --- a/drivers/gpu/drm/i915/gem/i915_gem_pages.c > +++ b/drivers/gpu/drm/i915/gem/i915_gem_pages.c > @@ -33,6 +33,8 @@ void __i915_gem_object_set_pages(struct drm_i915_gem_object *obj, > > obj->mm.get_page.sg_pos = pages->sgl; > obj->mm.get_page.sg_idx = 0; > + obj->mm.get_dma_page.sg_pos = pages->sgl; > + obj->mm.get_dma_page.sg_idx = 0; > > obj->mm.pages = pages; > > @@ -155,6 +157,8 @@ static void __i915_gem_object_reset_page_iter(struct drm_i915_gem_object *obj) > rcu_read_lock(); > radix_tree_for_each_slot(slot, &obj->mm.get_page.radix, &iter, 0) > radix_tree_delete(&obj->mm.get_page.radix, iter.index); > + radix_tree_for_each_slot(slot, &obj->mm.get_dma_page.radix, &iter, 0) > + radix_tree_delete(&obj->mm.get_dma_page.radix, iter.index); > rcu_read_unlock(); > } > > @@ -424,11 +428,12 @@ void __i915_gem_object_release_map(struct drm_i915_gem_object *obj) > } > > struct scatterlist * > -i915_gem_object_get_sg(struct drm_i915_gem_object *obj, > - unsigned int n, > - unsigned int *offset) > +__i915_gem_object_get_sg(struct drm_i915_gem_object *obj, > + struct i915_gem_object_page_iter *iter, > + unsigned int n, > + unsigned int *offset) > { > - struct i915_gem_object_page_iter *iter = &obj->mm.get_page; > + const bool dma = iter == &obj->mm.get_dma_page; > struct scatterlist *sg; > unsigned int idx, count; > > @@ -457,7 +462,7 @@ i915_gem_object_get_sg(struct drm_i915_gem_object *obj, > > sg = iter->sg_pos; > idx = iter->sg_idx; > - count = __sg_page_count(sg); > + count = dma ? __sg_dma_page_count(sg) : __sg_page_count(sg); > > while (idx + count <= n) { > void *entry; > @@ -485,7 +490,7 @@ i915_gem_object_get_sg(struct drm_i915_gem_object *obj, > > idx += count; > sg = ____sg_next(sg); > - count = __sg_page_count(sg); > + count = dma ? __sg_dma_page_count(sg) : __sg_page_count(sg); > } > > scan: > @@ -503,7 +508,7 @@ i915_gem_object_get_sg(struct drm_i915_gem_object *obj, > while (idx + count <= n) { > idx += count; > sg = ____sg_next(sg); > - count = __sg_page_count(sg); > + count = dma ? __sg_dma_page_count(sg) : __sg_page_count(sg); > } > > *offset = n - idx; > @@ -570,7 +575,7 @@ i915_gem_object_get_dma_address_len(struct drm_i915_gem_object *obj, > struct scatterlist *sg; > unsigned int offset; > > - sg = i915_gem_object_get_sg(obj, n, &offset); > + sg = i915_gem_object_get_sg_dma(obj, n, &offset); > > if (len) > *len = sg_dma_len(sg) - (offset << PAGE_SHIFT); > diff --git a/drivers/gpu/drm/i915/gt/intel_ggtt.c b/drivers/gpu/drm/i915/gt/intel_ggtt.c > index 81c05f551b9c..95e77d56c1ce 100644 > --- a/drivers/gpu/drm/i915/gt/intel_ggtt.c > +++ b/drivers/gpu/drm/i915/gt/intel_ggtt.c > @@ -1383,7 +1383,7 @@ intel_partial_pages(const struct i915_ggtt_view *view, > if (ret) > goto err_sg_alloc; > > - iter = i915_gem_object_get_sg(obj, view->partial.offset, &offset); > + iter = i915_gem_object_get_sg_dma(obj, view->partial.offset, &offset); > GEM_BUG_ON(!iter); > > sg = st->sgl; > @@ -1391,7 +1391,7 @@ intel_partial_pages(const struct i915_ggtt_view *view, > do { > unsigned int len; > > - len = min(iter->length - (offset << PAGE_SHIFT), > + len = min(sg_dma_len(iter) - (offset << PAGE_SHIFT), > count << PAGE_SHIFT); > sg_set_page(sg, NULL, len, 0); > sg_dma_address(sg) = > diff --git a/drivers/gpu/drm/i915/i915_scatterlist.h b/drivers/gpu/drm/i915/i915_scatterlist.h > index 510856887628..102d8d7007b6 100644 > --- a/drivers/gpu/drm/i915/i915_scatterlist.h > +++ b/drivers/gpu/drm/i915/i915_scatterlist.h > @@ -48,6 +48,11 @@ static inline int __sg_page_count(const struct scatterlist *sg) > return sg->length >> PAGE_SHIFT; > } > > +static inline int __sg_dma_page_count(const struct scatterlist *sg) > +{ > + return sg_dma_len(sg) >> PAGE_SHIFT; > +} > + > static inline struct scatterlist *____sg_next(struct scatterlist *sg) > { > ++sg; > -- > 2.25.1 > _______________________________________________ Intel-gfx mailing list Intel-gfx@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/intel-gfx ^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [Intel-gfx] [PATCH 2/2] drm/i915: Fix DMA mapped scatterlist lookup 2020-09-10 13:31 ` Tom Murphy @ 2020-09-11 8:24 ` Tvrtko Ursulin 0 siblings, 0 replies; 12+ messages in thread From: Tvrtko Ursulin @ 2020-09-11 8:24 UTC (permalink / raw) To: Tom Murphy Cc: Intel-gfx, Chris Wilson, Matthew Auld, Logan Gunthorpe, Lu Baolu On 10/09/2020 14:31, Tom Murphy wrote: > This patch series fixes the issue I was having. I tested it with my > patch set ("[PATCH V2 0/5] Convert the intel iommu driver to the > dma-iommu api") applied, excluding the last patch in that series which > disables the coalescing. > > So once your patch set is merged we should be good to convert the > intel iommu driver to the dma-iommu api There appears to be an issue on Ivybridge, which is an older platforms, which manifests like this: <3> [209.526605] DMAR: intel_iommu_map: iommu width (39) is not sufficient for the mapped address (ffff008000) Relevant iommu boot related messages are: <6>[ 0.184234] DMAR: Host address width 36 <6>[ 0.184245] DMAR: DRHD base: 0x000000fed90000 flags: 0x0 <6>[ 0.184288] DMAR: dmar0: reg_base_addr fed90000 ver 1:0 cap c0000020e60262 ecap f0101a <6>[ 0.184308] DMAR: DRHD base: 0x000000fed91000 flags: 0x1 <6>[ 0.184337] DMAR: dmar1: reg_base_addr fed91000 ver 1:0 cap c9008020660262 ecap f0105a <6>[ 0.184357] DMAR: RMRR base: 0x000000d8d28000 end: 0x000000d8d46fff <6>[ 0.184377] DMAR: RMRR base: 0x000000db000000 end: 0x000000df1fffff <6>[ 0.184398] DMAR-IR: IOAPIC id 2 under DRHD base 0xfed91000 IOMMU 1 <6>[ 0.184414] DMAR-IR: HPET id 0 under DRHD base 0xfed91000 <6>[ 0.184428] DMAR-IR: Queued invalidation will be enabled to support x2apic and Intr-remapping. <6>[ 0.185173] DMAR-IR: Enabled IRQ remapping in x2apic mode <6>[ 0.878934] DMAR: No ATSR found <6>[ 0.878966] DMAR: dmar0: Using Queued invalidation <6>[ 0.879007] DMAR: dmar1: Using Queued invalidation <6>[ 0.915032] DMAR: Intel(R) Virtualization Technology for Directed I/O <6>[ 0.915060] PCI-DMA: Using software bounce buffering for IO (SWIOTLB) <6>[ 0.915084] software IO TLB: mapped [mem 0xc80d4000-0xcc0d4000] (64MB) Full boot log at https://intel-gfx-ci.01.org/tree/drm-tip/Trybot_7054/fi-ivb-3770/boot0.txt, failures at https://intel-gfx-ci.01.org/tree/drm-tip/Trybot_7054/fi-ivb-3770/igt@i915_selftest@live@blt.html. I suspect this has to be about the dma-iommu conversion itself and not anything i915 is doing incorrectly? Something in the new mapping code not respecting the iommu width limitation? (To be clear these results are with the "[PATCH V2 0/5] Convert the intel iommu driver to the dma-iommu api" series applied, minus the not coalescing patch.) Regards, Tvrtko _______________________________________________ Intel-gfx mailing list Intel-gfx@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/intel-gfx ^ permalink raw reply [flat|nested] 12+ messages in thread
* [Intel-gfx] [PATCH v2] drm/i915: Fix DMA mapped scatterlist lookup 2020-09-10 11:59 ` [Intel-gfx] [PATCH 2/2] drm/i915: Fix DMA mapped scatterlist lookup Tvrtko Ursulin 2020-09-10 13:31 ` Tom Murphy @ 2020-09-10 14:50 ` Tvrtko Ursulin 2020-09-15 8:49 ` Chris Wilson 1 sibling, 1 reply; 12+ messages in thread From: Tvrtko Ursulin @ 2020-09-10 14:50 UTC (permalink / raw) To: Intel-gfx From: Tvrtko Ursulin <tvrtko.ursulin@intel.com> As the previous patch fixed the places where we walk the whole scatterlist for DMA addresses, this patch fixes the random lookup functionality. To achieve this we have to add a second lookup iterator and add a i915_gem_object_get_sg_dma helper, to be used analoguous to existing i915_gem_object_get_sg_dma. Therefore two lookup caches are maintained per object and they are flushed at the same point for simplicity. (Strictly speaking the DMA cache should be flushed from i915_gem_gtt_finish_pages, but today this conincides with unsetting of the pages in general.) Partial VMA view is then fixed to use the new DMA lookup and properly query sg length. v2: * Checkpatch. Signed-off-by: Tvrtko Ursulin <tvrtko.ursulin@intel.com> Cc: Joonas Lahtinen <joonas.lahtinen@linux.intel.com> Cc: Chris Wilson <chris@chris-wilson.co.uk> Cc: Matthew Auld <matthew.auld@intel.com> Cc: Lu Baolu <baolu.lu@linux.intel.com> Cc: Tom Murphy <murphyt7@tcd.ie> Cc: Logan Gunthorpe <logang@deltatee.com> --- drivers/gpu/drm/i915/gem/i915_gem_object.c | 2 ++ drivers/gpu/drm/i915/gem/i915_gem_object.h | 20 +++++++++++++++++- .../gpu/drm/i915/gem/i915_gem_object_types.h | 17 ++++++++------- drivers/gpu/drm/i915/gem/i915_gem_pages.c | 21 ++++++++++++------- drivers/gpu/drm/i915/gt/intel_ggtt.c | 4 ++-- drivers/gpu/drm/i915/i915_scatterlist.h | 5 +++++ 6 files changed, 51 insertions(+), 18 deletions(-) diff --git a/drivers/gpu/drm/i915/gem/i915_gem_object.c b/drivers/gpu/drm/i915/gem/i915_gem_object.c index c8421fd9d2dc..ffeaf1b9b1bb 100644 --- a/drivers/gpu/drm/i915/gem/i915_gem_object.c +++ b/drivers/gpu/drm/i915/gem/i915_gem_object.c @@ -73,6 +73,8 @@ void i915_gem_object_init(struct drm_i915_gem_object *obj, obj->mm.madv = I915_MADV_WILLNEED; INIT_RADIX_TREE(&obj->mm.get_page.radix, GFP_KERNEL | __GFP_NOWARN); mutex_init(&obj->mm.get_page.lock); + INIT_RADIX_TREE(&obj->mm.get_dma_page.radix, GFP_KERNEL | __GFP_NOWARN); + mutex_init(&obj->mm.get_dma_page.lock); if (IS_ENABLED(CONFIG_LOCKDEP) && i915_gem_object_is_shrinkable(obj)) i915_gem_shrinker_taints_mutex(to_i915(obj->base.dev), diff --git a/drivers/gpu/drm/i915/gem/i915_gem_object.h b/drivers/gpu/drm/i915/gem/i915_gem_object.h index d46db8d8f38e..44c6910e2669 100644 --- a/drivers/gpu/drm/i915/gem/i915_gem_object.h +++ b/drivers/gpu/drm/i915/gem/i915_gem_object.h @@ -275,8 +275,26 @@ int i915_gem_object_set_tiling(struct drm_i915_gem_object *obj, unsigned int tiling, unsigned int stride); struct scatterlist * +__i915_gem_object_get_sg(struct drm_i915_gem_object *obj, + struct i915_gem_object_page_iter *iter, + unsigned int n, + unsigned int *offset); + +static inline struct scatterlist * i915_gem_object_get_sg(struct drm_i915_gem_object *obj, - unsigned int n, unsigned int *offset); + unsigned int n, + unsigned int *offset) +{ + return __i915_gem_object_get_sg(obj, &obj->mm.get_page, n, offset); +} + +static inline struct scatterlist * +i915_gem_object_get_sg_dma(struct drm_i915_gem_object *obj, + unsigned int n, + unsigned int *offset) +{ + return __i915_gem_object_get_sg(obj, &obj->mm.get_dma_page, n, offset); +} struct page * i915_gem_object_get_page(struct drm_i915_gem_object *obj, diff --git a/drivers/gpu/drm/i915/gem/i915_gem_object_types.h b/drivers/gpu/drm/i915/gem/i915_gem_object_types.h index b5c15557cc87..fedfebf13344 100644 --- a/drivers/gpu/drm/i915/gem/i915_gem_object_types.h +++ b/drivers/gpu/drm/i915/gem/i915_gem_object_types.h @@ -80,6 +80,14 @@ struct i915_mmap_offset { struct rb_node offset; }; +struct i915_gem_object_page_iter { + struct scatterlist *sg_pos; + unsigned int sg_idx; /* in pages, but 32bit eek! */ + + struct radix_tree_root radix; + struct mutex lock; /* protects this cache */ +}; + struct drm_i915_gem_object { struct drm_gem_object base; @@ -246,13 +254,8 @@ struct drm_i915_gem_object { I915_SELFTEST_DECLARE(unsigned int page_mask); - struct i915_gem_object_page_iter { - struct scatterlist *sg_pos; - unsigned int sg_idx; /* in pages, but 32bit eek! */ - - struct radix_tree_root radix; - struct mutex lock; /* protects this cache */ - } get_page; + struct i915_gem_object_page_iter get_page; + struct i915_gem_object_page_iter get_dma_page; /** * Element within i915->mm.unbound_list or i915->mm.bound_list, diff --git a/drivers/gpu/drm/i915/gem/i915_gem_pages.c b/drivers/gpu/drm/i915/gem/i915_gem_pages.c index e8a083743e09..04a3c1233f80 100644 --- a/drivers/gpu/drm/i915/gem/i915_gem_pages.c +++ b/drivers/gpu/drm/i915/gem/i915_gem_pages.c @@ -33,6 +33,8 @@ void __i915_gem_object_set_pages(struct drm_i915_gem_object *obj, obj->mm.get_page.sg_pos = pages->sgl; obj->mm.get_page.sg_idx = 0; + obj->mm.get_dma_page.sg_pos = pages->sgl; + obj->mm.get_dma_page.sg_idx = 0; obj->mm.pages = pages; @@ -155,6 +157,8 @@ static void __i915_gem_object_reset_page_iter(struct drm_i915_gem_object *obj) rcu_read_lock(); radix_tree_for_each_slot(slot, &obj->mm.get_page.radix, &iter, 0) radix_tree_delete(&obj->mm.get_page.radix, iter.index); + radix_tree_for_each_slot(slot, &obj->mm.get_dma_page.radix, &iter, 0) + radix_tree_delete(&obj->mm.get_dma_page.radix, iter.index); rcu_read_unlock(); } @@ -424,11 +428,12 @@ void __i915_gem_object_release_map(struct drm_i915_gem_object *obj) } struct scatterlist * -i915_gem_object_get_sg(struct drm_i915_gem_object *obj, - unsigned int n, - unsigned int *offset) +__i915_gem_object_get_sg(struct drm_i915_gem_object *obj, + struct i915_gem_object_page_iter *iter, + unsigned int n, + unsigned int *offset) { - struct i915_gem_object_page_iter *iter = &obj->mm.get_page; + const bool dma = iter == &obj->mm.get_dma_page; struct scatterlist *sg; unsigned int idx, count; @@ -457,7 +462,7 @@ i915_gem_object_get_sg(struct drm_i915_gem_object *obj, sg = iter->sg_pos; idx = iter->sg_idx; - count = __sg_page_count(sg); + count = dma ? __sg_dma_page_count(sg) : __sg_page_count(sg); while (idx + count <= n) { void *entry; @@ -485,7 +490,7 @@ i915_gem_object_get_sg(struct drm_i915_gem_object *obj, idx += count; sg = ____sg_next(sg); - count = __sg_page_count(sg); + count = dma ? __sg_dma_page_count(sg) : __sg_page_count(sg); } scan: @@ -503,7 +508,7 @@ i915_gem_object_get_sg(struct drm_i915_gem_object *obj, while (idx + count <= n) { idx += count; sg = ____sg_next(sg); - count = __sg_page_count(sg); + count = dma ? __sg_dma_page_count(sg) : __sg_page_count(sg); } *offset = n - idx; @@ -570,7 +575,7 @@ i915_gem_object_get_dma_address_len(struct drm_i915_gem_object *obj, struct scatterlist *sg; unsigned int offset; - sg = i915_gem_object_get_sg(obj, n, &offset); + sg = i915_gem_object_get_sg_dma(obj, n, &offset); if (len) *len = sg_dma_len(sg) - (offset << PAGE_SHIFT); diff --git a/drivers/gpu/drm/i915/gt/intel_ggtt.c b/drivers/gpu/drm/i915/gt/intel_ggtt.c index 81c05f551b9c..95e77d56c1ce 100644 --- a/drivers/gpu/drm/i915/gt/intel_ggtt.c +++ b/drivers/gpu/drm/i915/gt/intel_ggtt.c @@ -1383,7 +1383,7 @@ intel_partial_pages(const struct i915_ggtt_view *view, if (ret) goto err_sg_alloc; - iter = i915_gem_object_get_sg(obj, view->partial.offset, &offset); + iter = i915_gem_object_get_sg_dma(obj, view->partial.offset, &offset); GEM_BUG_ON(!iter); sg = st->sgl; @@ -1391,7 +1391,7 @@ intel_partial_pages(const struct i915_ggtt_view *view, do { unsigned int len; - len = min(iter->length - (offset << PAGE_SHIFT), + len = min(sg_dma_len(iter) - (offset << PAGE_SHIFT), count << PAGE_SHIFT); sg_set_page(sg, NULL, len, 0); sg_dma_address(sg) = diff --git a/drivers/gpu/drm/i915/i915_scatterlist.h b/drivers/gpu/drm/i915/i915_scatterlist.h index 510856887628..102d8d7007b6 100644 --- a/drivers/gpu/drm/i915/i915_scatterlist.h +++ b/drivers/gpu/drm/i915/i915_scatterlist.h @@ -48,6 +48,11 @@ static inline int __sg_page_count(const struct scatterlist *sg) return sg->length >> PAGE_SHIFT; } +static inline int __sg_dma_page_count(const struct scatterlist *sg) +{ + return sg_dma_len(sg) >> PAGE_SHIFT; +} + static inline struct scatterlist *____sg_next(struct scatterlist *sg) { ++sg; -- 2.25.1 _______________________________________________ Intel-gfx mailing list Intel-gfx@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/intel-gfx ^ permalink raw reply related [flat|nested] 12+ messages in thread
* Re: [Intel-gfx] [PATCH v2] drm/i915: Fix DMA mapped scatterlist lookup 2020-09-10 14:50 ` [Intel-gfx] [PATCH v2] " Tvrtko Ursulin @ 2020-09-15 8:49 ` Chris Wilson 2020-10-06 9:27 ` Tvrtko Ursulin 0 siblings, 1 reply; 12+ messages in thread From: Chris Wilson @ 2020-09-15 8:49 UTC (permalink / raw) To: Intel-gfx, Tvrtko Ursulin Quoting Tvrtko Ursulin (2020-09-10 15:50:18) > From: Tvrtko Ursulin <tvrtko.ursulin@intel.com> > > As the previous patch fixed the places where we walk the whole scatterlist > for DMA addresses, this patch fixes the random lookup functionality. > > To achieve this we have to add a second lookup iterator and add a > i915_gem_object_get_sg_dma helper, to be used analoguous to existing > i915_gem_object_get_sg_dma. Therefore two lookup caches are maintained per > object and they are flushed at the same point for simplicity. (Strictly > speaking the DMA cache should be flushed from i915_gem_gtt_finish_pages, > but today this conincides with unsetting of the pages in general.) > > Partial VMA view is then fixed to use the new DMA lookup and properly > query sg length. > > v2: > * Checkpatch. > > Signed-off-by: Tvrtko Ursulin <tvrtko.ursulin@intel.com> > Cc: Joonas Lahtinen <joonas.lahtinen@linux.intel.com> > Cc: Chris Wilson <chris@chris-wilson.co.uk> > Cc: Matthew Auld <matthew.auld@intel.com> > Cc: Lu Baolu <baolu.lu@linux.intel.com> > Cc: Tom Murphy <murphyt7@tcd.ie> > Cc: Logan Gunthorpe <logang@deltatee.com> > --- > drivers/gpu/drm/i915/gem/i915_gem_object.c | 2 ++ > drivers/gpu/drm/i915/gem/i915_gem_object.h | 20 +++++++++++++++++- > .../gpu/drm/i915/gem/i915_gem_object_types.h | 17 ++++++++------- > drivers/gpu/drm/i915/gem/i915_gem_pages.c | 21 ++++++++++++------- > drivers/gpu/drm/i915/gt/intel_ggtt.c | 4 ++-- > drivers/gpu/drm/i915/i915_scatterlist.h | 5 +++++ > 6 files changed, 51 insertions(+), 18 deletions(-) > > diff --git a/drivers/gpu/drm/i915/gem/i915_gem_object.c b/drivers/gpu/drm/i915/gem/i915_gem_object.c > index c8421fd9d2dc..ffeaf1b9b1bb 100644 > --- a/drivers/gpu/drm/i915/gem/i915_gem_object.c > +++ b/drivers/gpu/drm/i915/gem/i915_gem_object.c > @@ -73,6 +73,8 @@ void i915_gem_object_init(struct drm_i915_gem_object *obj, > obj->mm.madv = I915_MADV_WILLNEED; > INIT_RADIX_TREE(&obj->mm.get_page.radix, GFP_KERNEL | __GFP_NOWARN); > mutex_init(&obj->mm.get_page.lock); > + INIT_RADIX_TREE(&obj->mm.get_dma_page.radix, GFP_KERNEL | __GFP_NOWARN); > + mutex_init(&obj->mm.get_dma_page.lock); > > if (IS_ENABLED(CONFIG_LOCKDEP) && i915_gem_object_is_shrinkable(obj)) > i915_gem_shrinker_taints_mutex(to_i915(obj->base.dev), > diff --git a/drivers/gpu/drm/i915/gem/i915_gem_object.h b/drivers/gpu/drm/i915/gem/i915_gem_object.h > index d46db8d8f38e..44c6910e2669 100644 > --- a/drivers/gpu/drm/i915/gem/i915_gem_object.h > +++ b/drivers/gpu/drm/i915/gem/i915_gem_object.h > @@ -275,8 +275,26 @@ int i915_gem_object_set_tiling(struct drm_i915_gem_object *obj, > unsigned int tiling, unsigned int stride); > > struct scatterlist * > +__i915_gem_object_get_sg(struct drm_i915_gem_object *obj, > + struct i915_gem_object_page_iter *iter, > + unsigned int n, > + unsigned int *offset); > + > +static inline struct scatterlist * > i915_gem_object_get_sg(struct drm_i915_gem_object *obj, > - unsigned int n, unsigned int *offset); > + unsigned int n, > + unsigned int *offset) > +{ > + return __i915_gem_object_get_sg(obj, &obj->mm.get_page, n, offset); > +} I wonder if get_sg_phys() is worth it to make it completely clear the difference between it and get_sg_dma() (and .get_phys_page?) ? > + > +static inline struct scatterlist * > +i915_gem_object_get_sg_dma(struct drm_i915_gem_object *obj, > + unsigned int n, > + unsigned int *offset) > +{ > + return __i915_gem_object_get_sg(obj, &obj->mm.get_dma_page, n, offset); > +} > > struct page * > i915_gem_object_get_page(struct drm_i915_gem_object *obj, > diff --git a/drivers/gpu/drm/i915/gem/i915_gem_object_types.h b/drivers/gpu/drm/i915/gem/i915_gem_object_types.h > index b5c15557cc87..fedfebf13344 100644 > --- a/drivers/gpu/drm/i915/gem/i915_gem_object_types.h > +++ b/drivers/gpu/drm/i915/gem/i915_gem_object_types.h > @@ -80,6 +80,14 @@ struct i915_mmap_offset { > struct rb_node offset; > }; > > +struct i915_gem_object_page_iter { > + struct scatterlist *sg_pos; > + unsigned int sg_idx; /* in pages, but 32bit eek! */ > + > + struct radix_tree_root radix; > + struct mutex lock; /* protects this cache */ > +}; All alternatives to trying to avoid a second random lookup were squashed, it really is two lists within one scatterlist and we do use both page/dma lookups in non-trivial ways. > + > struct drm_i915_gem_object { > struct drm_gem_object base; > > @@ -246,13 +254,8 @@ struct drm_i915_gem_object { > > I915_SELFTEST_DECLARE(unsigned int page_mask); > > - struct i915_gem_object_page_iter { > - struct scatterlist *sg_pos; > - unsigned int sg_idx; /* in pages, but 32bit eek! */ > - > - struct radix_tree_root radix; > - struct mutex lock; /* protects this cache */ > - } get_page; > + struct i915_gem_object_page_iter get_page; > + struct i915_gem_object_page_iter get_dma_page; > > /** > * Element within i915->mm.unbound_list or i915->mm.bound_list, > diff --git a/drivers/gpu/drm/i915/gem/i915_gem_pages.c b/drivers/gpu/drm/i915/gem/i915_gem_pages.c > index e8a083743e09..04a3c1233f80 100644 > --- a/drivers/gpu/drm/i915/gem/i915_gem_pages.c > +++ b/drivers/gpu/drm/i915/gem/i915_gem_pages.c > @@ -33,6 +33,8 @@ void __i915_gem_object_set_pages(struct drm_i915_gem_object *obj, > > obj->mm.get_page.sg_pos = pages->sgl; > obj->mm.get_page.sg_idx = 0; > + obj->mm.get_dma_page.sg_pos = pages->sgl; > + obj->mm.get_dma_page.sg_idx = 0; > > obj->mm.pages = pages; > > @@ -155,6 +157,8 @@ static void __i915_gem_object_reset_page_iter(struct drm_i915_gem_object *obj) > rcu_read_lock(); > radix_tree_for_each_slot(slot, &obj->mm.get_page.radix, &iter, 0) > radix_tree_delete(&obj->mm.get_page.radix, iter.index); > + radix_tree_for_each_slot(slot, &obj->mm.get_dma_page.radix, &iter, 0) > + radix_tree_delete(&obj->mm.get_dma_page.radix, iter.index); > rcu_read_unlock(); > } > > @@ -424,11 +428,12 @@ void __i915_gem_object_release_map(struct drm_i915_gem_object *obj) > } > > struct scatterlist * > -i915_gem_object_get_sg(struct drm_i915_gem_object *obj, > - unsigned int n, > - unsigned int *offset) > +__i915_gem_object_get_sg(struct drm_i915_gem_object *obj, > + struct i915_gem_object_page_iter *iter, > + unsigned int n, > + unsigned int *offset) > { > - struct i915_gem_object_page_iter *iter = &obj->mm.get_page; > + const bool dma = iter == &obj->mm.get_dma_page; > struct scatterlist *sg; > unsigned int idx, count; > > @@ -457,7 +462,7 @@ i915_gem_object_get_sg(struct drm_i915_gem_object *obj, > > sg = iter->sg_pos; > idx = iter->sg_idx; > - count = __sg_page_count(sg); > + count = dma ? __sg_dma_page_count(sg) : __sg_page_count(sg); > > while (idx + count <= n) { > void *entry; > @@ -485,7 +490,7 @@ i915_gem_object_get_sg(struct drm_i915_gem_object *obj, > > idx += count; > sg = ____sg_next(sg); > - count = __sg_page_count(sg); > + count = dma ? __sg_dma_page_count(sg) : __sg_page_count(sg); > } > > scan: > @@ -503,7 +508,7 @@ i915_gem_object_get_sg(struct drm_i915_gem_object *obj, > while (idx + count <= n) { > idx += count; > sg = ____sg_next(sg); > - count = __sg_page_count(sg); > + count = dma ? __sg_dma_page_count(sg) : __sg_page_count(sg); Hmm. So for a coalesced dma entry, we must therefore end up with some entries where the sg_dma_length is 0. We then insert multiple sg for the same idx into the radix tree, causing it to return an error, -EEXIST. We eat such errors and so overwrite the empty entry with the final sg that actually has a valid length. Ok. Looks like get_sg already handles zero length elements and you caught all 3 __sg_page_count(). > } > > *offset = n - idx; > @@ -570,7 +575,7 @@ i915_gem_object_get_dma_address_len(struct drm_i915_gem_object *obj, > struct scatterlist *sg; > unsigned int offset; > > - sg = i915_gem_object_get_sg(obj, n, &offset); > + sg = i915_gem_object_get_sg_dma(obj, n, &offset); > > if (len) > *len = sg_dma_len(sg) - (offset << PAGE_SHIFT); > diff --git a/drivers/gpu/drm/i915/gt/intel_ggtt.c b/drivers/gpu/drm/i915/gt/intel_ggtt.c > index 81c05f551b9c..95e77d56c1ce 100644 > --- a/drivers/gpu/drm/i915/gt/intel_ggtt.c > +++ b/drivers/gpu/drm/i915/gt/intel_ggtt.c > @@ -1383,7 +1383,7 @@ intel_partial_pages(const struct i915_ggtt_view *view, > if (ret) > goto err_sg_alloc; > > - iter = i915_gem_object_get_sg(obj, view->partial.offset, &offset); > + iter = i915_gem_object_get_sg_dma(obj, view->partial.offset, &offset); > GEM_BUG_ON(!iter); > > sg = st->sgl; > @@ -1391,7 +1391,7 @@ intel_partial_pages(const struct i915_ggtt_view *view, > do { > unsigned int len; > > - len = min(iter->length - (offset << PAGE_SHIFT), > + len = min(sg_dma_len(iter) - (offset << PAGE_SHIFT), > count << PAGE_SHIFT); > sg_set_page(sg, NULL, len, 0); > sg_dma_address(sg) = I didn't find any other users for get_sg() and this looks to catch all the fixes required for using sg_dma. > diff --git a/drivers/gpu/drm/i915/i915_scatterlist.h b/drivers/gpu/drm/i915/i915_scatterlist.h > index 510856887628..102d8d7007b6 100644 > --- a/drivers/gpu/drm/i915/i915_scatterlist.h > +++ b/drivers/gpu/drm/i915/i915_scatterlist.h > @@ -48,6 +48,11 @@ static inline int __sg_page_count(const struct scatterlist *sg) > return sg->length >> PAGE_SHIFT; > } > > +static inline int __sg_dma_page_count(const struct scatterlist *sg) > +{ > + return sg_dma_len(sg) >> PAGE_SHIFT; > +} Reviewed-by: Chris Wilson <chris@chris-wilson.co.uk> Do we need cc:stable? -Chris _______________________________________________ Intel-gfx mailing list Intel-gfx@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/intel-gfx ^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [Intel-gfx] [PATCH v2] drm/i915: Fix DMA mapped scatterlist lookup 2020-09-15 8:49 ` Chris Wilson @ 2020-10-06 9:27 ` Tvrtko Ursulin 0 siblings, 0 replies; 12+ messages in thread From: Tvrtko Ursulin @ 2020-10-06 9:27 UTC (permalink / raw) To: Chris Wilson, Intel-gfx On 15/09/2020 09:49, Chris Wilson wrote: > Quoting Tvrtko Ursulin (2020-09-10 15:50:18) >> From: Tvrtko Ursulin <tvrtko.ursulin@intel.com> >> >> As the previous patch fixed the places where we walk the whole scatterlist >> for DMA addresses, this patch fixes the random lookup functionality. >> >> To achieve this we have to add a second lookup iterator and add a >> i915_gem_object_get_sg_dma helper, to be used analoguous to existing >> i915_gem_object_get_sg_dma. Therefore two lookup caches are maintained per >> object and they are flushed at the same point for simplicity. (Strictly >> speaking the DMA cache should be flushed from i915_gem_gtt_finish_pages, >> but today this conincides with unsetting of the pages in general.) >> >> Partial VMA view is then fixed to use the new DMA lookup and properly >> query sg length. >> >> v2: >> * Checkpatch. >> >> Signed-off-by: Tvrtko Ursulin <tvrtko.ursulin@intel.com> >> Cc: Joonas Lahtinen <joonas.lahtinen@linux.intel.com> >> Cc: Chris Wilson <chris@chris-wilson.co.uk> >> Cc: Matthew Auld <matthew.auld@intel.com> >> Cc: Lu Baolu <baolu.lu@linux.intel.com> >> Cc: Tom Murphy <murphyt7@tcd.ie> >> Cc: Logan Gunthorpe <logang@deltatee.com> >> --- >> drivers/gpu/drm/i915/gem/i915_gem_object.c | 2 ++ >> drivers/gpu/drm/i915/gem/i915_gem_object.h | 20 +++++++++++++++++- >> .../gpu/drm/i915/gem/i915_gem_object_types.h | 17 ++++++++------- >> drivers/gpu/drm/i915/gem/i915_gem_pages.c | 21 ++++++++++++------- >> drivers/gpu/drm/i915/gt/intel_ggtt.c | 4 ++-- >> drivers/gpu/drm/i915/i915_scatterlist.h | 5 +++++ >> 6 files changed, 51 insertions(+), 18 deletions(-) >> >> diff --git a/drivers/gpu/drm/i915/gem/i915_gem_object.c b/drivers/gpu/drm/i915/gem/i915_gem_object.c >> index c8421fd9d2dc..ffeaf1b9b1bb 100644 >> --- a/drivers/gpu/drm/i915/gem/i915_gem_object.c >> +++ b/drivers/gpu/drm/i915/gem/i915_gem_object.c >> @@ -73,6 +73,8 @@ void i915_gem_object_init(struct drm_i915_gem_object *obj, >> obj->mm.madv = I915_MADV_WILLNEED; >> INIT_RADIX_TREE(&obj->mm.get_page.radix, GFP_KERNEL | __GFP_NOWARN); >> mutex_init(&obj->mm.get_page.lock); >> + INIT_RADIX_TREE(&obj->mm.get_dma_page.radix, GFP_KERNEL | __GFP_NOWARN); >> + mutex_init(&obj->mm.get_dma_page.lock); >> >> if (IS_ENABLED(CONFIG_LOCKDEP) && i915_gem_object_is_shrinkable(obj)) >> i915_gem_shrinker_taints_mutex(to_i915(obj->base.dev), >> diff --git a/drivers/gpu/drm/i915/gem/i915_gem_object.h b/drivers/gpu/drm/i915/gem/i915_gem_object.h >> index d46db8d8f38e..44c6910e2669 100644 >> --- a/drivers/gpu/drm/i915/gem/i915_gem_object.h >> +++ b/drivers/gpu/drm/i915/gem/i915_gem_object.h >> @@ -275,8 +275,26 @@ int i915_gem_object_set_tiling(struct drm_i915_gem_object *obj, >> unsigned int tiling, unsigned int stride); >> >> struct scatterlist * >> +__i915_gem_object_get_sg(struct drm_i915_gem_object *obj, >> + struct i915_gem_object_page_iter *iter, >> + unsigned int n, >> + unsigned int *offset); >> + >> +static inline struct scatterlist * >> i915_gem_object_get_sg(struct drm_i915_gem_object *obj, >> - unsigned int n, unsigned int *offset); >> + unsigned int n, >> + unsigned int *offset) >> +{ >> + return __i915_gem_object_get_sg(obj, &obj->mm.get_page, n, offset); >> +} > > I wonder if get_sg_phys() is worth it to make it completely clear the > difference between it and get_sg_dma() (and .get_phys_page?) ? > >> + >> +static inline struct scatterlist * >> +i915_gem_object_get_sg_dma(struct drm_i915_gem_object *obj, >> + unsigned int n, >> + unsigned int *offset) >> +{ >> + return __i915_gem_object_get_sg(obj, &obj->mm.get_dma_page, n, offset); >> +} >> >> struct page * >> i915_gem_object_get_page(struct drm_i915_gem_object *obj, >> diff --git a/drivers/gpu/drm/i915/gem/i915_gem_object_types.h b/drivers/gpu/drm/i915/gem/i915_gem_object_types.h >> index b5c15557cc87..fedfebf13344 100644 >> --- a/drivers/gpu/drm/i915/gem/i915_gem_object_types.h >> +++ b/drivers/gpu/drm/i915/gem/i915_gem_object_types.h >> @@ -80,6 +80,14 @@ struct i915_mmap_offset { >> struct rb_node offset; >> }; >> >> +struct i915_gem_object_page_iter { >> + struct scatterlist *sg_pos; >> + unsigned int sg_idx; /* in pages, but 32bit eek! */ >> + >> + struct radix_tree_root radix; >> + struct mutex lock; /* protects this cache */ >> +}; > > All alternatives to trying to avoid a second random lookup were > squashed, it really is two lists within one scatterlist and we do use > both page/dma lookups in non-trivial ways. > >> + >> struct drm_i915_gem_object { >> struct drm_gem_object base; >> >> @@ -246,13 +254,8 @@ struct drm_i915_gem_object { >> >> I915_SELFTEST_DECLARE(unsigned int page_mask); >> >> - struct i915_gem_object_page_iter { >> - struct scatterlist *sg_pos; >> - unsigned int sg_idx; /* in pages, but 32bit eek! */ >> - >> - struct radix_tree_root radix; >> - struct mutex lock; /* protects this cache */ >> - } get_page; >> + struct i915_gem_object_page_iter get_page; >> + struct i915_gem_object_page_iter get_dma_page; >> >> /** >> * Element within i915->mm.unbound_list or i915->mm.bound_list, >> diff --git a/drivers/gpu/drm/i915/gem/i915_gem_pages.c b/drivers/gpu/drm/i915/gem/i915_gem_pages.c >> index e8a083743e09..04a3c1233f80 100644 >> --- a/drivers/gpu/drm/i915/gem/i915_gem_pages.c >> +++ b/drivers/gpu/drm/i915/gem/i915_gem_pages.c >> @@ -33,6 +33,8 @@ void __i915_gem_object_set_pages(struct drm_i915_gem_object *obj, >> >> obj->mm.get_page.sg_pos = pages->sgl; >> obj->mm.get_page.sg_idx = 0; >> + obj->mm.get_dma_page.sg_pos = pages->sgl; >> + obj->mm.get_dma_page.sg_idx = 0; >> >> obj->mm.pages = pages; >> >> @@ -155,6 +157,8 @@ static void __i915_gem_object_reset_page_iter(struct drm_i915_gem_object *obj) >> rcu_read_lock(); >> radix_tree_for_each_slot(slot, &obj->mm.get_page.radix, &iter, 0) >> radix_tree_delete(&obj->mm.get_page.radix, iter.index); >> + radix_tree_for_each_slot(slot, &obj->mm.get_dma_page.radix, &iter, 0) >> + radix_tree_delete(&obj->mm.get_dma_page.radix, iter.index); >> rcu_read_unlock(); >> } >> >> @@ -424,11 +428,12 @@ void __i915_gem_object_release_map(struct drm_i915_gem_object *obj) >> } >> >> struct scatterlist * >> -i915_gem_object_get_sg(struct drm_i915_gem_object *obj, >> - unsigned int n, >> - unsigned int *offset) >> +__i915_gem_object_get_sg(struct drm_i915_gem_object *obj, >> + struct i915_gem_object_page_iter *iter, >> + unsigned int n, >> + unsigned int *offset) >> { >> - struct i915_gem_object_page_iter *iter = &obj->mm.get_page; >> + const bool dma = iter == &obj->mm.get_dma_page; >> struct scatterlist *sg; >> unsigned int idx, count; >> >> @@ -457,7 +462,7 @@ i915_gem_object_get_sg(struct drm_i915_gem_object *obj, >> >> sg = iter->sg_pos; >> idx = iter->sg_idx; >> - count = __sg_page_count(sg); >> + count = dma ? __sg_dma_page_count(sg) : __sg_page_count(sg); >> >> while (idx + count <= n) { >> void *entry; >> @@ -485,7 +490,7 @@ i915_gem_object_get_sg(struct drm_i915_gem_object *obj, >> >> idx += count; >> sg = ____sg_next(sg); >> - count = __sg_page_count(sg); >> + count = dma ? __sg_dma_page_count(sg) : __sg_page_count(sg); >> } >> >> scan: >> @@ -503,7 +508,7 @@ i915_gem_object_get_sg(struct drm_i915_gem_object *obj, >> while (idx + count <= n) { >> idx += count; >> sg = ____sg_next(sg); >> - count = __sg_page_count(sg); >> + count = dma ? __sg_dma_page_count(sg) : __sg_page_count(sg); > > Hmm. So for a coalesced dma entry, we must therefore end up with some > entries where the sg_dma_length is 0. > > We then insert multiple sg for the same idx into the radix tree, causing > it to return an error, -EEXIST. We eat such errors and so overwrite the > empty entry with the final sg that actually has a valid length. > > Ok. Looks like get_sg already handles zero length elements and you > caught all 3 __sg_page_count(). > >> } >> >> *offset = n - idx; >> @@ -570,7 +575,7 @@ i915_gem_object_get_dma_address_len(struct drm_i915_gem_object *obj, >> struct scatterlist *sg; >> unsigned int offset; >> >> - sg = i915_gem_object_get_sg(obj, n, &offset); >> + sg = i915_gem_object_get_sg_dma(obj, n, &offset); >> >> if (len) >> *len = sg_dma_len(sg) - (offset << PAGE_SHIFT); >> diff --git a/drivers/gpu/drm/i915/gt/intel_ggtt.c b/drivers/gpu/drm/i915/gt/intel_ggtt.c >> index 81c05f551b9c..95e77d56c1ce 100644 >> --- a/drivers/gpu/drm/i915/gt/intel_ggtt.c >> +++ b/drivers/gpu/drm/i915/gt/intel_ggtt.c >> @@ -1383,7 +1383,7 @@ intel_partial_pages(const struct i915_ggtt_view *view, >> if (ret) >> goto err_sg_alloc; >> >> - iter = i915_gem_object_get_sg(obj, view->partial.offset, &offset); >> + iter = i915_gem_object_get_sg_dma(obj, view->partial.offset, &offset); >> GEM_BUG_ON(!iter); >> >> sg = st->sgl; >> @@ -1391,7 +1391,7 @@ intel_partial_pages(const struct i915_ggtt_view *view, >> do { >> unsigned int len; >> >> - len = min(iter->length - (offset << PAGE_SHIFT), >> + len = min(sg_dma_len(iter) - (offset << PAGE_SHIFT), >> count << PAGE_SHIFT); >> sg_set_page(sg, NULL, len, 0); >> sg_dma_address(sg) = > > I didn't find any other users for get_sg() and this looks to catch all > the fixes required for using sg_dma. > >> diff --git a/drivers/gpu/drm/i915/i915_scatterlist.h b/drivers/gpu/drm/i915/i915_scatterlist.h >> index 510856887628..102d8d7007b6 100644 >> --- a/drivers/gpu/drm/i915/i915_scatterlist.h >> +++ b/drivers/gpu/drm/i915/i915_scatterlist.h >> @@ -48,6 +48,11 @@ static inline int __sg_page_count(const struct scatterlist *sg) >> return sg->length >> PAGE_SHIFT; >> } >> >> +static inline int __sg_dma_page_count(const struct scatterlist *sg) >> +{ >> + return sg_dma_len(sg) >> PAGE_SHIFT; >> +} > > Reviewed-by: Chris Wilson <chris@chris-wilson.co.uk> Thanks! > Do we need cc:stable? Probably not given how this oversight only gets exposed once the Intel IOMMU dma-api refactoring work lands. Regards, Tvrtko _______________________________________________ Intel-gfx mailing list Intel-gfx@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/intel-gfx ^ permalink raw reply [flat|nested] 12+ messages in thread
* [Intel-gfx] ✗ Fi.CI.CHECKPATCH: warning for Fixes for incoming smarter IOMMU 2020-09-10 11:58 [Intel-gfx] [PATCH 0/2] Fixes for incoming smarter IOMMU Tvrtko Ursulin 2020-09-10 11:58 ` [Intel-gfx] [PATCH 1/2] drm/i915: Fix DMA mapped scatterlist walks Tvrtko Ursulin 2020-09-10 11:59 ` [Intel-gfx] [PATCH 2/2] drm/i915: Fix DMA mapped scatterlist lookup Tvrtko Ursulin @ 2020-09-10 14:23 ` Patchwork 2020-09-10 14:47 ` [Intel-gfx] ✓ Fi.CI.BAT: success " Patchwork ` (2 subsequent siblings) 5 siblings, 0 replies; 12+ messages in thread From: Patchwork @ 2020-09-10 14:23 UTC (permalink / raw) To: Tvrtko Ursulin; +Cc: intel-gfx == Series Details == Series: Fixes for incoming smarter IOMMU URL : https://patchwork.freedesktop.org/series/81552/ State : warning == Summary == $ dim checkpatch origin/drm-tip 47b38f77a065 drm/i915: Fix DMA mapped scatterlist walks 1f4eba21c445 drm/i915: Fix DMA mapped scatterlist lookup -:64: CHECK:PARENTHESIS_ALIGNMENT: Alignment should match open parenthesis #64: FILE: drivers/gpu/drm/i915/gem/i915_gem_object.h:293: +i915_gem_object_get_sg_dma(struct drm_i915_gem_object *obj, + unsigned int n, total: 0 errors, 0 warnings, 1 checks, 155 lines checked _______________________________________________ Intel-gfx mailing list Intel-gfx@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/intel-gfx ^ permalink raw reply [flat|nested] 12+ messages in thread
* [Intel-gfx] ✓ Fi.CI.BAT: success for Fixes for incoming smarter IOMMU 2020-09-10 11:58 [Intel-gfx] [PATCH 0/2] Fixes for incoming smarter IOMMU Tvrtko Ursulin ` (2 preceding siblings ...) 2020-09-10 14:23 ` [Intel-gfx] ✗ Fi.CI.CHECKPATCH: warning for Fixes for incoming smarter IOMMU Patchwork @ 2020-09-10 14:47 ` Patchwork 2020-09-10 16:45 ` [Intel-gfx] ✓ Fi.CI.BAT: success for Fixes for incoming smarter IOMMU (rev2) Patchwork 2020-09-10 18:32 ` [Intel-gfx] ✓ Fi.CI.IGT: " Patchwork 5 siblings, 0 replies; 12+ messages in thread From: Patchwork @ 2020-09-10 14:47 UTC (permalink / raw) To: Tvrtko Ursulin; +Cc: intel-gfx [-- Attachment #1.1: Type: text/plain, Size: 7259 bytes --] == Series Details == Series: Fixes for incoming smarter IOMMU URL : https://patchwork.freedesktop.org/series/81552/ State : success == Summary == CI Bug Log - changes from CI_DRM_8995 -> Patchwork_18471 ==================================================== Summary ------- **SUCCESS** No regressions found. External URL: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_18471/index.html Known issues ------------ Here are the changes found in Patchwork_18471 that come from known issues: ### IGT changes ### #### Issues hit #### * igt@gem_tiled_blits@basic: - fi-tgl-y: [PASS][1] -> [DMESG-WARN][2] ([i915#402]) [1]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_8995/fi-tgl-y/igt@gem_tiled_blits@basic.html [2]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_18471/fi-tgl-y/igt@gem_tiled_blits@basic.html * igt@i915_module_load@reload: - fi-apl-guc: [PASS][3] -> [DMESG-WARN][4] ([i915#1635] / [i915#1982]) [3]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_8995/fi-apl-guc/igt@i915_module_load@reload.html [4]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_18471/fi-apl-guc/igt@i915_module_load@reload.html - fi-tgl-y: [PASS][5] -> [DMESG-WARN][6] ([i915#1982]) [5]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_8995/fi-tgl-y/igt@i915_module_load@reload.html [6]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_18471/fi-tgl-y/igt@i915_module_load@reload.html * igt@i915_pm_rpm@basic-pci-d3-state: - fi-byt-j1900: [PASS][7] -> [DMESG-WARN][8] ([i915#1982]) [7]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_8995/fi-byt-j1900/igt@i915_pm_rpm@basic-pci-d3-state.html [8]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_18471/fi-byt-j1900/igt@i915_pm_rpm@basic-pci-d3-state.html * igt@kms_flip@basic-flip-vs-wf_vblank@b-edp1: - fi-icl-u2: [PASS][9] -> [DMESG-WARN][10] ([i915#1982]) [9]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_8995/fi-icl-u2/igt@kms_flip@basic-flip-vs-wf_vblank@b-edp1.html [10]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_18471/fi-icl-u2/igt@kms_flip@basic-flip-vs-wf_vblank@b-edp1.html #### Possible fixes #### * igt@gem_flink_basic@bad-flink: - fi-tgl-y: [DMESG-WARN][11] ([i915#402]) -> [PASS][12] [11]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_8995/fi-tgl-y/igt@gem_flink_basic@bad-flink.html [12]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_18471/fi-tgl-y/igt@gem_flink_basic@bad-flink.html * igt@i915_module_load@reload: - fi-bxt-dsi: [DMESG-WARN][13] ([i915#1635] / [i915#1982]) -> [PASS][14] [13]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_8995/fi-bxt-dsi/igt@i915_module_load@reload.html [14]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_18471/fi-bxt-dsi/igt@i915_module_load@reload.html * igt@kms_busy@basic@flip: - {fi-tgl-dsi}: [DMESG-WARN][15] ([i915#1982]) -> [PASS][16] [15]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_8995/fi-tgl-dsi/igt@kms_busy@basic@flip.html [16]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_18471/fi-tgl-dsi/igt@kms_busy@basic@flip.html - fi-kbl-x1275: [DMESG-WARN][17] ([i915#62] / [i915#92] / [i915#95]) -> [PASS][18] [17]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_8995/fi-kbl-x1275/igt@kms_busy@basic@flip.html [18]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_18471/fi-kbl-x1275/igt@kms_busy@basic@flip.html * igt@kms_cursor_legacy@basic-busy-flip-before-cursor-atomic: - fi-icl-u2: [DMESG-WARN][19] ([i915#1982]) -> [PASS][20] +1 similar issue [19]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_8995/fi-icl-u2/igt@kms_cursor_legacy@basic-busy-flip-before-cursor-atomic.html [20]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_18471/fi-icl-u2/igt@kms_cursor_legacy@basic-busy-flip-before-cursor-atomic.html - fi-bsw-kefka: [DMESG-WARN][21] ([i915#1982]) -> [PASS][22] [21]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_8995/fi-bsw-kefka/igt@kms_cursor_legacy@basic-busy-flip-before-cursor-atomic.html [22]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_18471/fi-bsw-kefka/igt@kms_cursor_legacy@basic-busy-flip-before-cursor-atomic.html * igt@kms_force_connector_basic@force-connector-state: - fi-tgl-y: [DMESG-WARN][23] ([i915#1982]) -> [PASS][24] +1 similar issue [23]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_8995/fi-tgl-y/igt@kms_force_connector_basic@force-connector-state.html [24]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_18471/fi-tgl-y/igt@kms_force_connector_basic@force-connector-state.html #### Warnings #### * igt@i915_pm_rpm@module-reload: - fi-kbl-x1275: [DMESG-FAIL][25] ([i915#62]) -> [DMESG-FAIL][26] ([i915#62] / [i915#95]) [25]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_8995/fi-kbl-x1275/igt@i915_pm_rpm@module-reload.html [26]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_18471/fi-kbl-x1275/igt@i915_pm_rpm@module-reload.html * igt@kms_force_connector_basic@prune-stale-modes: - fi-kbl-x1275: [DMESG-WARN][27] ([i915#62] / [i915#92]) -> [DMESG-WARN][28] ([i915#62] / [i915#92] / [i915#95]) +2 similar issues [27]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_8995/fi-kbl-x1275/igt@kms_force_connector_basic@prune-stale-modes.html [28]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_18471/fi-kbl-x1275/igt@kms_force_connector_basic@prune-stale-modes.html * igt@prime_vgem@basic-fence-flip: - fi-kbl-x1275: [DMESG-WARN][29] ([i915#62] / [i915#92] / [i915#95]) -> [DMESG-WARN][30] ([i915#62] / [i915#92]) +2 similar issues [29]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_8995/fi-kbl-x1275/igt@prime_vgem@basic-fence-flip.html [30]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_18471/fi-kbl-x1275/igt@prime_vgem@basic-fence-flip.html {name}: This element is suppressed. This means it is ignored when computing the status of the difference (SUCCESS, WARNING, or FAILURE). [i915#1635]: https://gitlab.freedesktop.org/drm/intel/issues/1635 [i915#1982]: https://gitlab.freedesktop.org/drm/intel/issues/1982 [i915#402]: https://gitlab.freedesktop.org/drm/intel/issues/402 [i915#62]: https://gitlab.freedesktop.org/drm/intel/issues/62 [i915#92]: https://gitlab.freedesktop.org/drm/intel/issues/92 [i915#95]: https://gitlab.freedesktop.org/drm/intel/issues/95 Participating hosts (44 -> 39) ------------------------------ Missing (5): fi-hsw-4200u fi-byt-squawks fi-bsw-cyan fi-byt-clapper fi-bdw-samus Build changes ------------- * Linux: CI_DRM_8995 -> Patchwork_18471 CI-20190529: 20190529 CI_DRM_8995: 42b001bdd89c350f154145c196931bdfa86bc13c @ git://anongit.freedesktop.org/gfx-ci/linux IGT_5780: 9c5dfeb0338d7f98ad998663a595eab71ea887f3 @ git://anongit.freedesktop.org/xorg/app/intel-gpu-tools Patchwork_18471: 1f4eba21c445098787d166e39501fc92156e3d8f @ git://anongit.freedesktop.org/gfx-ci/linux == Linux commits == 1f4eba21c445 drm/i915: Fix DMA mapped scatterlist lookup 47b38f77a065 drm/i915: Fix DMA mapped scatterlist walks == Logs == For more details see: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_18471/index.html [-- Attachment #1.2: Type: text/html, Size: 9736 bytes --] [-- Attachment #2: Type: text/plain, Size: 160 bytes --] _______________________________________________ Intel-gfx mailing list Intel-gfx@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/intel-gfx ^ permalink raw reply [flat|nested] 12+ messages in thread
* [Intel-gfx] ✓ Fi.CI.BAT: success for Fixes for incoming smarter IOMMU (rev2) 2020-09-10 11:58 [Intel-gfx] [PATCH 0/2] Fixes for incoming smarter IOMMU Tvrtko Ursulin ` (3 preceding siblings ...) 2020-09-10 14:47 ` [Intel-gfx] ✓ Fi.CI.BAT: success " Patchwork @ 2020-09-10 16:45 ` Patchwork 2020-09-10 18:32 ` [Intel-gfx] ✓ Fi.CI.IGT: " Patchwork 5 siblings, 0 replies; 12+ messages in thread From: Patchwork @ 2020-09-10 16:45 UTC (permalink / raw) To: Tvrtko Ursulin; +Cc: intel-gfx [-- Attachment #1.1: Type: text/plain, Size: 6866 bytes --] == Series Details == Series: Fixes for incoming smarter IOMMU (rev2) URL : https://patchwork.freedesktop.org/series/81552/ State : success == Summary == CI Bug Log - changes from CI_DRM_8995 -> Patchwork_18475 ==================================================== Summary ------- **SUCCESS** No regressions found. External URL: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_18475/index.html Known issues ------------ Here are the changes found in Patchwork_18475 that come from known issues: ### IGT changes ### #### Issues hit #### * igt@gem_flink_basic@basic: - fi-tgl-y: [PASS][1] -> [DMESG-WARN][2] ([i915#402]) +1 similar issue [1]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_8995/fi-tgl-y/igt@gem_flink_basic@basic.html [2]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_18475/fi-tgl-y/igt@gem_flink_basic@basic.html * igt@i915_pm_rpm@basic-pci-d3-state: - fi-byt-j1900: [PASS][3] -> [DMESG-WARN][4] ([i915#1982]) [3]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_8995/fi-byt-j1900/igt@i915_pm_rpm@basic-pci-d3-state.html [4]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_18475/fi-byt-j1900/igt@i915_pm_rpm@basic-pci-d3-state.html * igt@i915_selftest@live@gem_contexts: - fi-tgl-u2: [PASS][5] -> [INCOMPLETE][6] ([i915#2045]) [5]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_8995/fi-tgl-u2/igt@i915_selftest@live@gem_contexts.html [6]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_18475/fi-tgl-u2/igt@i915_selftest@live@gem_contexts.html #### Possible fixes #### * igt@gem_flink_basic@bad-flink: - fi-tgl-y: [DMESG-WARN][7] ([i915#402]) -> [PASS][8] [7]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_8995/fi-tgl-y/igt@gem_flink_basic@bad-flink.html [8]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_18475/fi-tgl-y/igt@gem_flink_basic@bad-flink.html * igt@i915_module_load@reload: - fi-bxt-dsi: [DMESG-WARN][9] ([i915#1635] / [i915#1982]) -> [PASS][10] [9]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_8995/fi-bxt-dsi/igt@i915_module_load@reload.html [10]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_18475/fi-bxt-dsi/igt@i915_module_load@reload.html * igt@kms_busy@basic@flip: - fi-kbl-x1275: [DMESG-WARN][11] ([i915#62] / [i915#92] / [i915#95]) -> [PASS][12] [11]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_8995/fi-kbl-x1275/igt@kms_busy@basic@flip.html [12]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_18475/fi-kbl-x1275/igt@kms_busy@basic@flip.html * igt@kms_cursor_legacy@basic-busy-flip-before-cursor-atomic: - fi-icl-u2: [DMESG-WARN][13] ([i915#1982]) -> [PASS][14] +1 similar issue [13]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_8995/fi-icl-u2/igt@kms_cursor_legacy@basic-busy-flip-before-cursor-atomic.html [14]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_18475/fi-icl-u2/igt@kms_cursor_legacy@basic-busy-flip-before-cursor-atomic.html - fi-bsw-kefka: [DMESG-WARN][15] ([i915#1982]) -> [PASS][16] +1 similar issue [15]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_8995/fi-bsw-kefka/igt@kms_cursor_legacy@basic-busy-flip-before-cursor-atomic.html [16]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_18475/fi-bsw-kefka/igt@kms_cursor_legacy@basic-busy-flip-before-cursor-atomic.html * igt@kms_flip@basic-flip-vs-wf_vblank@c-hdmi-a2: - fi-skl-guc: [DMESG-WARN][17] ([i915#2203]) -> [PASS][18] [17]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_8995/fi-skl-guc/igt@kms_flip@basic-flip-vs-wf_vblank@c-hdmi-a2.html [18]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_18475/fi-skl-guc/igt@kms_flip@basic-flip-vs-wf_vblank@c-hdmi-a2.html * {igt@kms_pipe_crc_basic@compare-crc-sanitycheck-pipe-b}: - fi-tgl-y: [DMESG-WARN][19] ([i915#1982]) -> [PASS][20] [19]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_8995/fi-tgl-y/igt@kms_pipe_crc_basic@compare-crc-sanitycheck-pipe-b.html [20]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_18475/fi-tgl-y/igt@kms_pipe_crc_basic@compare-crc-sanitycheck-pipe-b.html #### Warnings #### * igt@i915_pm_rpm@module-reload: - fi-kbl-guc: [DMESG-WARN][21] ([i915#2203]) -> [DMESG-FAIL][22] ([i915#2203]) [21]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_8995/fi-kbl-guc/igt@i915_pm_rpm@module-reload.html [22]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_18475/fi-kbl-guc/igt@i915_pm_rpm@module-reload.html * igt@kms_flip@basic-plain-flip@a-dp1: - fi-kbl-x1275: [DMESG-WARN][23] ([i915#62] / [i915#92] / [i915#95]) -> [DMESG-WARN][24] ([i915#62] / [i915#92]) [23]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_8995/fi-kbl-x1275/igt@kms_flip@basic-plain-flip@a-dp1.html [24]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_18475/fi-kbl-x1275/igt@kms_flip@basic-plain-flip@a-dp1.html * igt@kms_force_connector_basic@prune-stale-modes: - fi-kbl-x1275: [DMESG-WARN][25] ([i915#62] / [i915#92]) -> [DMESG-WARN][26] ([i915#62] / [i915#92] / [i915#95]) +2 similar issues [25]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_8995/fi-kbl-x1275/igt@kms_force_connector_basic@prune-stale-modes.html [26]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_18475/fi-kbl-x1275/igt@kms_force_connector_basic@prune-stale-modes.html {name}: This element is suppressed. This means it is ignored when computing the status of the difference (SUCCESS, WARNING, or FAILURE). [i915#1635]: https://gitlab.freedesktop.org/drm/intel/issues/1635 [i915#1982]: https://gitlab.freedesktop.org/drm/intel/issues/1982 [i915#2045]: https://gitlab.freedesktop.org/drm/intel/issues/2045 [i915#2203]: https://gitlab.freedesktop.org/drm/intel/issues/2203 [i915#402]: https://gitlab.freedesktop.org/drm/intel/issues/402 [i915#62]: https://gitlab.freedesktop.org/drm/intel/issues/62 [i915#92]: https://gitlab.freedesktop.org/drm/intel/issues/92 [i915#95]: https://gitlab.freedesktop.org/drm/intel/issues/95 Participating hosts (44 -> 39) ------------------------------ Missing (5): fi-hsw-4200u fi-byt-squawks fi-bsw-cyan fi-byt-clapper fi-bdw-samus Build changes ------------- * Linux: CI_DRM_8995 -> Patchwork_18475 CI-20190529: 20190529 CI_DRM_8995: 42b001bdd89c350f154145c196931bdfa86bc13c @ git://anongit.freedesktop.org/gfx-ci/linux IGT_5780: 9c5dfeb0338d7f98ad998663a595eab71ea887f3 @ git://anongit.freedesktop.org/xorg/app/intel-gpu-tools Patchwork_18475: 535386ef9e488ca8cc244527d3543df9282c7e2f @ git://anongit.freedesktop.org/gfx-ci/linux == Linux commits == 535386ef9e48 drm/i915: Fix DMA mapped scatterlist lookup 58caa91d1c63 drm/i915: Fix DMA mapped scatterlist walks == Logs == For more details see: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_18475/index.html [-- Attachment #1.2: Type: text/html, Size: 8909 bytes --] [-- Attachment #2: Type: text/plain, Size: 160 bytes --] _______________________________________________ Intel-gfx mailing list Intel-gfx@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/intel-gfx ^ permalink raw reply [flat|nested] 12+ messages in thread
* [Intel-gfx] ✓ Fi.CI.IGT: success for Fixes for incoming smarter IOMMU (rev2) 2020-09-10 11:58 [Intel-gfx] [PATCH 0/2] Fixes for incoming smarter IOMMU Tvrtko Ursulin ` (4 preceding siblings ...) 2020-09-10 16:45 ` [Intel-gfx] ✓ Fi.CI.BAT: success for Fixes for incoming smarter IOMMU (rev2) Patchwork @ 2020-09-10 18:32 ` Patchwork 5 siblings, 0 replies; 12+ messages in thread From: Patchwork @ 2020-09-10 18:32 UTC (permalink / raw) To: Tvrtko Ursulin; +Cc: intel-gfx [-- Attachment #1.1: Type: text/plain, Size: 14699 bytes --] == Series Details == Series: Fixes for incoming smarter IOMMU (rev2) URL : https://patchwork.freedesktop.org/series/81552/ State : success == Summary == CI Bug Log - changes from CI_DRM_8995_full -> Patchwork_18475_full ==================================================== Summary ------- **SUCCESS** No regressions found. Known issues ------------ Here are the changes found in Patchwork_18475_full that come from known issues: ### IGT changes ### #### Issues hit #### * igt@gem_ctx_persistence@engines-mixed-process@vcs0: - shard-iclb: [PASS][1] -> [FAIL][2] ([i915#2374]) [1]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_8995/shard-iclb8/igt@gem_ctx_persistence@engines-mixed-process@vcs0.html [2]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_18475/shard-iclb7/igt@gem_ctx_persistence@engines-mixed-process@vcs0.html * igt@gem_exec_reloc@basic-many-active@rcs0: - shard-glk: [PASS][3] -> [FAIL][4] ([i915#2389]) [3]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_8995/shard-glk7/igt@gem_exec_reloc@basic-many-active@rcs0.html [4]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_18475/shard-glk6/igt@gem_exec_reloc@basic-many-active@rcs0.html * igt@kms_big_fb@x-tiled-8bpp-rotate-180: - shard-apl: [PASS][5] -> [DMESG-WARN][6] ([i915#1635] / [i915#1982]) +1 similar issue [5]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_8995/shard-apl1/igt@kms_big_fb@x-tiled-8bpp-rotate-180.html [6]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_18475/shard-apl7/igt@kms_big_fb@x-tiled-8bpp-rotate-180.html * igt@kms_cursor_crc@pipe-a-cursor-suspend: - shard-kbl: [PASS][7] -> [DMESG-WARN][8] ([i915#180]) +4 similar issues [7]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_8995/shard-kbl1/igt@kms_cursor_crc@pipe-a-cursor-suspend.html [8]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_18475/shard-kbl4/igt@kms_cursor_crc@pipe-a-cursor-suspend.html * igt@kms_cursor_crc@pipe-c-cursor-128x128-sliding: - shard-skl: [PASS][9] -> [FAIL][10] ([i915#54]) [9]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_8995/shard-skl6/igt@kms_cursor_crc@pipe-c-cursor-128x128-sliding.html [10]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_18475/shard-skl8/igt@kms_cursor_crc@pipe-c-cursor-128x128-sliding.html * igt@kms_cursor_legacy@short-flip-before-cursor-atomic-transitions: - shard-glk: [PASS][11] -> [DMESG-WARN][12] ([i915#1982]) [11]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_8995/shard-glk5/igt@kms_cursor_legacy@short-flip-before-cursor-atomic-transitions.html [12]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_18475/shard-glk8/igt@kms_cursor_legacy@short-flip-before-cursor-atomic-transitions.html * igt@kms_flip_tiling@flip-to-x-tiled: - shard-skl: [PASS][13] -> [FAIL][14] ([i915#167]) [13]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_8995/shard-skl8/igt@kms_flip_tiling@flip-to-x-tiled.html [14]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_18475/shard-skl3/igt@kms_flip_tiling@flip-to-x-tiled.html * igt@kms_frontbuffer_tracking@psr-1p-primscrn-pri-shrfb-draw-mmap-gtt: - shard-tglb: [PASS][15] -> [DMESG-WARN][16] ([i915#1982]) +2 similar issues [15]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_8995/shard-tglb5/igt@kms_frontbuffer_tracking@psr-1p-primscrn-pri-shrfb-draw-mmap-gtt.html [16]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_18475/shard-tglb7/igt@kms_frontbuffer_tracking@psr-1p-primscrn-pri-shrfb-draw-mmap-gtt.html * igt@kms_plane@plane-panning-bottom-right-pipe-b-planes: - shard-skl: [PASS][17] -> [DMESG-WARN][18] ([i915#1982]) +6 similar issues [17]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_8995/shard-skl5/igt@kms_plane@plane-panning-bottom-right-pipe-b-planes.html [18]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_18475/shard-skl9/igt@kms_plane@plane-panning-bottom-right-pipe-b-planes.html * igt@kms_plane_alpha_blend@pipe-a-constant-alpha-min: - shard-skl: [PASS][19] -> [FAIL][20] ([fdo#108145] / [i915#265]) [19]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_8995/shard-skl3/igt@kms_plane_alpha_blend@pipe-a-constant-alpha-min.html [20]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_18475/shard-skl2/igt@kms_plane_alpha_blend@pipe-a-constant-alpha-min.html * igt@kms_psr@psr2_cursor_render: - shard-iclb: [PASS][21] -> [SKIP][22] ([fdo#109441]) +2 similar issues [21]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_8995/shard-iclb2/igt@kms_psr@psr2_cursor_render.html [22]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_18475/shard-iclb1/igt@kms_psr@psr2_cursor_render.html #### Possible fixes #### * igt@gem_ctx_persistence@legacy-engines-mixed-process@render: - shard-skl: [FAIL][23] ([i915#2374]) -> [PASS][24] [23]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_8995/shard-skl10/igt@gem_ctx_persistence@legacy-engines-mixed-process@render.html [24]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_18475/shard-skl7/igt@gem_ctx_persistence@legacy-engines-mixed-process@render.html * igt@gem_eio@in-flight-suspend: - shard-kbl: [DMESG-WARN][25] ([i915#180]) -> [PASS][26] +2 similar issues [25]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_8995/shard-kbl3/igt@gem_eio@in-flight-suspend.html [26]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_18475/shard-kbl3/igt@gem_eio@in-flight-suspend.html * igt@gem_exec_whisper@basic-queues-forked: - shard-glk: [DMESG-WARN][27] ([i915#118] / [i915#95]) -> [PASS][28] [27]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_8995/shard-glk4/igt@gem_exec_whisper@basic-queues-forked.html [28]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_18475/shard-glk2/igt@gem_exec_whisper@basic-queues-forked.html * igt@gem_userptr_blits@unsync-unmap-cycles: - shard-skl: [TIMEOUT][29] ([i915#1958]) -> [PASS][30] [29]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_8995/shard-skl8/igt@gem_userptr_blits@unsync-unmap-cycles.html [30]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_18475/shard-skl6/igt@gem_userptr_blits@unsync-unmap-cycles.html * igt@i915_selftest@live@gem_contexts: - shard-skl: [INCOMPLETE][31] -> [PASS][32] [31]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_8995/shard-skl3/igt@i915_selftest@live@gem_contexts.html [32]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_18475/shard-skl2/igt@i915_selftest@live@gem_contexts.html * igt@kms_big_fb@y-tiled-32bpp-rotate-180: - shard-skl: [DMESG-WARN][33] ([i915#1982]) -> [PASS][34] +6 similar issues [33]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_8995/shard-skl7/igt@kms_big_fb@y-tiled-32bpp-rotate-180.html [34]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_18475/shard-skl5/igt@kms_big_fb@y-tiled-32bpp-rotate-180.html * igt@kms_cursor_edge_walk@pipe-b-128x128-left-edge: - shard-glk: [DMESG-WARN][35] ([i915#1982]) -> [PASS][36] [35]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_8995/shard-glk2/igt@kms_cursor_edge_walk@pipe-b-128x128-left-edge.html [36]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_18475/shard-glk9/igt@kms_cursor_edge_walk@pipe-b-128x128-left-edge.html * igt@kms_cursor_legacy@short-flip-before-cursor-atomic-transitions: - shard-tglb: [DMESG-WARN][37] ([i915#1982]) -> [PASS][38] [37]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_8995/shard-tglb2/igt@kms_cursor_legacy@short-flip-before-cursor-atomic-transitions.html [38]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_18475/shard-tglb5/igt@kms_cursor_legacy@short-flip-before-cursor-atomic-transitions.html - shard-kbl: [DMESG-WARN][39] ([i915#1982]) -> [PASS][40] +1 similar issue [39]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_8995/shard-kbl7/igt@kms_cursor_legacy@short-flip-before-cursor-atomic-transitions.html [40]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_18475/shard-kbl1/igt@kms_cursor_legacy@short-flip-before-cursor-atomic-transitions.html * igt@kms_flip@flip-vs-suspend-interruptible@c-edp1: - shard-skl: [INCOMPLETE][41] ([i915#198]) -> [PASS][42] +1 similar issue [41]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_8995/shard-skl2/igt@kms_flip@flip-vs-suspend-interruptible@c-edp1.html [42]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_18475/shard-skl1/igt@kms_flip@flip-vs-suspend-interruptible@c-edp1.html * igt@kms_flip@plain-flip-fb-recreate@b-hdmi-a2: - shard-glk: [FAIL][43] ([i915#2122]) -> [PASS][44] [43]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_8995/shard-glk8/igt@kms_flip@plain-flip-fb-recreate@b-hdmi-a2.html [44]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_18475/shard-glk4/igt@kms_flip@plain-flip-fb-recreate@b-hdmi-a2.html * igt@kms_flip@plain-flip-ts-check-interruptible@b-edp1: - shard-skl: [FAIL][45] ([i915#2122]) -> [PASS][46] [45]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_8995/shard-skl10/igt@kms_flip@plain-flip-ts-check-interruptible@b-edp1.html [46]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_18475/shard-skl10/igt@kms_flip@plain-flip-ts-check-interruptible@b-edp1.html * igt@kms_hdr@bpc-switch-dpms: - shard-skl: [FAIL][47] ([i915#1188]) -> [PASS][48] [47]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_8995/shard-skl1/igt@kms_hdr@bpc-switch-dpms.html [48]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_18475/shard-skl3/igt@kms_hdr@bpc-switch-dpms.html * igt@kms_plane_alpha_blend@pipe-a-coverage-7efc: - shard-skl: [DMESG-FAIL][49] ([fdo#108145] / [i915#1982]) -> [PASS][50] [49]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_8995/shard-skl4/igt@kms_plane_alpha_blend@pipe-a-coverage-7efc.html [50]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_18475/shard-skl6/igt@kms_plane_alpha_blend@pipe-a-coverage-7efc.html * igt@kms_plane_alpha_blend@pipe-c-constant-alpha-min: - shard-skl: [FAIL][51] ([fdo#108145] / [i915#265]) -> [PASS][52] +1 similar issue [51]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_8995/shard-skl10/igt@kms_plane_alpha_blend@pipe-c-constant-alpha-min.html [52]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_18475/shard-skl10/igt@kms_plane_alpha_blend@pipe-c-constant-alpha-min.html * igt@perf@polling-parameterized: - shard-skl: [FAIL][53] ([i915#1542]) -> [PASS][54] [53]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_8995/shard-skl7/igt@perf@polling-parameterized.html [54]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_18475/shard-skl4/igt@perf@polling-parameterized.html #### Warnings #### * igt@i915_pm_dc@dc3co-vpb-simulation: - shard-iclb: [SKIP][55] ([i915#588]) -> [SKIP][56] ([i915#658]) [55]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_8995/shard-iclb2/igt@i915_pm_dc@dc3co-vpb-simulation.html [56]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_18475/shard-iclb5/igt@i915_pm_dc@dc3co-vpb-simulation.html * igt@i915_pm_rc6_residency@rc6-idle: - shard-iclb: [WARN][57] ([i915#1515]) -> [FAIL][58] ([i915#1515]) [57]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_8995/shard-iclb1/igt@i915_pm_rc6_residency@rc6-idle.html [58]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_18475/shard-iclb2/igt@i915_pm_rc6_residency@rc6-idle.html * igt@kms_content_protection@atomic: - shard-apl: [TIMEOUT][59] ([i915#1319] / [i915#1635]) -> [TIMEOUT][60] ([i915#1319] / [i915#1635] / [i915#1958]) [59]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_8995/shard-apl1/igt@kms_content_protection@atomic.html [60]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_18475/shard-apl1/igt@kms_content_protection@atomic.html * igt@kms_flip@flip-vs-expired-vblank-interruptible@a-edp1: - shard-skl: [DMESG-WARN][61] ([i915#1982]) -> [DMESG-FAIL][62] ([i915#1982] / [i915#79]) [61]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_8995/shard-skl9/igt@kms_flip@flip-vs-expired-vblank-interruptible@a-edp1.html [62]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_18475/shard-skl9/igt@kms_flip@flip-vs-expired-vblank-interruptible@a-edp1.html {name}: This element is suppressed. This means it is ignored when computing the status of the difference (SUCCESS, WARNING, or FAILURE). [fdo#108145]: https://bugs.freedesktop.org/show_bug.cgi?id=108145 [fdo#109441]: https://bugs.freedesktop.org/show_bug.cgi?id=109441 [i915#118]: https://gitlab.freedesktop.org/drm/intel/issues/118 [i915#1188]: https://gitlab.freedesktop.org/drm/intel/issues/1188 [i915#1319]: https://gitlab.freedesktop.org/drm/intel/issues/1319 [i915#1515]: https://gitlab.freedesktop.org/drm/intel/issues/1515 [i915#1542]: https://gitlab.freedesktop.org/drm/intel/issues/1542 [i915#1635]: https://gitlab.freedesktop.org/drm/intel/issues/1635 [i915#167]: https://gitlab.freedesktop.org/drm/intel/issues/167 [i915#180]: https://gitlab.freedesktop.org/drm/intel/issues/180 [i915#1958]: https://gitlab.freedesktop.org/drm/intel/issues/1958 [i915#198]: https://gitlab.freedesktop.org/drm/intel/issues/198 [i915#1982]: https://gitlab.freedesktop.org/drm/intel/issues/1982 [i915#2122]: https://gitlab.freedesktop.org/drm/intel/issues/2122 [i915#2374]: https://gitlab.freedesktop.org/drm/intel/issues/2374 [i915#2389]: https://gitlab.freedesktop.org/drm/intel/issues/2389 [i915#265]: https://gitlab.freedesktop.org/drm/intel/issues/265 [i915#54]: https://gitlab.freedesktop.org/drm/intel/issues/54 [i915#588]: https://gitlab.freedesktop.org/drm/intel/issues/588 [i915#658]: https://gitlab.freedesktop.org/drm/intel/issues/658 [i915#79]: https://gitlab.freedesktop.org/drm/intel/issues/79 [i915#95]: https://gitlab.freedesktop.org/drm/intel/issues/95 Participating hosts (12 -> 11) ------------------------------ Missing (1): pig-snb-2600 Build changes ------------- * Linux: CI_DRM_8995 -> Patchwork_18475 CI-20190529: 20190529 CI_DRM_8995: 42b001bdd89c350f154145c196931bdfa86bc13c @ git://anongit.freedesktop.org/gfx-ci/linux IGT_5780: 9c5dfeb0338d7f98ad998663a595eab71ea887f3 @ git://anongit.freedesktop.org/xorg/app/intel-gpu-tools Patchwork_18475: 535386ef9e488ca8cc244527d3543df9282c7e2f @ git://anongit.freedesktop.org/gfx-ci/linux piglit_4509: fdc5a4ca11124ab8413c7988896eec4c97336694 @ git://anongit.freedesktop.org/piglit == Logs == For more details see: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_18475/index.html [-- Attachment #1.2: Type: text/html, Size: 17466 bytes --] [-- Attachment #2: Type: text/plain, Size: 160 bytes --] _______________________________________________ Intel-gfx mailing list Intel-gfx@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/intel-gfx ^ permalink raw reply [flat|nested] 12+ messages in thread
end of thread, other threads:[~2020-10-06 9:27 UTC | newest] Thread overview: 12+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2020-09-10 11:58 [Intel-gfx] [PATCH 0/2] Fixes for incoming smarter IOMMU Tvrtko Ursulin 2020-09-10 11:58 ` [Intel-gfx] [PATCH 1/2] drm/i915: Fix DMA mapped scatterlist walks Tvrtko Ursulin 2020-09-10 11:59 ` [Intel-gfx] [PATCH 2/2] drm/i915: Fix DMA mapped scatterlist lookup Tvrtko Ursulin 2020-09-10 13:31 ` Tom Murphy 2020-09-11 8:24 ` Tvrtko Ursulin 2020-09-10 14:50 ` [Intel-gfx] [PATCH v2] " Tvrtko Ursulin 2020-09-15 8:49 ` Chris Wilson 2020-10-06 9:27 ` Tvrtko Ursulin 2020-09-10 14:23 ` [Intel-gfx] ✗ Fi.CI.CHECKPATCH: warning for Fixes for incoming smarter IOMMU Patchwork 2020-09-10 14:47 ` [Intel-gfx] ✓ Fi.CI.BAT: success " Patchwork 2020-09-10 16:45 ` [Intel-gfx] ✓ Fi.CI.BAT: success for Fixes for incoming smarter IOMMU (rev2) Patchwork 2020-09-10 18:32 ` [Intel-gfx] ✓ Fi.CI.IGT: " Patchwork
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox