Commit 48e90504 authored by Tvrtko Ursulin's avatar Tvrtko Ursulin Committed by Chris Wilson

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: default avatarTvrtko Ursulin <tvrtko.ursulin@intel.com>
Cc: Chris Wilson <chris@chris-wilson.co.uk>
Reviewed-by: default avatarChris Wilson <chris@chris-wilson.co.uk>
Signed-off-by: default avatarChris Wilson <chris@chris-wilson.co.uk>
Link: https://patchwork.freedesktop.org/patch/msgid/20180831143643.12366-1-tvrtko.ursulin@linux.intel.com
parent 2b5cf4ef
...@@ -3604,6 +3604,8 @@ int i915_ggtt_init_hw(struct drm_i915_private *dev_priv) ...@@ -3604,6 +3604,8 @@ int i915_ggtt_init_hw(struct drm_i915_private *dev_priv)
mutex_lock(&dev_priv->drm.struct_mutex); mutex_lock(&dev_priv->drm.struct_mutex);
i915_address_space_init(&ggtt->vm, dev_priv); i915_address_space_init(&ggtt->vm, dev_priv);
ggtt->vm.is_ggtt = true;
/* Only VLV supports read-only GGTT mappings */ /* Only VLV supports read-only GGTT mappings */
ggtt->vm.has_read_only = IS_VALLEYVIEW(dev_priv); ggtt->vm.has_read_only = IS_VALLEYVIEW(dev_priv);
......
...@@ -324,6 +324,9 @@ struct i915_address_space { ...@@ -324,6 +324,9 @@ struct i915_address_space {
struct pagestash free_pages; struct pagestash free_pages;
/* Global GTT */
bool is_ggtt:1;
/* Some systems require uncached updates of the page directories */ /* Some systems require uncached updates of the page directories */
bool pt_kmap_wc:1; bool pt_kmap_wc:1;
...@@ -357,7 +360,7 @@ struct i915_address_space { ...@@ -357,7 +360,7 @@ struct i915_address_space {
I915_SELFTEST_DECLARE(bool scrub_64K); I915_SELFTEST_DECLARE(bool scrub_64K);
}; };
#define i915_is_ggtt(V) (!(V)->file) #define i915_is_ggtt(vm) ((vm)->is_ggtt)
static inline bool static inline bool
i915_vm_is_48bit(const struct i915_address_space *vm) i915_vm_is_48bit(const struct i915_address_space *vm)
......
...@@ -118,6 +118,8 @@ void mock_init_ggtt(struct drm_i915_private *i915) ...@@ -118,6 +118,8 @@ void mock_init_ggtt(struct drm_i915_private *i915)
ggtt->vm.vma_ops.clear_pages = clear_pages; ggtt->vm.vma_ops.clear_pages = clear_pages;
i915_address_space_init(&ggtt->vm, i915); i915_address_space_init(&ggtt->vm, i915);
ggtt->vm.is_ggtt = true;
} }
void mock_fini_ggtt(struct drm_i915_private *i915) void mock_fini_ggtt(struct drm_i915_private *i915)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment