| From ca5732c53bf66ad755284786897e0dd10330de87 Mon Sep 17 00:00:00 2001 |
| From: Chris Wilson <chris@chris-wilson.co.uk> |
| Date: Mon, 3 Oct 2016 13:45:15 +0100 |
| Subject: drm/i915: Unalias obj->phys_handle and obj->userptr |
| |
| From: Chris Wilson <chris@chris-wilson.co.uk> |
| |
| commit ca5732c53bf66ad755284786897e0dd10330de87 upstream. |
| |
| We use obj->phys_handle to choose the pread/pwrite path, but as |
| obj->phys_handle is a union with obj->userptr, we then mistakenly use |
| the phys_handle path for userptr objects within pread/pwrite. |
| |
| Testcase: igt/gem_userptr_blits/forbidden-operations |
| Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=97519 |
| Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk> |
| Reviewed-by: Joonas Lahtinen <joonas.lahtinen@linux.intel.com> |
| Link: http://patchwork.freedesktop.org/patch/msgid/20161003124516.12388-2-chris@chris-wilson.co.uk |
| (cherry picked from commit 5f12b80a0b42da253691ca03828033014bb786eb) |
| Signed-off-by: Jani Nikula <jani.nikula@intel.com> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| |
| --- |
| drivers/gpu/drm/i915/i915_drv.h | 24 +++++++++++------------- |
| 1 file changed, 11 insertions(+), 13 deletions(-) |
| |
| --- a/drivers/gpu/drm/i915/i915_drv.h |
| +++ b/drivers/gpu/drm/i915/i915_drv.h |
| @@ -2282,21 +2282,19 @@ struct drm_i915_gem_object { |
| /** Record of address bit 17 of each page at last unbind. */ |
| unsigned long *bit_17; |
| |
| - union { |
| - /** for phy allocated objects */ |
| - struct drm_dma_handle *phys_handle; |
| - |
| - struct i915_gem_userptr { |
| - uintptr_t ptr; |
| - unsigned read_only :1; |
| - unsigned workers :4; |
| + struct i915_gem_userptr { |
| + uintptr_t ptr; |
| + unsigned read_only :1; |
| + unsigned workers :4; |
| #define I915_GEM_USERPTR_MAX_WORKERS 15 |
| |
| - struct i915_mm_struct *mm; |
| - struct i915_mmu_object *mmu_object; |
| - struct work_struct *work; |
| - } userptr; |
| - }; |
| + struct i915_mm_struct *mm; |
| + struct i915_mmu_object *mmu_object; |
| + struct work_struct *work; |
| + } userptr; |
| + |
| + /** for phys allocated objects */ |
| + struct drm_dma_handle *phys_handle; |
| }; |
| #define to_intel_bo(x) container_of(x, struct drm_i915_gem_object, base) |
| |