xf86-video-amdgpu: Branch 'master' - 4 commits

Michel Dänzer daenzer at kemper.freedesktop.org
Fri Oct 20 13:53:40 UTC 2017


 src/amdgpu_kms.c      |   22 ++++++++++++++++------
 src/amdgpu_probe.c    |   14 ++++++--------
 src/drmmode_display.c |    4 ++--
 3 files changed, 24 insertions(+), 16 deletions(-)

New commits:
commit f6b39bcd45cb06976ba8a3600df77fc471c63995
Author: Michel Dänzer <michel.daenzer at amd.com>
Date:   Thu Oct 19 18:02:05 2017 +0200

    Always call drmModeFreeProperty after drmModeGetProperty
    
    We were not doing so in all cases, leaking memory allocated by the
    latter.
    
    Reviewed-by: Alex Deucher <alexander.deucher at amd.com>

diff --git a/src/drmmode_display.c b/src/drmmode_display.c
index 3cbf2bd..2cef93c 100644
--- a/src/drmmode_display.c
+++ b/src/drmmode_display.c
@@ -1891,8 +1891,8 @@ drmmode_output_init(ScrnInfoPtr pScrn, drmmode_ptr drmmode, drmModeResPtr mode_r
 				drmModeFreeProperty(props);
 				break;
 			}
-			drmModeFreeProperty(props);
 		}
+		drmModeFreeProperty(props);
 	}
 
 	kencoders = calloc(sizeof(drmModeEncoderPtr), koutput->count_encoders);
@@ -1986,8 +1986,8 @@ drmmode_output_init(ScrnInfoPtr pScrn, drmmode_ptr drmmode, drmModeResPtr mode_r
 				drmModeFreeProperty(props);
 				break;
 			}
-			drmModeFreeProperty(props);
 		}
+		drmModeFreeProperty(props);
 	}
 
 	if (dynamic) {
commit 84aad09f18fed6b52b0c073f0bbd675a6de07807
Author: Michel Dänzer <michel.daenzer at amd.com>
Date:   Thu Oct 19 17:54:13 2017 +0200

    Call TimerFree for timer created in LeaveVT
    
    We were leaking the memory allocated by TimerSet.
    
    Reviewed-by: Alex Deucher <alexander.deucher at amd.com>

diff --git a/src/amdgpu_kms.c b/src/amdgpu_kms.c
index 7d58209..cb0fb3b 100644
--- a/src/amdgpu_kms.c
+++ b/src/amdgpu_kms.c
@@ -1624,6 +1624,7 @@ CARD32 cleanup_black_fb(OsTimerPtr timer, CARD32 now, pointer data)
 		drmmode_fb_reference(pAMDGPUEnt->fd, &drmmode_crtc->fb, NULL);
 	}
 
+	TimerFree(timer);
 	return 0;
 }
 
commit cfccf4c4e7e5c73fe4040fabeb1b43283cf29b33
Author: Michel Dänzer <michel.daenzer at amd.com>
Date:   Thu Oct 19 17:41:44 2017 +0200

    Free memory returned by xf86GetEntityInfo
    
    We were leaking it.
    
    Reviewed-by: Alex Deucher <alexander.deucher at amd.com>

diff --git a/src/amdgpu_kms.c b/src/amdgpu_kms.c
index 44a99b5..7d58209 100644
--- a/src/amdgpu_kms.c
+++ b/src/amdgpu_kms.c
@@ -116,16 +116,24 @@ static void AMDGPUFreeRec(ScrnInfoPtr pScrn)
 	DevUnion *pPriv;
 	AMDGPUEntPtr pAMDGPUEnt;
 	AMDGPUInfoPtr info;
+	EntityInfoPtr pEnt;
 
 	if (!pScrn)
 		return;
 
 	info = AMDGPUPTR(pScrn);
-	if (info && info->fbcon_pixmap)
-		pScrn->pScreen->DestroyPixmap(info->fbcon_pixmap);
+	if (info) {
+		if (info->fbcon_pixmap)
+			pScrn->pScreen->DestroyPixmap(info->fbcon_pixmap);
 
-	pPriv = xf86GetEntityPrivate(xf86GetEntityInfo(pScrn->entityList[pScrn->numEntities - 1])->index,
-				     gAMDGPUEntityIndex);
+		pEnt = info->pEnt;
+		free(pScrn->driverPrivate);
+		pScrn->driverPrivate = NULL;
+	} else {
+		pEnt = xf86GetEntityInfo(pScrn->entityList[pScrn->numEntities - 1]);
+	}
+
+	pPriv = xf86GetEntityPrivate(pEnt->index, gAMDGPUEntityIndex);
 	pAMDGPUEnt = pPriv->ptr;
 	if (pAMDGPUEnt->fd > 0) {
 		DevUnion *pPriv;
@@ -143,8 +151,7 @@ static void AMDGPUFreeRec(ScrnInfoPtr pScrn)
 		}
 	}
 
