When the .atomic_commit() handler fails, clean up planes previoulsy prepared by drm_atomic_helper_prepare_planes() with a call to drm_atomic_helper_cleanup_planes().
Signed-off-by: Laurent Pinchart laurent.pinchart@ideasonboard.com --- drivers/gpu/drm/msm/msm_atomic.c | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-)
diff --git a/drivers/gpu/drm/msm/msm_atomic.c b/drivers/gpu/drm/msm/msm_atomic.c index 5b192128cda2..55d4973c476a 100644 --- a/drivers/gpu/drm/msm/msm_atomic.c +++ b/drivers/gpu/drm/msm/msm_atomic.c @@ -187,8 +187,10 @@ int msm_atomic_commit(struct drm_device *dev, return ret;
c = commit_init(state); - if (!c) - return -ENOMEM; + if (!c) { + ret = -ENOMEM; + goto error; + }
/* * Figure out what crtcs we have: @@ -221,7 +223,7 @@ int msm_atomic_commit(struct drm_device *dev, ret = start_atomic(dev->dev_private, c->crtc_mask); if (ret) { kfree(c); - return ret; + goto error; }
/* @@ -265,4 +267,8 @@ int msm_atomic_commit(struct drm_device *dev, complete_commit(c);
return 0; + +error: + drm_atomic_helper_cleanup_planes(dev, state); + return ret; }
When the .atomic_commit() handler fails, clean up planes previoulsy prepared by drm_atomic_helper_prepare_planes() with a call to drm_atomic_helper_cleanup_planes().
Signed-off-by: Laurent Pinchart laurent.pinchart@ideasonboard.com --- drivers/gpu/drm/rcar-du/rcar_du_kms.c | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-)
diff --git a/drivers/gpu/drm/rcar-du/rcar_du_kms.c b/drivers/gpu/drm/rcar-du/rcar_du_kms.c index 20859aae882e..226a7e368b59 100644 --- a/drivers/gpu/drm/rcar-du/rcar_du_kms.c +++ b/drivers/gpu/drm/rcar-du/rcar_du_kms.c @@ -495,8 +495,10 @@ static int rcar_du_atomic_commit(struct drm_device *dev,
/* Allocate the commit object. */ commit = kzalloc(sizeof(*commit), GFP_KERNEL); - if (commit == NULL) - return -ENOMEM; + if (commit == NULL) { + ret = -ENOMEM; + goto error; + }
INIT_WORK(&commit->work, rcar_du_atomic_work); commit->dev = dev; @@ -519,7 +521,7 @@ static int rcar_du_atomic_commit(struct drm_device *dev,
if (ret) { kfree(commit); - return ret; + goto error; }
/* Swap the state, this is the point of no return. */ @@ -531,6 +533,10 @@ static int rcar_du_atomic_commit(struct drm_device *dev, rcar_du_atomic_complete(commit);
return 0; + +error: + drm_atomic_helper_cleanup_planes(dev, state); + return ret; }
/* -----------------------------------------------------------------------------
On Wed, May 27, 2015 at 7:39 AM, Laurent Pinchart laurent.pinchart@ideasonboard.com wrote:
When the .atomic_commit() handler fails, clean up planes previoulsy prepared by drm_atomic_helper_prepare_planes() with a call to drm_atomic_helper_cleanup_planes().
Thanks, I'll send that w/ my pull req for 4.2
BR, -R
Signed-off-by: Laurent Pinchart laurent.pinchart@ideasonboard.com
drivers/gpu/drm/msm/msm_atomic.c | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-)
diff --git a/drivers/gpu/drm/msm/msm_atomic.c b/drivers/gpu/drm/msm/msm_atomic.c index 5b192128cda2..55d4973c476a 100644 --- a/drivers/gpu/drm/msm/msm_atomic.c +++ b/drivers/gpu/drm/msm/msm_atomic.c @@ -187,8 +187,10 @@ int msm_atomic_commit(struct drm_device *dev, return ret;
c = commit_init(state);
if (!c)
return -ENOMEM;
if (!c) {
ret = -ENOMEM;
goto error;
} /* * Figure out what crtcs we have:
@@ -221,7 +223,7 @@ int msm_atomic_commit(struct drm_device *dev, ret = start_atomic(dev->dev_private, c->crtc_mask); if (ret) { kfree(c);
return ret;
goto error; } /*
@@ -265,4 +267,8 @@ int msm_atomic_commit(struct drm_device *dev, complete_commit(c);
return 0;
+error:
drm_atomic_helper_cleanup_planes(dev, state);
return ret;
}
Regards,
Laurent Pinchart
dri-devel@lists.freedesktop.org