diff options
author | Marcin Slusarz <marcin.slusarz@gmail.com> | 2012-04-15 08:36:08 -0400 |
---|---|---|
committer | Ben Skeggs <bskeggs@redhat.com> | 2012-05-24 02:31:54 -0400 |
commit | 5ace2c9d6f5bc4600ca43fe188a33efc4c2dba79 (patch) | |
tree | 59b194d4528fe1e3ade4655022dc7574d17053be | |
parent | d37f60c87fbf9dca6724ed42fd55b031f88dd46a (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>
-rw-r--r-- | drivers/gpu/drm/nouveau/nouveau_display.c | 11 |
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 | |||
338 | vblank_err: | ||
339 | disp->destroy(dev); | ||
340 | disp_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 | ||