* [PATCH] drm/i915: call drm_vblank_cleanup() earlier at unload
@ 2014-10-15 17:15 Paulo Zanoni
2014-10-17 11:18 ` Ville Syrjälä
0 siblings, 1 reply; 3+ messages in thread
From: Paulo Zanoni @ 2014-10-15 17:15 UTC (permalink / raw)
To: intel-gfx; +Cc: Paulo Zanoni
From: Paulo Zanoni <paulo.r.zanoni@intel.com>
In its current place, it just segfaults while trying to access the
CRTC structures:
[ 9132.421681] Call Trace:
[ 9132.421707] [<ffffffffa01130d8>] i915_get_crtc_scanoutpos+0x1e8/0x220 [i915]
[ 9132.421727] [<ffffffffa001da34>] drm_calc_vbltimestamp_from_scanoutpos+0x94/0x330 [drm]
[ 9132.421744] [<ffffffffa001d240>] ?vblank_disable_and_save+0x40/0x1e0 [drm]
[ 9132.421769] [<ffffffffa0114328>] i915_get_vblank_timestamp+0x68/0xb0 [i915]
[ 9132.421786] [<ffffffffa001d094>] drm_get_last_vbltimestamp+0x44/0x80 [drm]
[ 9132.421801] [<ffffffffa001d3a6>] vblank_disable_and_save+0x1a6/0x1e0 [drm]
[ 9132.421817] [<ffffffffa001eac1>] drm_vblank_cleanup+0x61/0xa0 [drm]
[ 9132.421849] [<ffffffffa0177a5e>] i915_driver_unload+0xde/0x290 [i915]
[ 9132.421867] [<ffffffffa0020264>] drm_dev_unregister+0x24/0xb0 [drm]
[ 9132.421884] [<ffffffffa002090e>] drm_put_dev+0x1e/0x70 [drm]
[ 9132.421901] [<ffffffffa00e01e0>] i915_pci_remove+0x10/0x20 [i915]
[ 9132.421910] [<ffffffff81347556>] pci_device_remove+0x36/0xb0
[ 9132.421920] [<ffffffff8140084a>] __device_release_driver+0x7a/0xf0
[ 9132.421928] [<ffffffff81400fc8>] driver_detach+0xb8/0xc0
[ 9132.421936] [<ffffffff8140054a>] bus_remove_driver+0x4a/0xb0
[ 9132.421944] [<ffffffff81401717>] driver_unregister+0x27/0x50
[ 9132.421953] [<ffffffff81346f65>] pci_unregister_driver+0x25/0x70
[ 9132.421971] [<ffffffffa00229c8>] drm_pci_exit+0x78/0xa0 [drm]
[ 9132.422000] [<ffffffffa017a6d2>] i915_exit+0x20/0x94e [i915]
[ 9132.422009] [<ffffffff810fb9dc>] SyS_delete_module+0x13c/0x1f0
[ 9132.422019] [<ffffffff8131c5fb>] ?
trace_hardirqs_on_thunk+0x3a/0x3f
[ 9132.422028] [<ffffffff816f7792>] system_call_fastpath+0x16/0x1b
This means it has to be before intel_modeset_cleanup, which cleans the
CRTC structures. But if we move it to before intel_fbdev_fini(), we
get WARNs because intel_fbdev_fini() still tries to use the vblanks,
so the only acceptable point for drm_vblank_cleanup() seems to be this
place.
Related commit:
commit cbb47d179fb345c579cd8cd884693903fceed26a
Author: Chris Wilson <chris@chris-wilson.co.uk>
Date: Mon Sep 23 17:33:20 2013 -0300
drm/i915: Add some missing steps to i915_driver_load error path
Testsuite: igt/drv_module_reload
Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=77511
Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=83484
Signed-off-by: Paulo Zanoni <paulo.r.zanoni@intel.com>
---
drivers/gpu/drm/i915/i915_dma.c | 8 +++++---
1 file changed, 5 insertions(+), 3 deletions(-)
diff --git a/drivers/gpu/drm/i915/i915_dma.c b/drivers/gpu/drm/i915/i915_dma.c
index 85d14e1..1b39807 100644
--- a/drivers/gpu/drm/i915/i915_dma.c
+++ b/drivers/gpu/drm/i915/i915_dma.c
@@ -1853,8 +1853,12 @@ int i915_driver_unload(struct drm_device *dev)
acpi_video_unregister();
- if (drm_core_check_feature(dev, DRIVER_MODESET)) {
+ if (drm_core_check_feature(dev, DRIVER_MODESET))
intel_fbdev_fini(dev);
+
+ drm_vblank_cleanup(dev);
+
+ if (drm_core_check_feature(dev, DRIVER_MODESET)) {
intel_modeset_cleanup(dev);
/*
@@ -1895,8 +1899,6 @@ int i915_driver_unload(struct drm_device *dev)
i915_free_hws(dev);
}
- drm_vblank_cleanup(dev);
-
intel_teardown_gmbus(dev);
intel_teardown_mchbar(dev);
--
2.1.1
^ permalink raw reply related [flat|nested] 3+ messages in thread
* Re: [PATCH] drm/i915: call drm_vblank_cleanup() earlier at unload
2014-10-15 17:15 [PATCH] drm/i915: call drm_vblank_cleanup() earlier at unload Paulo Zanoni
@ 2014-10-17 11:18 ` Ville Syrjälä
2014-10-21 15:22 ` Daniel Vetter
0 siblings, 1 reply; 3+ messages in thread
From: Ville Syrjälä @ 2014-10-17 11:18 UTC (permalink / raw)
To: Paulo Zanoni; +Cc: intel-gfx, Paulo Zanoni
On Wed, Oct 15, 2014 at 02:15:04PM -0300, Paulo Zanoni wrote:
> From: Paulo Zanoni <paulo.r.zanoni@intel.com>
>
> In its current place, it just segfaults while trying to access the
> CRTC structures:
>
> [ 9132.421681] Call Trace:
> [ 9132.421707] [<ffffffffa01130d8>] i915_get_crtc_scanoutpos+0x1e8/0x220 [i915]
> [ 9132.421727] [<ffffffffa001da34>] drm_calc_vbltimestamp_from_scanoutpos+0x94/0x330 [drm]
> [ 9132.421744] [<ffffffffa001d240>] ?vblank_disable_and_save+0x40/0x1e0 [drm]
> [ 9132.421769] [<ffffffffa0114328>] i915_get_vblank_timestamp+0x68/0xb0 [i915]
> [ 9132.421786] [<ffffffffa001d094>] drm_get_last_vbltimestamp+0x44/0x80 [drm]
> [ 9132.421801] [<ffffffffa001d3a6>] vblank_disable_and_save+0x1a6/0x1e0 [drm]
> [ 9132.421817] [<ffffffffa001eac1>] drm_vblank_cleanup+0x61/0xa0 [drm]
> [ 9132.421849] [<ffffffffa0177a5e>] i915_driver_unload+0xde/0x290 [i915]
> [ 9132.421867] [<ffffffffa0020264>] drm_dev_unregister+0x24/0xb0 [drm]
> [ 9132.421884] [<ffffffffa002090e>] drm_put_dev+0x1e/0x70 [drm]
> [ 9132.421901] [<ffffffffa00e01e0>] i915_pci_remove+0x10/0x20 [i915]
> [ 9132.421910] [<ffffffff81347556>] pci_device_remove+0x36/0xb0
> [ 9132.421920] [<ffffffff8140084a>] __device_release_driver+0x7a/0xf0
> [ 9132.421928] [<ffffffff81400fc8>] driver_detach+0xb8/0xc0
> [ 9132.421936] [<ffffffff8140054a>] bus_remove_driver+0x4a/0xb0
> [ 9132.421944] [<ffffffff81401717>] driver_unregister+0x27/0x50
> [ 9132.421953] [<ffffffff81346f65>] pci_unregister_driver+0x25/0x70
> [ 9132.421971] [<ffffffffa00229c8>] drm_pci_exit+0x78/0xa0 [drm]
> [ 9132.422000] [<ffffffffa017a6d2>] i915_exit+0x20/0x94e [i915]
> [ 9132.422009] [<ffffffff810fb9dc>] SyS_delete_module+0x13c/0x1f0
> [ 9132.422019] [<ffffffff8131c5fb>] ?
> trace_hardirqs_on_thunk+0x3a/0x3f
> [ 9132.422028] [<ffffffff816f7792>] system_call_fastpath+0x16/0x1b
>
> This means it has to be before intel_modeset_cleanup, which cleans the
> CRTC structures. But if we move it to before intel_fbdev_fini(), we
> get WARNs because intel_fbdev_fini() still tries to use the vblanks,
> so the only acceptable point for drm_vblank_cleanup() seems to be this
> place.
Hmm. Yeah that seems like the spot we have to put it given it wants
to call the vblank disable hook.
Reviewed-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
>
> Related commit:
>
> commit cbb47d179fb345c579cd8cd884693903fceed26a
> Author: Chris Wilson <chris@chris-wilson.co.uk>
> Date: Mon Sep 23 17:33:20 2013 -0300
> drm/i915: Add some missing steps to i915_driver_load error path
>
> Testsuite: igt/drv_module_reload
> Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=77511
> Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=83484
> Signed-off-by: Paulo Zanoni <paulo.r.zanoni@intel.com>
> ---
> drivers/gpu/drm/i915/i915_dma.c | 8 +++++---
> 1 file changed, 5 insertions(+), 3 deletions(-)
>
> diff --git a/drivers/gpu/drm/i915/i915_dma.c b/drivers/gpu/drm/i915/i915_dma.c
> index 85d14e1..1b39807 100644
> --- a/drivers/gpu/drm/i915/i915_dma.c
> +++ b/drivers/gpu/drm/i915/i915_dma.c
> @@ -1853,8 +1853,12 @@ int i915_driver_unload(struct drm_device *dev)
>
> acpi_video_unregister();
>
> - if (drm_core_check_feature(dev, DRIVER_MODESET)) {
> + if (drm_core_check_feature(dev, DRIVER_MODESET))
> intel_fbdev_fini(dev);
> +
> + drm_vblank_cleanup(dev);
> +
> + if (drm_core_check_feature(dev, DRIVER_MODESET)) {
> intel_modeset_cleanup(dev);
>
> /*
> @@ -1895,8 +1899,6 @@ int i915_driver_unload(struct drm_device *dev)
> i915_free_hws(dev);
> }
>
> - drm_vblank_cleanup(dev);
> -
> intel_teardown_gmbus(dev);
> intel_teardown_mchbar(dev);
>
> --
> 2.1.1
>
> _______________________________________________
> Intel-gfx mailing list
> Intel-gfx@lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/intel-gfx
--
Ville Syrjälä
Intel OTC
^ permalink raw reply [flat|nested] 3+ messages in thread
* Re: [PATCH] drm/i915: call drm_vblank_cleanup() earlier at unload
2014-10-17 11:18 ` Ville Syrjälä
@ 2014-10-21 15:22 ` Daniel Vetter
0 siblings, 0 replies; 3+ messages in thread
From: Daniel Vetter @ 2014-10-21 15:22 UTC (permalink / raw)
To: Ville Syrjälä; +Cc: intel-gfx, Paulo Zanoni
On Fri, Oct 17, 2014 at 02:18:34PM +0300, Ville Syrjälä wrote:
> On Wed, Oct 15, 2014 at 02:15:04PM -0300, Paulo Zanoni wrote:
> > From: Paulo Zanoni <paulo.r.zanoni@intel.com>
> >
> > In its current place, it just segfaults while trying to access the
> > CRTC structures:
> >
> > [ 9132.421681] Call Trace:
> > [ 9132.421707] [<ffffffffa01130d8>] i915_get_crtc_scanoutpos+0x1e8/0x220 [i915]
> > [ 9132.421727] [<ffffffffa001da34>] drm_calc_vbltimestamp_from_scanoutpos+0x94/0x330 [drm]
> > [ 9132.421744] [<ffffffffa001d240>] ?vblank_disable_and_save+0x40/0x1e0 [drm]
> > [ 9132.421769] [<ffffffffa0114328>] i915_get_vblank_timestamp+0x68/0xb0 [i915]
> > [ 9132.421786] [<ffffffffa001d094>] drm_get_last_vbltimestamp+0x44/0x80 [drm]
> > [ 9132.421801] [<ffffffffa001d3a6>] vblank_disable_and_save+0x1a6/0x1e0 [drm]
> > [ 9132.421817] [<ffffffffa001eac1>] drm_vblank_cleanup+0x61/0xa0 [drm]
> > [ 9132.421849] [<ffffffffa0177a5e>] i915_driver_unload+0xde/0x290 [i915]
> > [ 9132.421867] [<ffffffffa0020264>] drm_dev_unregister+0x24/0xb0 [drm]
> > [ 9132.421884] [<ffffffffa002090e>] drm_put_dev+0x1e/0x70 [drm]
> > [ 9132.421901] [<ffffffffa00e01e0>] i915_pci_remove+0x10/0x20 [i915]
> > [ 9132.421910] [<ffffffff81347556>] pci_device_remove+0x36/0xb0
> > [ 9132.421920] [<ffffffff8140084a>] __device_release_driver+0x7a/0xf0
> > [ 9132.421928] [<ffffffff81400fc8>] driver_detach+0xb8/0xc0
> > [ 9132.421936] [<ffffffff8140054a>] bus_remove_driver+0x4a/0xb0
> > [ 9132.421944] [<ffffffff81401717>] driver_unregister+0x27/0x50
> > [ 9132.421953] [<ffffffff81346f65>] pci_unregister_driver+0x25/0x70
> > [ 9132.421971] [<ffffffffa00229c8>] drm_pci_exit+0x78/0xa0 [drm]
> > [ 9132.422000] [<ffffffffa017a6d2>] i915_exit+0x20/0x94e [i915]
> > [ 9132.422009] [<ffffffff810fb9dc>] SyS_delete_module+0x13c/0x1f0
> > [ 9132.422019] [<ffffffff8131c5fb>] ?
> > trace_hardirqs_on_thunk+0x3a/0x3f
> > [ 9132.422028] [<ffffffff816f7792>] system_call_fastpath+0x16/0x1b
> >
> > This means it has to be before intel_modeset_cleanup, which cleans the
> > CRTC structures. But if we move it to before intel_fbdev_fini(), we
> > get WARNs because intel_fbdev_fini() still tries to use the vblanks,
> > so the only acceptable point for drm_vblank_cleanup() seems to be this
> > place.
>
> Hmm. Yeah that seems like the spot we have to put it given it wants
> to call the vblank disable hook.
>
> Reviewed-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
Queued for -next, thanks for the patch.
-Daniel
--
Daniel Vetter
Software Engineer, Intel Corporation
+41 (0) 79 365 57 48 - http://blog.ffwll.ch
^ permalink raw reply [flat|nested] 3+ messages in thread
end of thread, other threads:[~2014-10-21 15:21 UTC | newest]
Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2014-10-15 17:15 [PATCH] drm/i915: call drm_vblank_cleanup() earlier at unload Paulo Zanoni
2014-10-17 11:18 ` Ville Syrjälä
2014-10-21 15:22 ` Daniel Vetter
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.