On Thu, Jun 09, 2016 at 12:29:34PM +0100, Chris Wilson wrote: > diff --git a/drivers/gpu/drm/i915/i915_gem.c b/drivers/gpu/drm/i915/i915_gem.c > index a41fa01eb024..c6d06cb21191 100644 > --- a/drivers/gpu/drm/i915/i915_gem.c > +++ b/drivers/gpu/drm/i915/i915_gem.c > @@ -563,34 +563,95 @@ __copy_from_user_swizzled(char *gpu_vaddr, int gpu_offset, > * flush the object from the CPU cache. > */ > int i915_gem_obj_prepare_shmem_read(struct drm_i915_gem_object *obj, > - int *needs_clflush) > + unsigned *needs_clflush) > { > int ret; > > *needs_clflush = 0; > - > - if (WARN_ON((obj->ops->flags & I915_GEM_OBJECT_HAS_STRUCT_PAGE) == 0)) > + if ((obj->ops->flags & I915_GEM_OBJECT_HAS_STRUCT_PAGE) == 0) > return -EINVAL; > > if (!(obj->base.read_domains & I915_GEM_DOMAIN_CPU)) { > + ret = i915_gem_object_wait_rendering(obj, true); > + if (ret) > + return ret; > + > /* If we're not in the cpu read domain, set ourself into the gtt > * read domain and manually flush cachelines (if required). This > * optimizes for the case when the gpu will dirty the data > * anyway again before the next pread happens. */ > *needs_clflush = !cpu_cache_is_coherent(obj->base.dev, > obj->cache_level); > - ret = i915_gem_object_wait_rendering(obj, true); > + } > + > + ret = i915_gem_object_get_pages(obj); > + if (ret) > + return ret; > + > + i915_gem_object_pin_pages(obj); > + > + if (*needs_clflush && !boot_cpu_has(X86_FEATURE_CLFLUSH)) { This should now be static_cpu_has(). -Chris -- Chris Wilson, Intel Open Source Technology Centre _______________________________________________ Intel-gfx mailing list Intel-gfx@xxxxxxxxxxxxxxxxxxxxx https://lists.freedesktop.org/mailman/listinfo/intel-gfx