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>
This commit is contained in:
committed by
Dave Airlie
parent
b4476f52e4
commit
ea39f83516
@@ -1741,9 +1741,8 @@ out:
|
|||||||
* RETURNS:
|
* RETURNS:
|
||||||
* Zero on success, errno on failure.
|
* Zero on success, errno on failure.
|
||||||
*/
|
*/
|
||||||
void drm_fb_release(struct file *filp)
|
void drm_fb_release(struct drm_file *priv)
|
||||||
{
|
{
|
||||||
struct drm_file *priv = filp->private_data;
|
|
||||||
struct drm_device *dev = priv->minor->dev;
|
struct drm_device *dev = priv->minor->dev;
|
||||||
struct drm_framebuffer *fb, *tfb;
|
struct drm_framebuffer *fb, *tfb;
|
||||||
|
|
||||||
|
@@ -457,6 +457,9 @@ int drm_release(struct inode *inode, struct file *filp)
|
|||||||
if (dev->driver->driver_features & DRIVER_GEM)
|
if (dev->driver->driver_features & DRIVER_GEM)
|
||||||
drm_gem_release(dev, file_priv);
|
drm_gem_release(dev, file_priv);
|
||||||
|
|
||||||
|
if (dev->driver->driver_features & DRIVER_MODESET)
|
||||||
|
drm_fb_release(file_priv);
|
||||||
|
|
||||||
mutex_lock(&dev->ctxlist_mutex);
|
mutex_lock(&dev->ctxlist_mutex);
|
||||||
if (!list_empty(&dev->ctxlist)) {
|
if (!list_empty(&dev->ctxlist)) {
|
||||||
struct drm_ctx_list *pos, *n;
|
struct drm_ctx_list *pos, *n;
|
||||||
|
@@ -609,7 +609,7 @@ extern char *drm_get_dvi_i_subconnector_name(int val);
|
|||||||
extern char *drm_get_dvi_i_select_name(int val);
|
extern char *drm_get_dvi_i_select_name(int val);
|
||||||
extern char *drm_get_tv_subconnector_name(int val);
|
extern char *drm_get_tv_subconnector_name(int val);
|
||||||
extern char *drm_get_tv_select_name(int val);
|
extern char *drm_get_tv_select_name(int val);
|
||||||
extern void drm_fb_release(struct file *filp);
|
extern void drm_fb_release(struct drm_file *file_priv);
|
||||||
extern int drm_mode_group_init_legacy_group(struct drm_device *dev, struct drm_mode_group *group);
|
extern int drm_mode_group_init_legacy_group(struct drm_device *dev, struct drm_mode_group *group);
|
||||||
extern struct edid *drm_get_edid(struct drm_connector *connector,
|
extern struct edid *drm_get_edid(struct drm_connector *connector,
|
||||||
struct i2c_adapter *adapter);
|
struct i2c_adapter *adapter);
|
||||||
|
Reference in New Issue
Block a user