aboutsummaryrefslogtreecommitdiffstats
path: root/drivers
diff options
context:
space:
mode:
authorMarcin Slusarz <marcin.slusarz@gmail.com>2012-04-15 08:36:08 -0400
committerBen Skeggs <bskeggs@redhat.com>2012-05-24 02:31:54 -0400
commit5ace2c9d6f5bc4600ca43fe188a33efc4c2dba79 (patch)
tree59b194d4528fe1e3ade4655022dc7574d17053be /drivers
parentd37f60c87fbf9dca6724ed42fd55b031f88dd46a (diff)
drm/nouveau: cleanup after display init failure
Depending on exact point of failure, not cleaning would lead to BUG_ONs/oopses in various distant places. Signed-off-by: Marcin Slusarz <marcin.slusarz@gmail.com> Signed-off-by: Ben Skeggs <bskeggs@redhat.com>
Diffstat (limited to 'drivers')
-rw-r--r--drivers/gpu/drm/nouveau/nouveau_display.c11
1 files changed, 9 insertions, 2 deletions
diff --git a/drivers/gpu/drm/nouveau/nouveau_display.c b/drivers/gpu/drm/nouveau/nouveau_display.c
index b670b0d34233..980b3e187b72 100644
--- a/drivers/gpu/drm/nouveau/nouveau_display.c
+++ b/drivers/gpu/drm/nouveau/nouveau_display.c
@@ -325,14 +325,21 @@ nouveau_display_create(struct drm_device *dev)
325 325
326 ret = disp->create(dev); 326 ret = disp->create(dev);
327 if (ret) 327 if (ret)
328 return ret; 328 goto disp_create_err;
329 329
330 if (dev->mode_config.num_crtc) { 330 if (dev->mode_config.num_crtc) {
331 ret = drm_vblank_init(dev, dev->mode_config.num_crtc); 331 ret = drm_vblank_init(dev, dev->mode_config.num_crtc);
332 if (ret) 332 if (ret)
333 return ret; 333 goto vblank_err;
334 } 334 }
335 335
336 return 0;
337
338vblank_err:
339 disp->destroy(dev);
340disp_create_err:
341 drm_kms_helper_poll_fini(dev);
342 drm_mode_config_cleanup(dev);
336 return ret; 343 return ret;
337} 344}
338 345