Message ID | 1368035116-3345-4-git-send-email-jbarnes@virtuousgeek.org (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
On Wed, May 08, 2013 at 10:45:16AM -0700, Jesse Barnes wrote: > This reverts commit fd0c06420d39958032655a04cfd194d5a7b38f83. A bit thin on details about what exactly blows up ... can you please dig a bit more? -Daniel > --- > drivers/gpu/drm/i915/intel_display.c | 19 +++++++------------ > drivers/gpu/drm/i915/intel_pm.c | 3 --- > 2 files changed, 7 insertions(+), 15 deletions(-) > > diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c > index d0c5ecf..e22e752 100644 > --- a/drivers/gpu/drm/i915/intel_display.c > +++ b/drivers/gpu/drm/i915/intel_display.c > @@ -9674,23 +9674,12 @@ void intel_modeset_cleanup(struct drm_device *dev) > struct drm_crtc *crtc; > struct intel_crtc *intel_crtc; > > - /* > - * Interrupts and polling as the first thing to avoid creating havoc. > - * Too much stuff here (turning of rps, connectors, ...) would > - * experience fancy races otherwise. > - */ > - drm_irq_uninstall(dev); > - cancel_work_sync(&dev_priv->hotplug_work); > - /* > - * Due to the hpd irq storm handling the hotplug work can re-arm the > - * poll handlers. Hence disable polling after hpd handling is shut down. > - */ > drm_kms_helper_poll_fini(dev); > - > mutex_lock(&dev->struct_mutex); > > intel_unregister_dsm_handler(); > > + > list_for_each_entry(crtc, &dev->mode_config.crtc_list, head) { > /* Skip inactive CRTCs */ > if (!crtc->fb) > @@ -9708,6 +9697,12 @@ void intel_modeset_cleanup(struct drm_device *dev) > > mutex_unlock(&dev->struct_mutex); > > + /* Disable the irq before mode object teardown, for the irq might > + * enqueue unpin/hotplug work. */ > + drm_irq_uninstall(dev); > + cancel_work_sync(&dev_priv->hotplug_work); > + cancel_work_sync(&dev_priv->rps.work); > + > /* flush any delayed tasks or pending work */ > flush_scheduled_work(); > > diff --git a/drivers/gpu/drm/i915/intel_pm.c b/drivers/gpu/drm/i915/intel_pm.c > index 081194d..992ff0d 100644 > --- a/drivers/gpu/drm/i915/intel_pm.c > +++ b/drivers/gpu/drm/i915/intel_pm.c > @@ -3729,9 +3729,6 @@ void intel_disable_gt_powersave(struct drm_device *dev) > { > struct drm_i915_private *dev_priv = dev->dev_private; > > - /* Interrupts should be disabled already to avoid re-arming. */ > - WARN_ON(dev->irq_enabled); > - > if (IS_IRONLAKE_M(dev)) { > ironlake_disable_drps(dev); > ironlake_disable_rc6(dev); > -- > 1.7.10.4 > > _______________________________________________ > Intel-gfx mailing list > Intel-gfx@lists.freedesktop.org > http://lists.freedesktop.org/mailman/listinfo/intel-gfx
On Fri, 10 May 2013 09:27:09 +0200 Daniel Vetter <daniel@ffwll.ch> wrote: > On Wed, May 08, 2013 at 10:45:16AM -0700, Jesse Barnes wrote: > > This reverts commit fd0c06420d39958032655a04cfd194d5a7b38f83. > > A bit thin on details about what exactly blows up ... can you please dig a > bit more? On unload, we crash trying to queue the VLV work from the gen6_pm_rps_work function and things fall over pretty hard. At least that's what the backtrace looked like; it was hard to tell since the machine was hard hung and I couldn't scroll back.
On Fri, 10 May 2013 09:27:09 +0200 Daniel Vetter <daniel@ffwll.ch> wrote: > On Wed, May 08, 2013 at 10:45:16AM -0700, Jesse Barnes wrote: > > This reverts commit fd0c06420d39958032655a04cfd194d5a7b38f83. > > A bit thin on details about what exactly blows up ... can you please dig a > bit more? Oh and this wasn't an official submission :) Just something to get you thinking about it...
diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c index d0c5ecf..e22e752 100644 --- a/drivers/gpu/drm/i915/intel_display.c +++ b/drivers/gpu/drm/i915/intel_display.c @@ -9674,23 +9674,12 @@ void intel_modeset_cleanup(struct drm_device *dev) struct drm_crtc *crtc; struct intel_crtc *intel_crtc; - /* - * Interrupts and polling as the first thing to avoid creating havoc. - * Too much stuff here (turning of rps, connectors, ...) would - * experience fancy races otherwise. - */ - drm_irq_uninstall(dev); - cancel_work_sync(&dev_priv->hotplug_work); - /* - * Due to the hpd irq storm handling the hotplug work can re-arm the - * poll handlers. Hence disable polling after hpd handling is shut down. - */ drm_kms_helper_poll_fini(dev); - mutex_lock(&dev->struct_mutex); intel_unregister_dsm_handler(); + list_for_each_entry(crtc, &dev->mode_config.crtc_list, head) { /* Skip inactive CRTCs */ if (!crtc->fb) @@ -9708,6 +9697,12 @@ void intel_modeset_cleanup(struct drm_device *dev) mutex_unlock(&dev->struct_mutex); + /* Disable the irq before mode object teardown, for the irq might + * enqueue unpin/hotplug work. */ + drm_irq_uninstall(dev); + cancel_work_sync(&dev_priv->hotplug_work); + cancel_work_sync(&dev_priv->rps.work); + /* flush any delayed tasks or pending work */ flush_scheduled_work(); diff --git a/drivers/gpu/drm/i915/intel_pm.c b/drivers/gpu/drm/i915/intel_pm.c index 081194d..992ff0d 100644 --- a/drivers/gpu/drm/i915/intel_pm.c +++ b/drivers/gpu/drm/i915/intel_pm.c @@ -3729,9 +3729,6 @@ void intel_disable_gt_powersave(struct drm_device *dev) { struct drm_i915_private *dev_priv = dev->dev_private; - /* Interrupts should be disabled already to avoid re-arming. */ - WARN_ON(dev->irq_enabled); - if (IS_IRONLAKE_M(dev)) { ironlake_disable_drps(dev); ironlake_disable_rc6(dev);