aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDaniel Vetter <daniel.vetter@ffwll.ch>2014-08-06 09:04:51 -0400
committerDaniel Vetter <daniel.vetter@ffwll.ch>2014-08-13 08:23:31 -0400
commit896ab1a5d54269b463a24194c2e4a369103b46d8 (patch)
treeb741b45a98a29f50deea1630d4039ed3fa92edea
parent6c5566a82c6fb1da9e13a294f23d4cd85a08cb30 (diff)
drm/i915: Fix up checks for aliasing ppgtt
A subsequent patch will no longer initialize the aliasing ppgtt if we have full ppgtt enabled, since we simply don't need that any more. Unfortunately a few places check for the aliasing ppgtt instead of checking for ppgtt in general. Fix them up. One special case are the gtt offset and size macros, which have some code to remap the aliasing ppgtt to the global gtt. The aliasing ppgtt is _not_ a logical address space, so passing that in as the vm is plain and simple a bug. So just WARN about it and carry on - we have a gracefully fall-through anyway if we can't find the vma. Reviewed-by: Michel Thierry <michel.thierry@intel.com> Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
-rw-r--r--drivers/gpu/drm/i915/i915_cmd_parser.c4
-rw-r--r--drivers/gpu/drm/i915/i915_dma.c2
-rw-r--r--drivers/gpu/drm/i915/i915_gem.c8
-rw-r--r--drivers/gpu/drm/i915/intel_ringbuffer.c4
4 files changed, 5 insertions, 13 deletions
diff --git a/drivers/gpu/drm/i915/i915_cmd_parser.c b/drivers/gpu/drm/i915/i915_cmd_parser.c
index dea99d92fb4a..c45856bcc8b9 100644
--- a/drivers/gpu/drm/i915/i915_cmd_parser.c
+++ b/drivers/gpu/drm/i915/i915_cmd_parser.c
@@ -842,8 +842,6 @@ finish:
842 */ 842 */
843bool i915_needs_cmd_parser(struct intel_engine_cs *ring) 843bool i915_needs_cmd_parser(struct intel_engine_cs *ring)
844{ 844{
845 struct drm_i915_private *dev_priv = ring->dev->dev_private;
846
847 if (!ring->needs_cmd_parser) 845 if (!ring->needs_cmd_parser)
848 return false; 846 return false;
849 847
@@ -852,7 +850,7 @@ bool i915_needs_cmd_parser(struct intel_engine_cs *ring)
852 * disabled. That will cause all of the parser's PPGTT checks to 850 * disabled. That will cause all of the parser's PPGTT checks to
853 * fail. For now, disable parsing when PPGTT is off. 851 * fail. For now, disable parsing when PPGTT is off.
854 */ 852 */
855 if (!dev_priv->mm.aliasing_ppgtt) 853 if (USES_PPGTT(ring->dev))
856 return false; 854 return false;
857 855
858 return (i915.enable_cmd_parser == 1); 856 return (i915.enable_cmd_parser == 1);
diff --git a/drivers/gpu/drm/i915/i915_dma.c b/drivers/gpu/drm/i915/i915_dma.c
index 1763fbf34e1d..895f9f2f35ea 100644
--- a/drivers/gpu/drm/i915/i915_dma.c
+++ b/drivers/gpu/drm/i915/i915_dma.c
@@ -999,7 +999,7 @@ static int i915_getparam(struct drm_device *dev, void *data,
999 value = HAS_WT(dev); 999 value = HAS_WT(dev);
1000 break; 1000 break;
1001 case I915_PARAM_HAS_ALIASING_PPGTT: 1001 case I915_PARAM_HAS_ALIASING_PPGTT:
1002 value = dev_priv->mm.aliasing_ppgtt || USES_FULL_PPGTT(dev); 1002 value = USES_PPGTT(dev);
1003 break; 1003 break;
1004 case I915_PARAM_HAS_WAIT_TIMEOUT: 1004 case I915_PARAM_HAS_WAIT_TIMEOUT:
1005 value = 1; 1005 value = 1;
diff --git a/drivers/gpu/drm/i915/i915_gem.c b/drivers/gpu/drm/i915/i915_gem.c
index c8404a439502..6a7795097017 100644
--- a/drivers/gpu/drm/i915/i915_gem.c
+++ b/drivers/gpu/drm/i915/i915_gem.c
@@ -5106,9 +5106,7 @@ unsigned long i915_gem_obj_offset(struct drm_i915_gem_object *o,
5106 struct drm_i915_private *dev_priv = o->base.dev->dev_private; 5106 struct drm_i915_private *dev_priv = o->base.dev->dev_private;
5107 struct i915_vma *vma; 5107 struct i915_vma *vma;
5108 5108
5109 if (!dev_priv->mm.aliasing_ppgtt || 5109 WARN_ON(vm == &dev_priv->mm.aliasing_ppgtt->base);
5110 vm == &dev_priv->mm.aliasing_ppgtt->base)
5111 vm = &dev_priv->gtt.base;
5112 5110
5113 list_for_each_entry(vma, &o->vma_list, vma_link) { 5111 list_for_each_entry(vma, &o->vma_list, vma_link) {
5114 if (vma->vm == vm) 5112 if (vma->vm == vm)
@@ -5149,9 +5147,7 @@ unsigned long i915_gem_obj_size(struct drm_i915_gem_object *o,
5149 struct drm_i915_private *dev_priv = o->base.dev->dev_private; 5147 struct drm_i915_private *dev_priv = o->base.dev->dev_private;
5150 struct i915_vma *vma; 5148 struct i915_vma *vma;
5151 5149
5152 if (!dev_priv->mm.aliasing_ppgtt || 5150 WARN_ON(vm == &dev_priv->mm.aliasing_ppgtt->base);
5153 vm == &dev_priv->mm.aliasing_ppgtt->base)
5154 vm = &dev_priv->gtt.base;
5155 5151
5156 BUG_ON(list_empty(&o->vma_list)); 5152 BUG_ON(list_empty(&o->vma_list));
5157 5153
diff --git a/drivers/gpu/drm/i915/intel_ringbuffer.c b/drivers/gpu/drm/i915/intel_ringbuffer.c
index 4236014c1cda..13543f8528c2 100644
--- a/drivers/gpu/drm/i915/intel_ringbuffer.c
+++ b/drivers/gpu/drm/i915/intel_ringbuffer.c
@@ -2006,9 +2006,7 @@ gen8_ring_dispatch_execbuffer(struct intel_engine_cs *ring,
2006 u64 offset, u32 len, 2006 u64 offset, u32 len,
2007 unsigned flags) 2007 unsigned flags)
2008{ 2008{
2009 struct drm_i915_private *dev_priv = ring->dev->dev_private; 2009 bool ppgtt = USES_PPGTT(ring->dev) && !(flags & I915_DISPATCH_SECURE);
2010 bool ppgtt = dev_priv->mm.aliasing_ppgtt != NULL &&
2011 !(flags & I915_DISPATCH_SECURE);
2012 int ret; 2010 int ret;
2013 2011
2014 ret = intel_ring_begin(ring, 4); 2012 ret = intel_ring_begin(ring, 4);