drm/i915: check memory is mappable in read_from_page
On small-bar systems we could be given something non-mappable here, which leads to nasty oops. Make this nicer by checking if the resource is mappable or not, and return an error otherwise. v2: drop GEM_BUG_ON(flags & I915_BO_ALLOC_GPU_ONLY) Signed-off-by: Matthew Auld <matthew.auld@intel.com> Cc: Jianshui Yu <jianshui.yu@intel.com> Cc: Ville Syrjälä <ville.syrjala@linux.intel.com> Cc: Nirmoy Das <nirmoy.das@intel.com> Reviewed-by: Nirmoy Das <nirmoy.das@intel.com> Link: https://patchwork.freedesktop.org/patch/msgid/20221004131916.233474-5-matthew.auld@intel.com
This commit is contained in:
parent
e3afc69018
commit
7024f80efc
@ -444,6 +444,16 @@ i915_gem_object_read_from_page_iomap(struct drm_i915_gem_object *obj, u64 offset
|
||||
io_mapping_unmap(src_map);
|
||||
}
|
||||
|
||||
static bool object_has_mappable_iomem(struct drm_i915_gem_object *obj)
|
||||
{
|
||||
GEM_BUG_ON(!i915_gem_object_has_iomem(obj));
|
||||
|
||||
if (IS_DGFX(to_i915(obj->base.dev)))
|
||||
return i915_ttm_resource_mappable(i915_gem_to_ttm(obj)->resource);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* i915_gem_object_read_from_page - read data from the page of a GEM object
|
||||
* @obj: GEM object to read from
|
||||
@ -466,7 +476,7 @@ int i915_gem_object_read_from_page(struct drm_i915_gem_object *obj, u64 offset,
|
||||
|
||||
if (i915_gem_object_has_struct_page(obj))
|
||||
i915_gem_object_read_from_page_kmap(obj, offset, dst, size);
|
||||
else if (i915_gem_object_has_iomem(obj))
|
||||
else if (i915_gem_object_has_iomem(obj) && object_has_mappable_iomem(obj))
|
||||
i915_gem_object_read_from_page_iomap(obj, offset, dst, size);
|
||||
else
|
||||
return -ENODEV;
|
||||
|
Loading…
x
Reference in New Issue
Block a user