aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTvrtko Ursulin <tvrtko.ursulin@intel.com>2018-08-31 10:36:43 -0400
committerChris Wilson <chris@chris-wilson.co.uk>2018-09-01 05:25:38 -0400
commit48e905048f39ae97bd08dbbbc78a848d1d555d80 (patch)
treea8380b8292c44dd6e15e644b9c773aa7f3ed8919
parent2b5cf4ef541f1b2facaca58cae5e8e0b5f19ad4c (diff)
drm/i915: Explicitly mark Global GTT address spaces
So far we have been relying on vm->file pointer being NULL to declare something GGTT. This has the unfortunate consequence that the default kernel context is also declared GGTT and interferes with the following patch which wants to instantiate VMA's and execute requests against the kernel context. Change the is_ggtt test to use an explicit flag in struct address_space to solve this issue. Note that the bit used is free since there is an alignment hole in the struct. v2: * Mark mock ggtt. Signed-off-by: Tvrtko Ursulin <tvrtko.ursulin@intel.com> Cc: Chris Wilson <chris@chris-wilson.co.uk> Reviewed-by: Chris Wilson <chris@chris-wilson.co.uk> Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk> Link: https://patchwork.freedesktop.org/patch/msgid/20180831143643.12366-1-tvrtko.ursulin@linux.intel.com
-rw-r--r--drivers/gpu/drm/i915/i915_gem_gtt.c2
-rw-r--r--drivers/gpu/drm/i915/i915_gem_gtt.h5
-rw-r--r--drivers/gpu/drm/i915/selftests/mock_gtt.c2
3 files changed, 8 insertions, 1 deletions
diff --git a/drivers/gpu/drm/i915/i915_gem_gtt.c b/drivers/gpu/drm/i915/i915_gem_gtt.c
index d9d44639ba26..eb0e446d6482 100644
--- a/drivers/gpu/drm/i915/i915_gem_gtt.c
+++ b/drivers/gpu/drm/i915/i915_gem_gtt.c
@@ -3604,6 +3604,8 @@ int i915_ggtt_init_hw(struct drm_i915_private *dev_priv)
3604 mutex_lock(&dev_priv->drm.struct_mutex); 3604 mutex_lock(&dev_priv->drm.struct_mutex);
3605 i915_address_space_init(&ggtt->vm, dev_priv); 3605 i915_address_space_init(&ggtt->vm, dev_priv);
3606 3606
3607 ggtt->vm.is_ggtt = true;
3608
3607 /* Only VLV supports read-only GGTT mappings */ 3609 /* Only VLV supports read-only GGTT mappings */
3608 ggtt->vm.has_read_only = IS_VALLEYVIEW(dev_priv); 3610 ggtt->vm.has_read_only = IS_VALLEYVIEW(dev_priv);
3609 3611
diff --git a/drivers/gpu/drm/i915/i915_gem_gtt.h b/drivers/gpu/drm/i915/i915_gem_gtt.h
index 01d83a943142..7e2af5f4f39b 100644
--- a/drivers/gpu/drm/i915/i915_gem_gtt.h
+++ b/drivers/gpu/drm/i915/i915_gem_gtt.h
@@ -324,6 +324,9 @@ struct i915_address_space {
324 324
325 struct pagestash free_pages; 325 struct pagestash free_pages;
326 326
327 /* Global GTT */
328 bool is_ggtt:1;
329
327 /* Some systems require uncached updates of the page directories */ 330 /* Some systems require uncached updates of the page directories */
328 bool pt_kmap_wc:1; 331 bool pt_kmap_wc:1;
329 332
@@ -357,7 +360,7 @@ struct i915_address_space {
357 I915_SELFTEST_DECLARE(bool scrub_64K); 360 I915_SELFTEST_DECLARE(bool scrub_64K);
358}; 361};
359 362
360#define i915_is_ggtt(V) (!(V)->file) 363#define i915_is_ggtt(vm) ((vm)->is_ggtt)
361 364
362static inline bool 365static inline bool
363i915_vm_is_48bit(const struct i915_address_space *vm) 366i915_vm_is_48bit(const struct i915_address_space *vm)
diff --git a/drivers/gpu/drm/i915/selftests/mock_gtt.c b/drivers/gpu/drm/i915/selftests/mock_gtt.c
index a140ea5c3a7c..6ae418c76015 100644
--- a/drivers/gpu/drm/i915/selftests/mock_gtt.c
+++ b/drivers/gpu/drm/i915/selftests/mock_gtt.c
@@ -118,6 +118,8 @@ void mock_init_ggtt(struct drm_i915_private *i915)
118 ggtt->vm.vma_ops.clear_pages = clear_pages; 118 ggtt->vm.vma_ops.clear_pages = clear_pages;
119 119
120 i915_address_space_init(&ggtt->vm, i915); 120 i915_address_space_init(&ggtt->vm, i915);
121
122 ggtt->vm.is_ggtt = true;
121} 123}
122 124
123void mock_fini_ggtt(struct drm_i915_private *i915) 125void mock_fini_ggtt(struct drm_i915_private *i915)