diff mbox series

drm/i915: Explicitly mark Global GTT address spaces

Message ID 20180831143643.12366-1-tvrtko.ursulin@linux.intel.com (mailing list archive)
State New, archived
Headers show
Series drm/i915: Explicitly mark Global GTT address spaces | expand

Commit Message

Tvrtko Ursulin Aug. 31, 2018, 2:36 p.m. UTC
From: Tvrtko Ursulin <tvrtko.ursulin@intel.com>

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>
---
 drivers/gpu/drm/i915/i915_gem_gtt.c       | 2 ++
 drivers/gpu/drm/i915/i915_gem_gtt.h       | 5 ++++-
 drivers/gpu/drm/i915/selftests/mock_gtt.c | 2 ++
 3 files changed, 8 insertions(+), 1 deletion(-)

Comments

Chris Wilson Aug. 31, 2018, 3:47 p.m. UTC | #1
Quoting Tvrtko Ursulin (2018-08-31 15:36:43)
> From: Tvrtko Ursulin <tvrtko.ursulin@intel.com>
> 
> 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>
> ---
>  drivers/gpu/drm/i915/i915_gem_gtt.c       | 2 ++
>  drivers/gpu/drm/i915/i915_gem_gtt.h       | 5 ++++-
>  drivers/gpu/drm/i915/selftests/mock_gtt.c | 2 ++
>  3 files changed, 8 insertions(+), 1 deletion(-)
> 
> 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)
>         mutex_lock(&dev_priv->drm.struct_mutex);
>         i915_address_space_init(&ggtt->vm, dev_priv);
>  
> +       ggtt->vm.is_ggtt = true;
> +
>         /* Only VLV supports read-only GGTT mappings */
>         ggtt->vm.has_read_only = IS_VALLEYVIEW(dev_priv);
>  
> 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 {
>  
>         struct pagestash free_pages;
>  
> +       /* Global GTT */
> +       bool is_ggtt:1;
> +
>         /* Some systems require uncached updates of the page directories */
>         bool pt_kmap_wc:1;
>  
> @@ -357,7 +360,7 @@ struct i915_address_space {
>         I915_SELFTEST_DECLARE(bool scrub_64K);
>  };
>  
> -#define i915_is_ggtt(V) (!(V)->file)
> +#define i915_is_ggtt(vm) ((vm)->is_ggtt)

But it's so explicit!
Reviewed-by: Chris Wilson <chris@chris-wilson.co.uk>
-Chris
Chris Wilson Sept. 1, 2018, 9:27 a.m. UTC | #2
Quoting Chris Wilson (2018-08-31 16:47:24)
> Quoting Tvrtko Ursulin (2018-08-31 15:36:43)
> > From: Tvrtko Ursulin <tvrtko.ursulin@intel.com>
> > 
> > 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>
> > ---
> >  drivers/gpu/drm/i915/i915_gem_gtt.c       | 2 ++
> >  drivers/gpu/drm/i915/i915_gem_gtt.h       | 5 ++++-
> >  drivers/gpu/drm/i915/selftests/mock_gtt.c | 2 ++
> >  3 files changed, 8 insertions(+), 1 deletion(-)
> > 
> > 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)
> >         mutex_lock(&dev_priv->drm.struct_mutex);
> >         i915_address_space_init(&ggtt->vm, dev_priv);
> >  
> > +       ggtt->vm.is_ggtt = true;
> > +
> >         /* Only VLV supports read-only GGTT mappings */
> >         ggtt->vm.has_read_only = IS_VALLEYVIEW(dev_priv);
> >  
> > 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 {
> >  
> >         struct pagestash free_pages;
> >  
> > +       /* Global GTT */
> > +       bool is_ggtt:1;
> > +
> >         /* Some systems require uncached updates of the page directories */
> >         bool pt_kmap_wc:1;
> >  
> > @@ -357,7 +360,7 @@ struct i915_address_space {
> >         I915_SELFTEST_DECLARE(bool scrub_64K);
> >  };
> >  
> > -#define i915_is_ggtt(V) (!(V)->file)
> > +#define i915_is_ggtt(vm) ((vm)->is_ggtt)
> 
> But it's so explicit!
> Reviewed-by: Chris Wilson <chris@chris-wilson.co.uk>

And pushed, thanks for the patch.
-Chris
diff mbox series

Patch

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)
 	mutex_lock(&dev_priv->drm.struct_mutex);
 	i915_address_space_init(&ggtt->vm, dev_priv);
 
+	ggtt->vm.is_ggtt = true;
+
 	/* Only VLV supports read-only GGTT mappings */
 	ggtt->vm.has_read_only = IS_VALLEYVIEW(dev_priv);
 
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 {
 
 	struct pagestash free_pages;
 
+	/* Global GTT */
+	bool is_ggtt:1;
+
 	/* Some systems require uncached updates of the page directories */
 	bool pt_kmap_wc:1;
 
@@ -357,7 +360,7 @@  struct i915_address_space {
 	I915_SELFTEST_DECLARE(bool scrub_64K);
 };
 
-#define i915_is_ggtt(V) (!(V)->file)
+#define i915_is_ggtt(vm) ((vm)->is_ggtt)
 
 static inline bool
 i915_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)
 	ggtt->vm.vma_ops.clear_pages = clear_pages;
 
 	i915_address_space_init(&ggtt->vm, i915);
+
+	ggtt->vm.is_ggtt = true;
 }
 
 void mock_fini_ggtt(struct drm_i915_private *i915)