mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/herbert/cryptodev-2.6.git
synced 2026-04-23 05:56:14 -04:00
drm/i915: extract bypass-llc check into helper
It looks like we will need this in some more places, so extract as a helper. Signed-off-by: Matthew Auld <matthew.auld@intel.com> Cc: Thomas Hellström <thomas.hellstrom@linux.intel.com> Reviewed-by: Thomas Hellström <thomas.hellstrom@linux.intel.com> Link: https://patchwork.freedesktop.org/patch/msgid/20211018174508.2137279-3-matthew.auld@intel.com
This commit is contained in:
@@ -128,6 +128,32 @@ void i915_gem_object_set_cache_coherency(struct drm_i915_gem_object *obj,
|
||||
!(obj->cache_coherent & I915_BO_CACHE_COHERENT_FOR_WRITE);
|
||||
}
|
||||
|
||||
bool i915_gem_object_can_bypass_llc(struct drm_i915_gem_object *obj)
|
||||
{
|
||||
struct drm_i915_private *i915 = to_i915(obj->base.dev);
|
||||
|
||||
/*
|
||||
* This is purely from a security perspective, so we simply don't care
|
||||
* about non-userspace objects being able to bypass the LLC.
|
||||
*/
|
||||
if (!(obj->flags & I915_BO_ALLOC_USER))
|
||||
return false;
|
||||
|
||||
/*
|
||||
* EHL and JSL add the 'Bypass LLC' MOCS entry, which should make it
|
||||
* possible for userspace to bypass the GTT caching bits set by the
|
||||
* kernel, as per the given object cache_level. This is troublesome
|
||||
* since the heavy flush we apply when first gathering the pages is
|
||||
* skipped if the kernel thinks the object is coherent with the GPU. As
|
||||
* a result it might be possible to bypass the cache and read the
|
||||
* contents of the page directly, which could be stale data. If it's
|
||||
* just a case of userspace shooting themselves in the foot then so be
|
||||
* it, but since i915 takes the stance of always zeroing memory before
|
||||
* handing it to userspace, we need to prevent this.
|
||||
*/
|
||||
return IS_JSL_EHL(i915);
|
||||
}
|
||||
|
||||
static void i915_gem_close_object(struct drm_gem_object *gem, struct drm_file *file)
|
||||
{
|
||||
struct drm_i915_gem_object *obj = to_intel_bo(gem);
|
||||
|
||||
Reference in New Issue
Block a user