[PATCH 2/3] Simplify radeon_do_pageflip() error handling slightly more

Michel Dänzer michel at daenzer.net
Thu Mar 26 01:01:26 PDT 2015


From: Michel Dänzer <michel.daenzer at amd.com>

We don't need the local variable old_fb_id.

Signed-off-by: Michel Dänzer <michel.daenzer at amd.com>
---
 src/drmmode_display.c | 33 ++++++++++++++++-----------------
 1 file changed, 16 insertions(+), 17 deletions(-)

diff --git a/src/drmmode_display.c b/src/drmmode_display.c
index b8aaf64..bd1ab76 100644
--- a/src/drmmode_display.c
+++ b/src/drmmode_display.c
@@ -2274,7 +2274,7 @@ Bool radeon_do_pageflip(ScrnInfoPtr scrn, ClientPtr client,
 	drmmode_crtc_private_ptr drmmode_crtc = config->crtc[0]->driver_private;
 	drmmode_ptr drmmode = drmmode_crtc->drmmode;
 	unsigned int pitch;
-	int i, old_fb_id;
+	int i;
 	uint32_t tiling_flags = 0;
 	int height;
 	drmmode_flipdata_ptr flipdata;
@@ -2295,21 +2295,22 @@ Bool radeon_do_pageflip(ScrnInfoPtr scrn, ClientPtr client,
 		pitch = info->front_surface.level[0].pitch_bytes;
 	}
 
+        flipdata = calloc(1, sizeof(drmmode_flipdata_rec));
+        if (!flipdata) {
+             xf86DrvMsg(scrn->scrnIndex, X_WARNING,
+                        "flip queue: data alloc failed.\n");
+             goto error;
+        }
+
 	/*
 	 * Create a new handle for the back buffer
 	 */
-	old_fb_id = drmmode->fb_id;
+	flipdata->old_fb_id = drmmode->fb_id;
 	if (drmModeAddFB(drmmode->fd, scrn->virtualX, height,
 			 scrn->depth, scrn->bitsPerPixel, pitch,
 			 new_front_handle, &drmmode->fb_id))
-		goto error_out;
+		goto error;
 
-        flipdata = calloc(1, sizeof(drmmode_flipdata_rec));
-        if (!flipdata) {
-             xf86DrvMsg(scrn->scrnIndex, X_WARNING,
-                        "flip queue: data alloc failed.\n");
-             goto error_undo;
-        }
 	/*
 	 * Queue flips on all enabled CRTCs
 	 * Note that if/when we get per-CRTC buffers, we'll have to update this.
@@ -2322,7 +2323,6 @@ Bool radeon_do_pageflip(ScrnInfoPtr scrn, ClientPtr client,
 
         flipdata->event_data = data;
         flipdata->drmmode = drmmode;
-        flipdata->old_fb_id = old_fb_id;
 
 	for (i = 0; i < config->num_crtc; i++) {
 		if (!config->crtc[i]->enabled)
@@ -2335,7 +2335,7 @@ Bool radeon_do_pageflip(ScrnInfoPtr scrn, ClientPtr client,
 		if (!flipcarrier) {
 			xf86DrvMsg(scrn->scrnIndex, X_WARNING,
 				   "flip queue: carrier alloc failed.\n");
-			goto error_undo;
+			goto error;
 		}
 
 		/* Only the reference crtc will finally deliver its page flip
@@ -2353,7 +2353,7 @@ Bool radeon_do_pageflip(ScrnInfoPtr scrn, ClientPtr client,
 		if (!drm_queue) {
 			xf86DrvMsg(scrn->scrnIndex, X_WARNING,
 				   "Allocating DRM queue event entry failed.\n");
-			goto error_undo;
+			goto error;
 		}
 
 		if (drmModePageFlip(drmmode->fd, drmmode_crtc->mode_crtc->crtc_id,
@@ -2361,7 +2361,7 @@ Bool radeon_do_pageflip(ScrnInfoPtr scrn, ClientPtr client,
 				    drm_queue)) {
 			xf86DrvMsg(scrn->scrnIndex, X_WARNING,
 				   "flip queue failed: %s\n", strerror(errno));
-			goto error_undo;
+			goto error;
 		}
 		flipcarrier = NULL;
 		drm_queue = NULL;
@@ -2370,10 +2370,10 @@ Bool radeon_do_pageflip(ScrnInfoPtr scrn, ClientPtr client,
 	if (flipdata->flip_count > 0)
 		return TRUE;
 
-error_undo:
-	if (!flipdata || flipdata->flip_count <= 1) {
+error:
+	if (flipdata && flipdata->flip_count <= 1) {
 		drmModeRmFB(drmmode->fd, drmmode->fb_id);
-		drmmode->fb_id = old_fb_id;
+		drmmode->fb_id = flipdata->old_fb_id;
 	}
 
 	if (drm_queue)
@@ -2383,7 +2383,6 @@ error_undo:
 	else
 		free(flipdata);
 
-error_out:
 	xf86DrvMsg(scrn->scrnIndex, X_WARNING, "Page flip failed: %s\n",
 		   strerror(errno));
 	return FALSE;
-- 
2.1.4



More information about the xorg-driver-ati mailing list