diff options
author | Andy Gross <andy.gross@ti.com> | 2012-05-24 12:44:22 -0400 |
---|---|---|
committer | Greg Kroah-Hartman <gregkh@linuxfoundation.org> | 2012-06-11 11:42:09 -0400 |
commit | afb6a6a01b51b6712485ea045e2b882061d250d9 (patch) | |
tree | abbcf2a97a028eabfcd145d6b53cf12806f986b6 | |
parent | 279bf2e57c30c9a4482b2b6ede11b31c41e35e78 (diff) |
staging: omapdrm: fix crash when freeing bad fb
During unload, don't cleanup the framebuffer if it is not valid.
Signed-off-by: Andy Gross <andy.gross@ti.com>
Reviewed-by: Rob Clark <rob.clark@linaro.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
-rw-r--r-- | drivers/staging/omapdrm/omap_fbdev.c | 10 |
1 files changed, 7 insertions, 3 deletions
diff --git a/drivers/staging/omapdrm/omap_fbdev.c b/drivers/staging/omapdrm/omap_fbdev.c index 11acd4c35ed2..8c6ed3b0c6f6 100644 --- a/drivers/staging/omapdrm/omap_fbdev.c +++ b/drivers/staging/omapdrm/omap_fbdev.c | |||
@@ -208,7 +208,8 @@ static int omap_fbdev_create(struct drm_fb_helper *helper, | |||
208 | */ | 208 | */ |
209 | ret = omap_gem_get_paddr(fbdev->bo, &paddr, true); | 209 | ret = omap_gem_get_paddr(fbdev->bo, &paddr, true); |
210 | if (ret) { | 210 | if (ret) { |
211 | dev_err(dev->dev, "could not map (paddr)!\n"); | 211 | dev_err(dev->dev, |
212 | "could not map (paddr)! Skipping framebuffer alloc\n"); | ||
212 | ret = -ENOMEM; | 213 | ret = -ENOMEM; |
213 | goto fail; | 214 | goto fail; |
214 | } | 215 | } |
@@ -388,8 +389,11 @@ void omap_fbdev_free(struct drm_device *dev) | |||
388 | 389 | ||
389 | fbi = helper->fbdev; | 390 | fbi = helper->fbdev; |
390 | 391 | ||
391 | unregister_framebuffer(fbi); | 392 | /* only cleanup framebuffer if it is present */ |
392 | framebuffer_release(fbi); | 393 | if (fbi) { |
394 | unregister_framebuffer(fbi); | ||
395 | framebuffer_release(fbi); | ||
396 | } | ||
393 | 397 | ||
394 | drm_fb_helper_fini(helper); | 398 | drm_fb_helper_fini(helper); |
395 | 399 | ||