* [PATCH] drm/atomic: put commit when -ERESTARTSYS received
@ 2017-08-17 14:21 Jerry Zuo
2017-08-18 7:42 ` Daniel Vetter
0 siblings, 1 reply; 2+ messages in thread
From: Jerry Zuo @ 2017-08-17 14:21 UTC (permalink / raw)
To: dri-devel-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW,
amd-gfx-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW
Cc: daniel.vetter-/w4YWyX8dFk, Jerry Zuo, harry.wentland-5C7GfCeVMHo
During page flip atomic_check and atomic_commit can return
-ERESTARTSYS to restart the ioctl. When this happens we fail to
put the commit object leading to a memory leak.
v2: Changed subject tag to drm/atomic
Signed-off-by: Jerry Zuo <Jerry.Zuo@amd.com>
---
drivers/gpu/drm/drm_atomic.c | 25 +++++++++++++++++++++++--
1 file changed, 23 insertions(+), 2 deletions(-)
diff --git a/drivers/gpu/drm/drm_atomic.c b/drivers/gpu/drm/drm_atomic.c
index f32506a7c1d6..f2f623dacf90 100644
--- a/drivers/gpu/drm/drm_atomic.c
+++ b/drivers/gpu/drm/drm_atomic.c
@@ -1642,14 +1642,35 @@ int drm_atomic_nonblocking_commit(struct drm_atomic_state *state)
{
struct drm_mode_config *config = &state->dev->mode_config;
int ret;
+ int i;
+ struct drm_crtc *crtc;
+ struct drm_crtc_state *crtc_state;
ret = drm_atomic_check_only(state);
- if (ret)
+ if (ret) {
+ if (ret == -ERESTARTSYS)
+ goto fail;
+
return ret;
+ }
DRM_DEBUG_ATOMIC("commiting %p nonblocking\n", state);
- return config->funcs->atomic_commit(state->dev, state, true);
+ ret = config->funcs->atomic_commit(state->dev, state, true);
+ if (ret == -ERESTARTSYS)
+ goto fail;
+
+ return ret;
+
+ /* cleanup commit object if commit fails with ERESTARTSYS */
+fail:
+ for_each_crtc_in_state(state, crtc, crtc_state, i) {
+ if (state->crtcs[i].commit) {
+ drm_crtc_commit_put(state->crtcs[i].commit);
+ }
+ }
+
+ return ret;
}
EXPORT_SYMBOL(drm_atomic_nonblocking_commit);
--
2.11.0
_______________________________________________
amd-gfx mailing list
amd-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/amd-gfx
^ permalink raw reply related [flat|nested] 2+ messages in thread
* Re: [PATCH] drm/atomic: put commit when -ERESTARTSYS received
2017-08-17 14:21 [PATCH] drm/atomic: put commit when -ERESTARTSYS received Jerry Zuo
@ 2017-08-18 7:42 ` Daniel Vetter
0 siblings, 0 replies; 2+ messages in thread
From: Daniel Vetter @ 2017-08-18 7:42 UTC (permalink / raw)
To: Jerry Zuo; +Cc: daniel.vetter, amd-gfx, dri-devel
On Thu, Aug 17, 2017 at 10:21:18AM -0400, Jerry Zuo wrote:
> During page flip atomic_check and atomic_commit can return
> -ERESTARTSYS to restart the ioctl. When this happens we fail to
> put the commit object leading to a memory leak.
>
> v2: Changed subject tag to drm/atomic
>
> Signed-off-by: Jerry Zuo <Jerry.Zuo@amd.com>
When resubmitting pls cc: everyone involved and cc'ed in the old
discussion. Still looking for that testcase, please have a chat with
Maarten over irc or so.
-Daniel
> ---
> drivers/gpu/drm/drm_atomic.c | 25 +++++++++++++++++++++++--
> 1 file changed, 23 insertions(+), 2 deletions(-)
>
> diff --git a/drivers/gpu/drm/drm_atomic.c b/drivers/gpu/drm/drm_atomic.c
> index f32506a7c1d6..f2f623dacf90 100644
> --- a/drivers/gpu/drm/drm_atomic.c
> +++ b/drivers/gpu/drm/drm_atomic.c
> @@ -1642,14 +1642,35 @@ int drm_atomic_nonblocking_commit(struct drm_atomic_state *state)
> {
> struct drm_mode_config *config = &state->dev->mode_config;
> int ret;
> + int i;
> + struct drm_crtc *crtc;
> + struct drm_crtc_state *crtc_state;
>
> ret = drm_atomic_check_only(state);
> - if (ret)
> + if (ret) {
> + if (ret == -ERESTARTSYS)
> + goto fail;
> +
> return ret;
> + }
>
> DRM_DEBUG_ATOMIC("commiting %p nonblocking\n", state);
>
> - return config->funcs->atomic_commit(state->dev, state, true);
> + ret = config->funcs->atomic_commit(state->dev, state, true);
> + if (ret == -ERESTARTSYS)
> + goto fail;
> +
> + return ret;
> +
> + /* cleanup commit object if commit fails with ERESTARTSYS */
> +fail:
> + for_each_crtc_in_state(state, crtc, crtc_state, i) {
> + if (state->crtcs[i].commit) {
> + drm_crtc_commit_put(state->crtcs[i].commit);
> + }
> + }
> +
> + return ret;
> }
> EXPORT_SYMBOL(drm_atomic_nonblocking_commit);
>
> --
> 2.11.0
>
--
Daniel Vetter
Software Engineer, Intel Corporation
http://blog.ffwll.ch
_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/dri-devel
^ permalink raw reply [flat|nested] 2+ messages in thread
end of thread, other threads:[~2017-08-18 7:42 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2017-08-17 14:21 [PATCH] drm/atomic: put commit when -ERESTARTSYS received Jerry Zuo
2017-08-18 7:42 ` Daniel Vetter
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox