Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 6eae0059 authored by Chris Wilson's avatar Chris Wilson
Browse files

drm/i915: pwrite/pread do not require obj->base.filp, just pages



The idea behind relaxing the restriction for pread/pwrite was to handle
!obj->base.flip, i.e. non-shmemfs backed objects, which only requires
that the object provide struct pages.

v2: Remove excess (). Note enough editing after copy'n'paste.
v3: Use new i915_gem_object_has_struct_page()

Testcase: igt/prime_vgem/read
Signed-off-by: default avatarChris Wilson <chris@chris-wilson.co.uk>
Cc: Ankitprasad Sharma <ankitprasad.r.sharma@intel.com>
Cc: Tvrtko Ursulin <tvrtko.ursulin@intel.com>
Reviewed-by: default avatarTvrtko Ursulin <tvrtko.ursulin@intel.com>
Link: http://patchwork.freedesktop.org/patch/msgid/1466431552-17860-2-git-send-email-chris@chris-wilson.co.uk
parent b9bcd14a
Loading
Loading
Loading
Loading
+4 −3
Original line number Diff line number Diff line
@@ -760,7 +760,7 @@ i915_gem_shmem_pread(struct drm_device *dev,
	int needs_clflush = 0;
	struct sg_page_iter sg_iter;

	if (!obj->base.filp)
	if (!i915_gem_object_has_struct_page(obj))
		return -ENODEV;

	user_data = u64_to_user_ptr(args->data_ptr);
@@ -1298,7 +1298,8 @@ i915_gem_pwrite_ioctl(struct drm_device *dev, void *data,
	 * pread/pwrite currently are reading and writing from the CPU
	 * perspective, requiring manual detiling by the client.
	 */
	if (!obj->base.filp || cpu_write_needs_clflush(obj)) {
	if (!i915_gem_object_has_struct_page(obj) ||
	    cpu_write_needs_clflush(obj)) {
		ret = i915_gem_gtt_pwrite_fast(dev_priv, obj, args, file);
		/* Note that the gtt paths might fail with non-page-backed user
		 * pointers (e.g. gtt mappings when moving data between
@@ -1308,7 +1309,7 @@ i915_gem_pwrite_ioctl(struct drm_device *dev, void *data,
	if (ret == -EFAULT) {
		if (obj->phys_handle)
			ret = i915_gem_phys_pwrite(obj, args, file);
		else if (obj->base.filp)
		else if (i915_gem_object_has_struct_page(obj))
			ret = i915_gem_shmem_pwrite(dev, obj, args, file);
		else
			ret = -ENODEV;