diff --git a/drivers/gpu/drm/i915/i915_gem.c b/drivers/gpu/drm/i915/i915_gem.c index a546a71..1b2d3bd 100644 --- a/drivers/gpu/drm/i915/i915_gem.c +++ b/drivers/gpu/drm/i915/i915_gem.c @@ -4168,6 +4168,8 @@ i915_gem_phys_pwrite(struct drm_device *dev, struct drm_file *file_priv) { void *vaddr = obj->phys_obj->handle->vaddr + args->offset; + void *vaddr_end = vaddr + args->size; + char __user *user_data = (char __user *) (uintptr_t) args->data_ptr; if (__copy_from_user_inatomic_nocache(vaddr, user_data, args->size)) { @@ -4184,6 +4186,11 @@ i915_gem_phys_pwrite(struct drm_device *dev, return -EFAULT; } + mb(); + for (; vaddr < vaddr_end; vaddr += boot_cpu_data.x86_clflush_size) + clflush(vaddr); + mb(); + intel_gtt_chipset_flush(); return 0; }