Commit 0e997a36 authored by Matthew Auld's avatar Matthew Auld

drm/i915/gem: clear userspace buffers for LMEM

All userspace objects must be cleared when allocating the backing store,
before they are potentially visible to userspace.  For now use simple
CPU based clearing to do this for device local-memory objects, note that
in the near future this will instead use the blitter engine.
Signed-off-by: default avatarMatthew Auld <matthew.auld@intel.com>
Cc: Joonas Lahtinen <joonas.lahtinen@linux.intel.com>
Cc: Thomas Hellström <thomas.hellstrom@linux.intel.com>
Cc: Daniele Ceraolo Spurio <daniele.ceraolospurio@intel.com>
Cc: Lionel Landwerlin <lionel.g.landwerlin@linux.intel.com>
Cc: Jon Bloomfield <jon.bloomfield@intel.com>
Cc: Jordan Justen <jordan.l.justen@intel.com>
Cc: Daniel Vetter <daniel.vetter@intel.com>
Cc: Kenneth Graunke <kenneth@whitecape.org>
Cc: Jason Ekstrand <jason@jlekstrand.net>
Cc: Dave Airlie <airlied@gmail.com>
Cc: dri-devel@lists.freedesktop.org
Cc: mesa-dev@lists.freedesktop.org
Reviewed-by: default avatarKenneth Graunke <kenneth@whitecape.org>
Link: https://patchwork.freedesktop.org/patch/msgid/20210429103056.407067-8-matthew.auld@intel.com
parent 4f869f1d
...@@ -71,6 +71,7 @@ static int ...@@ -71,6 +71,7 @@ static int
i915_gem_setup(struct drm_i915_gem_object *obj, u64 size) i915_gem_setup(struct drm_i915_gem_object *obj, u64 size)
{ {
struct intel_memory_region *mr = obj->mm.placements[0]; struct intel_memory_region *mr = obj->mm.placements[0];
unsigned int flags;
int ret; int ret;
size = round_up(size, object_max_page_size(obj)); size = round_up(size, object_max_page_size(obj));
...@@ -83,7 +84,16 @@ i915_gem_setup(struct drm_i915_gem_object *obj, u64 size) ...@@ -83,7 +84,16 @@ i915_gem_setup(struct drm_i915_gem_object *obj, u64 size)
if (i915_gem_object_size_2big(size)) if (i915_gem_object_size_2big(size))
return -E2BIG; return -E2BIG;
ret = mr->ops->init_object(mr, obj, size, 0); /*
* For now resort to CPU based clearing for device local-memory, in the
* near future this will use the blitter engine for accelerated, GPU
* based clearing.
*/
flags = 0;
if (mr->type == INTEL_MEMORY_LOCAL)
flags = I915_BO_ALLOC_CPU_CLEAR;
ret = mr->ops->init_object(mr, obj, size, flags);
if (ret) if (ret)
return ret; return ret;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment