drm/i915/: Re-work clflush_write32
authorMichael Cheng <michael.cheng@intel.com>
Mon, 21 Mar 2022 22:38:18 +0000 (15:38 -0700)
committerMatt Roper <matthew.d.roper@intel.com>
Tue, 22 Mar 2022 17:10:52 +0000 (10:10 -0700)
Use drm_clflush_virt_range instead of clflushopt and remove the memory
barrier, since drm_clflush_virt_range takes care of that.

v2(Michael Cheng): Use sizeof(*addr) instead of sizeof(addr) to get the
   actual size of the page. Thanks to Matt Roper for
   pointing this out.

Signed-off-by: Michael Cheng <michael.cheng@intel.com>
Reviewed-by: Matt Roper <matthew.d.roper@intel.com>
Signed-off-by: Matt Roper <matthew.d.roper@intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20220321223819.72833-5-michael.cheng@intel.com
drivers/gpu/drm/i915/gem/i915_gem_execbuffer.c

index 3dd6983..d71fcd4 100644 (file)
@@ -1322,10 +1322,8 @@ static void *reloc_vaddr(struct i915_vma *vma,
 static void clflush_write32(u32 *addr, u32 value, unsigned int flushes)
 {
        if (unlikely(flushes & (CLFLUSH_BEFORE | CLFLUSH_AFTER))) {
-               if (flushes & CLFLUSH_BEFORE) {
-                       clflushopt(addr);
-                       mb();
-               }
+               if (flushes & CLFLUSH_BEFORE)
+                       drm_clflush_virt_range(addr, sizeof(*addr));
 
                *addr = value;
 
@@ -1337,7 +1335,7 @@ static void clflush_write32(u32 *addr, u32 value, unsigned int flushes)
                 * to ensure ordering of clflush wrt to the system.
                 */
                if (flushes & CLFLUSH_AFTER)
-                       clflushopt(addr);
+                       drm_clflush_virt_range(addr, sizeof(*addr));
        } else
                *addr = value;
 }