On 09/17/2012 06:38 PM, Chris Wilson wrote: > As during the plane cleanup, we wish to disable the hardware and > so may modify state on the associated CRTC, that CRTC must continue to > exist until we are finished.
A similar issue can occur in the drm_framebuffer_cleanup(). If crtc and plane use same framebuffer and the framebuffer is destroyed, crtc is turned off prior to turning off plane. > Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=54101 > Signed-off-by: Chris Wilson <chris at chris-wilson.co.uk> > Cc: Jesse Barnes <jbarnes at virtuousgeek.org> > Cc: stable at vger.kernel.org > --- > drivers/gpu/drm/drm_crtc.c | 8 ++++---- > 1 file changed, 4 insertions(+), 4 deletions(-) > > diff --git a/drivers/gpu/drm/drm_crtc.c b/drivers/gpu/drm/drm_crtc.c > index 6fbfc24..af81f77 100644 > --- a/drivers/gpu/drm/drm_crtc.c > +++ b/drivers/gpu/drm/drm_crtc.c > @@ -1034,15 +1034,15 @@ void drm_mode_config_cleanup(struct drm_device *dev) > fb->funcs->destroy(fb); > } > > - list_for_each_entry_safe(crtc, ct, &dev->mode_config.crtc_list, head) { > - crtc->funcs->destroy(crtc); > - } > - > list_for_each_entry_safe(plane, plt, &dev->mode_config.plane_list, > head) { > plane->funcs->destroy(plane); > } > > + list_for_each_entry_safe(crtc, ct, &dev->mode_config.crtc_list, head) { > + crtc->funcs->destroy(crtc); > + } > + > idr_remove_all(&dev->mode_config.crtc_idr); > idr_destroy(&dev->mode_config.crtc_idr); > }
