Module Name:    xsrc
Committed By:   mrg
Date:           Sun Jul 11 21:24:14 UTC 2021

Modified Files:
        xsrc/external/mit/xf86-video-ati-kms/dist/src: drmmode_display.c
            radeon_bo_helper.c

Log Message:
fix a couple of issues found while testing new drm.

- actually check the return value of radeon_bo_open() in a three places
- for create_pixmap_for_fbcon(), release the bo when jumping to
  'out_free_fb'.  fixes memory leak.


To generate a diff of this commit:
cvs rdiff -u -r1.2 -r1.3 \
    xsrc/external/mit/xf86-video-ati-kms/dist/src/drmmode_display.c
cvs rdiff -u -r1.3 -r1.4 \
    xsrc/external/mit/xf86-video-ati-kms/dist/src/radeon_bo_helper.c

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: xsrc/external/mit/xf86-video-ati-kms/dist/src/drmmode_display.c
diff -u xsrc/external/mit/xf86-video-ati-kms/dist/src/drmmode_display.c:1.2 xsrc/external/mit/xf86-video-ati-kms/dist/src/drmmode_display.c:1.3
--- xsrc/external/mit/xf86-video-ati-kms/dist/src/drmmode_display.c:1.2	Fri Feb  7 23:36:50 2020
+++ xsrc/external/mit/xf86-video-ati-kms/dist/src/drmmode_display.c	Sun Jul 11 21:24:14 2021
@@ -373,7 +373,7 @@ create_pixmap_for_fbcon(drmmode_ptr drmm
 	RADEONEntPtr pRADEONEnt = RADEONEntPriv(pScrn);
 	RADEONInfoPtr info = RADEONPTR(pScrn);
 	PixmapPtr pixmap = info->fbcon_pixmap;
-	struct radeon_buffer *bo;
+	struct radeon_buffer *bo = NULL;
 	drmModeFBPtr fbcon;
 	struct drm_gem_flink flink;
 
@@ -405,7 +405,7 @@ create_pixmap_for_fbcon(drmmode_ptr drmm
 	bo->ref_count = 1;
 
 	bo->bo.radeon = radeon_bo_open(drmmode->bufmgr, flink.name, 0, 0, 0, 0);
-	if (!bo) {
+	if (!bo->bo.radeon) {
 		xf86DrvMsg(pScrn->scrnIndex, X_ERROR,
 			   "Couldn't open BO for fbcon handle\n");
 		goto out_free_fb;
@@ -415,8 +415,8 @@ create_pixmap_for_fbcon(drmmode_ptr drmm
 					  fbcon->depth, fbcon->bpp, fbcon->pitch,
 					  bo);
 	info->fbcon_pixmap = pixmap;
-	radeon_buffer_unref(&bo);
 out_free_fb:
+	radeon_buffer_unref(&bo);
 	drmModeFreeFB(fbcon);
 	return pixmap;
 }

Index: xsrc/external/mit/xf86-video-ati-kms/dist/src/radeon_bo_helper.c
diff -u xsrc/external/mit/xf86-video-ati-kms/dist/src/radeon_bo_helper.c:1.3 xsrc/external/mit/xf86-video-ati-kms/dist/src/radeon_bo_helper.c:1.4
--- xsrc/external/mit/xf86-video-ati-kms/dist/src/radeon_bo_helper.c:1.3	Sat Jun  1 07:25:41 2019
+++ xsrc/external/mit/xf86-video-ati-kms/dist/src/radeon_bo_helper.c	Sun Jul 11 21:24:14 2021
@@ -308,7 +308,7 @@ radeon_alloc_pixmap_bo(ScrnInfoPtr pScrn
     bo->bo.radeon = radeon_bo_open(info->bufmgr, 0, size, base_align,
 				   domain, flags);
 
-    if (bo && tiling && radeon_bo_set_tiling(bo->bo.radeon, tiling, pitch) == 0)
+    if (bo->bo.radeon && tiling && radeon_bo_set_tiling(bo->bo.radeon, tiling, pitch) == 0)
 	*new_tiling = tiling;
 
     *new_pitch = pitch;
@@ -504,7 +504,7 @@ Bool radeon_set_shared_pixmap_backing(Pi
 #endif
 
     bo->bo.radeon = radeon_gem_bo_open_prime(info->bufmgr, ihandle, size);
-    if (!bo)
+    if (!bo->bo.radeon)
         goto error;
 
     bo->ref_count = 1;

Reply via email to