diff mbox series

drm/i915/selftests: Flush the context worker

Message ID 20191230134349.3806558-1-chris@chris-wilson.co.uk (mailing list archive)
State New, archived
Headers show
Series drm/i915/selftests: Flush the context worker | expand

Commit Message

Chris Wilson Dec. 30, 2019, 1:43 p.m. UTC
When cleaning up the mock device, remember to flush the context worker
to free the residual GEM contexts before shutting down the device.

Closes: https://gitlab.freedesktop.org/drm/intel/issues/802
Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
Cc: Matthew Auld <matthew.auld@intel.com>
---
 drivers/gpu/drm/i915/i915_gem.c                  | 4 ++--
 drivers/gpu/drm/i915/selftests/mock_gem_device.c | 2 ++
 2 files changed, 4 insertions(+), 2 deletions(-)

Comments

Mika Kuoppala Dec. 30, 2019, 4 p.m. UTC | #1
Chris Wilson <chris@chris-wilson.co.uk> writes:

> When cleaning up the mock device, remember to flush the context worker
> to free the residual GEM contexts before shutting down the device.
>
> Closes: https://gitlab.freedesktop.org/drm/intel/issues/802
> Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
> Cc: Matthew Auld <matthew.auld@intel.com>
> ---
>  drivers/gpu/drm/i915/i915_gem.c                  | 4 ++--
>  drivers/gpu/drm/i915/selftests/mock_gem_device.c | 2 ++
>  2 files changed, 4 insertions(+), 2 deletions(-)
>
> diff --git a/drivers/gpu/drm/i915/i915_gem.c b/drivers/gpu/drm/i915/i915_gem.c
> index 9ddcf17230e6..a3d701b50a6b 100644
> --- a/drivers/gpu/drm/i915/i915_gem.c
> +++ b/drivers/gpu/drm/i915/i915_gem.c
> @@ -1172,6 +1172,8 @@ void i915_gem_driver_remove(struct drm_i915_private *dev_priv)
>  
>  void i915_gem_driver_release(struct drm_i915_private *dev_priv)
>  {
> +	i915_gem_driver_release__contexts(dev_priv);
> +
>  	intel_gt_driver_release(&dev_priv->gt);
>  
>  	intel_wa_list_free(&dev_priv->gt_wa_list);
> @@ -1179,8 +1181,6 @@ void i915_gem_driver_release(struct drm_i915_private *dev_priv)
>  	intel_uc_cleanup_firmwares(&dev_priv->gt.uc);
>  	i915_gem_cleanup_userptr(dev_priv);
>  
> -	i915_gem_driver_release__contexts(dev_priv);
> -

Have I missed some memo on double underscores?

Reviewed-by: Mika Kuoppala <mika.kuoppala@linux.intel.com>

>  	i915_gem_drain_freed_objects(dev_priv);
>  
>  	WARN_ON(!list_empty(&dev_priv->gem.contexts.list));
> diff --git a/drivers/gpu/drm/i915/selftests/mock_gem_device.c b/drivers/gpu/drm/i915/selftests/mock_gem_device.c
> index ac641f5360e1..bddead3fc855 100644
> --- a/drivers/gpu/drm/i915/selftests/mock_gem_device.c
> +++ b/drivers/gpu/drm/i915/selftests/mock_gem_device.c
> @@ -58,6 +58,8 @@ static void mock_device_release(struct drm_device *dev)
>  	mock_device_flush(i915);
>  	intel_gt_driver_remove(&i915->gt);
>  
> +	i915_gem_driver_release__contexts(i915);
> +
>  	i915_gem_drain_workqueue(i915);
>  	i915_gem_drain_freed_objects(i915);
>  
> -- 
> 2.25.0.rc0
>
> _______________________________________________
> Intel-gfx mailing list
> Intel-gfx@lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/intel-gfx
Chris Wilson Dec. 30, 2019, 4:17 p.m. UTC | #2
Quoting Mika Kuoppala (2019-12-30 16:00:22)
> Chris Wilson <chris@chris-wilson.co.uk> writes:
> 
> > When cleaning up the mock device, remember to flush the context worker
> > to free the residual GEM contexts before shutting down the device.
> >
> > Closes: https://gitlab.freedesktop.org/drm/intel/issues/802
> > Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
> > Cc: Matthew Auld <matthew.auld@intel.com>
> > ---
> >  drivers/gpu/drm/i915/i915_gem.c                  | 4 ++--
> >  drivers/gpu/drm/i915/selftests/mock_gem_device.c | 2 ++
> >  2 files changed, 4 insertions(+), 2 deletions(-)
> >
> > diff --git a/drivers/gpu/drm/i915/i915_gem.c b/drivers/gpu/drm/i915/i915_gem.c
> > index 9ddcf17230e6..a3d701b50a6b 100644
> > --- a/drivers/gpu/drm/i915/i915_gem.c
> > +++ b/drivers/gpu/drm/i915/i915_gem.c
> > @@ -1172,6 +1172,8 @@ void i915_gem_driver_remove(struct drm_i915_private *dev_priv)
> >  
> >  void i915_gem_driver_release(struct drm_i915_private *dev_priv)
> >  {
> > +     i915_gem_driver_release__contexts(dev_priv);
> > +
> >       intel_gt_driver_release(&dev_priv->gt);
> >  
> >       intel_wa_list_free(&dev_priv->gt_wa_list);
> > @@ -1179,8 +1181,6 @@ void i915_gem_driver_release(struct drm_i915_private *dev_priv)
> >       intel_uc_cleanup_firmwares(&dev_priv->gt.uc);
> >       i915_gem_cleanup_userptr(dev_priv);
> >  
> > -     i915_gem_driver_release__contexts(dev_priv);
> > -
> 
> Have I missed some memo on double underscores?

Nah, it's something I've tried that has caught on. For situations like
this where we are calling a subroutine for a subphase, and not operating
on a subobject.

We could do i915_gem_contexts_driver_release(&i915->gem.contexts) which is
probably more sensible now that we have i915->gem.contexts.
-Chris
diff mbox series

Patch

diff --git a/drivers/gpu/drm/i915/i915_gem.c b/drivers/gpu/drm/i915/i915_gem.c
index 9ddcf17230e6..a3d701b50a6b 100644
--- a/drivers/gpu/drm/i915/i915_gem.c
+++ b/drivers/gpu/drm/i915/i915_gem.c
@@ -1172,6 +1172,8 @@  void i915_gem_driver_remove(struct drm_i915_private *dev_priv)
 
 void i915_gem_driver_release(struct drm_i915_private *dev_priv)
 {
+	i915_gem_driver_release__contexts(dev_priv);
+
 	intel_gt_driver_release(&dev_priv->gt);
 
 	intel_wa_list_free(&dev_priv->gt_wa_list);
@@ -1179,8 +1181,6 @@  void i915_gem_driver_release(struct drm_i915_private *dev_priv)
 	intel_uc_cleanup_firmwares(&dev_priv->gt.uc);
 	i915_gem_cleanup_userptr(dev_priv);
 
-	i915_gem_driver_release__contexts(dev_priv);
-
 	i915_gem_drain_freed_objects(dev_priv);
 
 	WARN_ON(!list_empty(&dev_priv->gem.contexts.list));
diff --git a/drivers/gpu/drm/i915/selftests/mock_gem_device.c b/drivers/gpu/drm/i915/selftests/mock_gem_device.c
index ac641f5360e1..bddead3fc855 100644
--- a/drivers/gpu/drm/i915/selftests/mock_gem_device.c
+++ b/drivers/gpu/drm/i915/selftests/mock_gem_device.c
@@ -58,6 +58,8 @@  static void mock_device_release(struct drm_device *dev)
 	mock_device_flush(i915);
 	intel_gt_driver_remove(&i915->gt);
 
+	i915_gem_driver_release__contexts(i915);
+
 	i915_gem_drain_workqueue(i915);
 	i915_gem_drain_freed_objects(i915);