drm/i915: Convert i915_ggtt_view to use an anonymous union
Reading the ggtt_views is much more pleasant without the extra characters from specifying the union (i.e. ggtt_view.partial rather than ggtt_view.params.partial). To make this work inside i915_vma_compare() with only a single memcmp requires us to ensure that there are no uninitialised bytes within each branch of the union (we make sure the structs are packed) and we need to store the size of each branch. v4: Rewrite changelog and add comments explaining the assert. Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk> Cc: Daniel Vetter <daniel.vetter@ffwll.ch> Link: http://patchwork.freedesktop.org/patch/msgid/20170114002827.31315-5-chris@chris-wilson.co.uk Reviewed-by: Joonas Lahtinen <joonas.lahtinen@linux.intel.com> Reviewed-by: Tvrtko Ursulin <tvrtko.ursulin@intel.com>
This commit is contained in:
@@ -1760,10 +1760,10 @@ compute_partial_view(struct drm_i915_gem_object *obj,
|
||||
chunk = roundup(chunk, tile_row_pages(obj));
|
||||
|
||||
view.type = I915_GGTT_VIEW_PARTIAL;
|
||||
view.params.partial.offset = rounddown(page_offset, chunk);
|
||||
view.params.partial.size =
|
||||
view.partial.offset = rounddown(page_offset, chunk);
|
||||
view.partial.size =
|
||||
min_t(unsigned int, chunk,
|
||||
(obj->base.size >> PAGE_SHIFT) - view.params.partial.offset);
|
||||
(obj->base.size >> PAGE_SHIFT) - view.partial.offset);
|
||||
|
||||
/* If the partial covers the entire object, just create a normal VMA. */
|
||||
if (chunk >= obj->base.size >> PAGE_SHIFT)
|
||||
@@ -1879,7 +1879,7 @@ int i915_gem_fault(struct vm_area_struct *area, struct vm_fault *vmf)
|
||||
|
||||
/* Finally, remap it using the new GTT offset */
|
||||
ret = remap_io_mapping(area,
|
||||
area->vm_start + (vma->ggtt_view.params.partial.offset << PAGE_SHIFT),
|
||||
area->vm_start + (vma->ggtt_view.partial.offset << PAGE_SHIFT),
|
||||
(ggtt->mappable_base + vma->node.start) >> PAGE_SHIFT,
|
||||
min_t(u64, vma->size, area->vm_end - area->vm_start),
|
||||
&ggtt->mappable);
|
||||
|
Reference in New Issue
Block a user