<div dir="ltr"><div>Just to be clear, is this just adding a CLFLUSH or is it actually changing the default caching state of buffers from CACHED to NONE?  If it's actually changing the default state, that's going to break userspace badly.</div><div><br></div><div>--Jason<br></div></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Fri, Jul 19, 2019 at 5:21 AM Chris Wilson <<a href="mailto:chris@chris-wilson.co.uk">chris@chris-wilson.co.uk</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">Quoting Lionel Landwerlin (2019-07-19 11:18:42)<br>
> On 18/07/2019 17:54, Chris Wilson wrote:<br>
> > Since userspace has the ability to bypass the CPU cache from within its<br>
> > unprivileged command stream, we have to flush the CPU cache to memory<br>
> > in order to overwrite the previous contents on creation.<br>
> ><br>
> > Signed-off-by: Chris Wilson <<a href="mailto:chris@chris-wilson.co.uk" target="_blank">chris@chris-wilson.co.uk</a>><br>
> > Cc: Joonas Lahtinen <<a href="mailto:joonas.lahtinen@linux.intel.com" target="_blank">joonas.lahtinen@linux.intel.com</a>><br>
> > Cc: <a href="http://stablevger.kernel.org" rel="noreferrer" target="_blank">stablevger.kernel.org</a><br>
> > ---<br>
> >   drivers/gpu/drm/i915/gem/i915_gem_shmem.c | 26 ++++++-----------------<br>
> >   1 file changed, 7 insertions(+), 19 deletions(-)<br>
> ><br>
> > diff --git a/drivers/gpu/drm/i915/gem/i915_gem_shmem.c b/drivers/gpu/drm/i915/gem/i915_gem_shmem.c<br>
> > index d2a1158868e7..f752b326d399 100644<br>
> > --- a/drivers/gpu/drm/i915/gem/i915_gem_shmem.c<br>
> > +++ b/drivers/gpu/drm/i915/gem/i915_gem_shmem.c<br>
> > @@ -459,7 +459,6 @@ i915_gem_object_create_shmem(struct drm_i915_private *i915, u64 size)<br>
> >   {<br>
> >       struct drm_i915_gem_object *obj;<br>
> >       struct address_space *mapping;<br>
> > -     unsigned int cache_level;<br>
> >       gfp_t mask;<br>
> >       int ret;<br>
> >   <br>
> > @@ -498,24 +497,13 @@ i915_gem_object_create_shmem(struct drm_i915_private *i915, u64 size)<br>
> >       obj->write_domain = I915_GEM_DOMAIN_CPU;<br>
> >       obj->read_domains = I915_GEM_DOMAIN_CPU;<br>
> >   <br>
> > -     if (HAS_LLC(i915))<br>
> > -             /* On some devices, we can have the GPU use the LLC (the CPU<br>
> > -              * cache) for about a 10% performance improvement<br>
> > -              * compared to uncached.  Graphics requests other than<br>
> > -              * display scanout are coherent with the CPU in<br>
> > -              * accessing this cache.  This means in this mode we<br>
> > -              * don't need to clflush on the CPU side, and on the<br>
> > -              * GPU side we only need to flush internal caches to<br>
> > -              * get data visible to the CPU.<br>
> > -              *<br>
> > -              * However, we maintain the display planes as UC, and so<br>
> > -              * need to rebind when first used as such.<br>
> > -              */<br>
> > -             cache_level = I915_CACHE_LLC;<br>
> > -     else<br>
> > -             cache_level = I915_CACHE_NONE;<br>
> > -<br>
> > -     i915_gem_object_set_cache_coherency(obj, cache_level);<br>
> > +     /*<br>
> > +      * Note that userspace has control over cache-bypass<br>
> > +      * via its command stream, so even on LLC architectures<br>
> > +      * we have to flush out the CPU cache to memory to<br>
> > +      * clear previous contents.<br>
> > +      */<br>
> > +     i915_gem_object_set_cache_coherency(obj, I915_CACHE_NONE);<br>
> >   <br>
> >       trace_i915_gem_object_create(obj);<br>
> >   <br>
> <br>
> Does i915_drm.h needs updating? :<br>
> <br>
> <br>
> /**<br>
>   * I915_CACHING_CACHED<br>
>   *<br>
>   * GPU access is coherent with cpu caches and furthermore the data is <br>
> cached in<br>
>   * last-level caches shared between cpu cores and the gpu GT. Default on<br>
>   * machines with HAS_LLC.<br>
>   */<br>
> #define I915_CACHING_CACHED             1<br>
<br>
Sneaky. Thanks,<br>
-Chris<br>
_______________________________________________<br>
Intel-gfx mailing list<br>
<a href="mailto:Intel-gfx@lists.freedesktop.org" target="_blank">Intel-gfx@lists.freedesktop.org</a><br>
<a href="https://lists.freedesktop.org/mailman/listinfo/intel-gfx" rel="noreferrer" target="_blank">https://lists.freedesktop.org/mailman/listinfo/intel-gfx</a></blockquote></div>