-	free(pScrn->driverPrivate);
-	pScrn->driverPrivate = NULL;
+	free(pEnt);
 }
 
 static void *amdgpuShadowWindow(ScreenPtr screen, CARD32 row, CARD32 offset,
diff --git a/src/amdgpu_probe.c b/src/amdgpu_probe.c
index e446539..0217060 100644
--- a/src/amdgpu_probe.c
+++ b/src/amdgpu_probe.c
@@ -177,7 +177,7 @@ static Bool amdgpu_get_scrninfo(int entity_num, struct pci_device *pci_dev)
 {
 	ScrnInfoPtr pScrn = NULL;
 	char *busid;
-	EntityInfoPtr pEnt;
+	EntityInfoPtr pEnt = NULL;
 	DevUnion *pPriv;
 	AMDGPUEntPtr pAMDGPUEnt;
 
@@ -256,6 +256,7 @@ static Bool amdgpu_get_scrninfo(int entity_num, struct pci_device *pci_dev)
 error_amdgpu:
 	amdgpu_kernel_close_fd(pAMDGPUEnt);
 error:
+	free(pEnt);
 	free(busid);
 	return FALSE;
 }
@@ -294,7 +295,7 @@ amdgpu_platform_probe(DriverPtr pDriver,
 	ScrnInfoPtr pScrn;
 	int scr_flags = 0;
 	char *busid;
-	EntityInfoPtr pEnt;
+	EntityInfoPtr pEnt = NULL;
 	DevUnion *pPriv;
 	AMDGPUEntPtr pAMDGPUEnt;
 
@@ -379,6 +380,7 @@ amdgpu_platform_probe(DriverPtr pDriver,
 error_amdgpu:
 	amdgpu_kernel_close_fd(pAMDGPUEnt);
 error:
+	free(pEnt);
 	free(busid);
 	return FALSE;
 }
commit 9d84934309e4ccd9a43c73d958b8ff10ef2fc990
Author: Michel Dänzer <michel.daenzer at amd.com>
Date:   Thu Oct 19 17:28:53 2017 +0200

    Free pAMDGPUEnt memory in AMDGPUFreeRec
    
    We were freeing it earlier but then still trying to access it in
    AMDGPUFreeRec.
    
    Reviewed-by: Alex Deucher <alexander.deucher at amd.com>

diff --git a/src/amdgpu_kms.c b/src/amdgpu_kms.c
index 3598dd2..44a99b5 100644
--- a/src/amdgpu_kms.c
+++ b/src/amdgpu_kms.c
@@ -138,6 +138,8 @@ static void AMDGPUFreeRec(ScrnInfoPtr pScrn)
 		if (!pAMDGPUEnt->fd_ref) {
 			amdgpu_device_deinitialize(pAMDGPUEnt->pDev);
 			amdgpu_kernel_close_fd(pAMDGPUEnt);
+			free(pPriv->ptr);
+			pPriv->ptr = NULL;
 		}
 	}
 
diff --git a/src/amdgpu_probe.c b/src/amdgpu_probe.c
index fb62cb8..e446539 100644
--- a/src/amdgpu_probe.c
+++ b/src/amdgpu_probe.c
@@ -227,7 +227,7 @@ static Bool amdgpu_get_scrninfo(int entity_num, struct pci_device *pci_dev)
 
 		pAMDGPUEnt = pPriv->ptr;
 		if (!amdgpu_open_drm_master(pScrn, pAMDGPUEnt, busid))
-			goto error_fd;
+			goto error;
 
 		pAMDGPUEnt->fd_ref = 1;
 
@@ -255,8 +255,6 @@ static Bool amdgpu_get_scrninfo(int entity_num, struct pci_device *pci_dev)
 
 error_amdgpu:
 	amdgpu_kernel_close_fd(pAMDGPUEnt);
-error_fd:
-	free(pPriv->ptr);
 error:
 	free(busid);
 	return FALSE;
@@ -352,7 +350,7 @@ amdgpu_platform_probe(DriverPtr pDriver,
 		pAMDGPUEnt->platform_dev = dev;
 		pAMDGPUEnt->fd = amdgpu_kernel_open_fd(pScrn, busid, dev);
 		if (pAMDGPUEnt->fd < 0)
-			goto error_fd;
+			goto error;
 
 		pAMDGPUEnt->fd_ref = 1;
 
@@ -380,8 +378,6 @@ amdgpu_platform_probe(DriverPtr pDriver,
 
 error_amdgpu:
 	amdgpu_kernel_close_fd(pAMDGPUEnt);
-error_fd:
-	free(pPriv->ptr);
 error:
 	free(busid);
 	return FALSE;


More information about the xorg-commit mailing list