Commit ea39f835168f60b01e59d0f348da25d297e7cf94

Authored by Kristian Høgsberg
Committed by Dave Airlie
1 parent b4476f52e4

drm: Release user fbs in drm_release

Avoids leaking fbs and associated buffers on release.

Signed-off-by: Kristian Høgsberg <krh@redhat.com>
Tested-by: Tested-by: Chris Wilson <chris@chris-wilson.co.uk>
Signed-off-by: Eric Anholt <eric@anholt.net>
Signed-off-by: Dave Airlie <airlied@linux.ie>

Showing 3 changed files with 5 additions and 3 deletions Side-by-side Diff

drivers/gpu/drm/drm_crtc.c
... ... @@ -1741,9 +1741,8 @@
1741 1741 * RETURNS:
1742 1742 * Zero on success, errno on failure.
1743 1743 */
1744   -void drm_fb_release(struct file *filp)
  1744 +void drm_fb_release(struct drm_file *priv)
1745 1745 {
1746   - struct drm_file *priv = filp->private_data;
1747 1746 struct drm_device *dev = priv->minor->dev;
1748 1747 struct drm_framebuffer *fb, *tfb;
1749 1748  
drivers/gpu/drm/drm_fops.c
... ... @@ -457,6 +457,9 @@
457 457 if (dev->driver->driver_features & DRIVER_GEM)
458 458 drm_gem_release(dev, file_priv);
459 459  
  460 + if (dev->driver->driver_features & DRIVER_MODESET)
  461 + drm_fb_release(file_priv);
  462 +
460 463 mutex_lock(&dev->ctxlist_mutex);
461 464 if (!list_empty(&dev->ctxlist)) {
462 465 struct drm_ctx_list *pos, *n;
include/drm/drm_crtc.h
... ... @@ -609,7 +609,7 @@
609 609 extern char *drm_get_dvi_i_select_name(int val);
610 610 extern char *drm_get_tv_subconnector_name(int val);
611 611 extern char *drm_get_tv_select_name(int val);
612   -extern void drm_fb_release(struct file *filp);
  612 +extern void drm_fb_release(struct drm_file *file_priv);
613 613 extern int drm_mode_group_init_legacy_group(struct drm_device *dev, struct drm_mode_group *group);
614 614 extern struct edid *drm_get_edid(struct drm_connector *connector,
615 615 struct i2c_adapter *adapter);