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

Michel Dänzer daenzer at kemper.freedesktop.org
Wed Jan 13 01:56:15 PST 2016


 src/amdgpu_probe.c |   81 ++++++++++++++++++++++++++++-------------------------
 1 file changed, 43 insertions(+), 38 deletions(-)

New commits:
commit bd5c65daceaf633c36fcec86ff061df10c364bc0
Author: Michel Dänzer <michel.daenzer at amd.com>
Date:   Thu Jan 7 15:53:41 2016 +0900

    Only call amdgpu_bus_id once in each probe path (v2)
    
    Instead of up to twice as before.
    
    v2: Remove free(busIdString) call from amdgpu_kernel_mode_enabled, the
        bus ID string is now managed by its callers.
    
    Reviewed-by: Alex Deucher <alexander.deucher at amd.com> (v1)

diff --git a/src/amdgpu_probe.c b/src/amdgpu_probe.c
index f74eb29..1c32742 100644
--- a/src/amdgpu_probe.c
+++ b/src/amdgpu_probe.c
@@ -99,23 +99,16 @@ static char *amdgpu_bus_id(ScrnInfoPtr pScrn, struct pci_device *dev)
 	return busid;
 }
 
-static Bool amdgpu_kernel_mode_enabled(ScrnInfoPtr pScrn,
-				       struct pci_device *pci_dev)
+static Bool amdgpu_kernel_mode_enabled(ScrnInfoPtr pScrn, char *busIdString)
 {
-	char *busIdString = amdgpu_bus_id(pScrn, pci_dev);
-	int ret;
+	int ret = drmCheckModesettingSupported(busIdString);
 
-	if (!busIdString)
-		return FALSE;
-
-	ret = drmCheckModesettingSupported(busIdString);
 #if defined(__FreeBSD__) || defined(__FreeBSD_kernel__)
 	if (ret) {
 		if (xf86LoadKernelModule("amdgpukms"))
 			ret = drmCheckModesettingSupported(busIdString);
 	}
 #endif
-	free(busIdString);
 	if (ret) {
 		xf86DrvMsgVerb(pScrn->scrnIndex, X_INFO, 0,
 			       "[KMS] drm report modesetting isn't supported.\n");
@@ -127,10 +120,9 @@ static Bool amdgpu_kernel_mode_enabled(ScrnInfoPtr pScrn,
 	return TRUE;
 }
 
-static int amdgpu_kernel_open_fd(ScrnInfoPtr pScrn, struct pci_device *dev,
+static int amdgpu_kernel_open_fd(ScrnInfoPtr pScrn, char *busid,
 				 struct xf86_platform_device *platform_dev)
 {
-	char *busid;
 	int fd;
 
 #ifdef XF86_PDEV_SERVER_FD
@@ -142,29 +134,21 @@ static int amdgpu_kernel_open_fd(ScrnInfoPtr pScrn, struct pci_device *dev,
 	}
 #endif
 
-	busid = amdgpu_bus_id(pScrn, dev);
-	if (!busid)
-		return -1;
-
 	fd = drmOpen(NULL, busid);
-	if (fd == -1) {
+	if (fd == -1)
 		xf86DrvMsg(pScrn->scrnIndex, X_ERROR,
 			   "[drm] Failed to open DRM device for %s: %s\n",
 			   busid, strerror(errno));
-		free(busid);
-		return fd;
-	}
-	free(busid);
 	return fd;
 }
 
 static Bool amdgpu_open_drm_master(ScrnInfoPtr pScrn, AMDGPUEntPtr pAMDGPUEnt,
-				   struct pci_device *pci_dev)
+				   char *busid)
 {
 	drmSetVersion sv;
 	int err;
 
-	pAMDGPUEnt->fd = amdgpu_kernel_open_fd(pScrn, pci_dev, NULL);
+	pAMDGPUEnt->fd = amdgpu_kernel_open_fd(pScrn, busid, NULL);
 	if (pAMDGPUEnt->fd == -1)
 		return FALSE;
 
@@ -190,6 +174,7 @@ static Bool amdgpu_open_drm_master(ScrnInfoPtr pScrn, AMDGPUEntPtr pAMDGPUEnt,
 static Bool amdgpu_get_scrninfo(int entity_num, struct pci_device *pci_dev)
 {
 	ScrnInfoPtr pScrn = NULL;
+	char *busid;
 	EntityInfoPtr pEnt;
 	DevUnion *pPriv;
 	AMDGPUEntPtr pAMDGPUEnt;
@@ -200,8 +185,9 @@ static Bool amdgpu_get_scrninfo(int entity_num, struct pci_device *pci_dev)
 	if (!pScrn)
 		return FALSE;
 
-	if (!amdgpu_kernel_mode_enabled(pScrn, pci_dev))
-		return FALSE;
+	busid = amdgpu_bus_id(pScrn, pci_dev);
+	if (!amdgpu_kernel_mode_enabled(pScrn, busid))
+		goto error;
 
 	pScrn->driverVersion = AMDGPU_VERSION_CURRENT;
 	pScrn->driverName = AMDGPU_DRIVER_NAME;
@@ -235,10 +221,10 @@ static Bool amdgpu_get_scrninfo(int entity_num, struct pci_device *pci_dev)
 
 		pPriv->ptr = xnfcalloc(sizeof(AMDGPUEntRec), 1);
 		if (!pPriv->ptr)
-			return FALSE;
+			goto error;
 
 		pAMDGPUEnt = pPriv->ptr;
-		if (!amdgpu_open_drm_master(pScrn, pAMDGPUEnt, pci_dev))
+		if (!amdgpu_open_drm_master(pScrn, pAMDGPUEnt, busid))
 			goto error_fd;
 
 		pAMDGPUEnt->fd_ref = 1;
@@ -261,6 +247,7 @@ static Bool amdgpu_get_scrninfo(int entity_num, struct pci_device *pci_dev)
 								 index)
 				       - 1);
 	free(pEnt);
+	free(busid);
 
 	return TRUE;
 
@@ -268,6 +255,8 @@ error_amdgpu:
 	drmClose(pAMDGPUEnt->fd);
 error_fd:
 	free(pPriv->ptr);
+error:
+	free(busid);
 	return FALSE;
 }
 
@@ -304,6 +293,7 @@ amdgpu_platform_probe(DriverPtr pDriver,
 {
 	ScrnInfoPtr pScrn;
 	int scr_flags = 0;
+	char *busid;
 	EntityInfoPtr pEnt;
 	DevUnion *pPriv;
 	AMDGPUEntPtr pAMDGPUEnt;
@@ -319,9 +309,13 @@ amdgpu_platform_probe(DriverPtr pDriver,
 		xf86SetEntityShared(entity_num);
 	xf86AddEntityToScreen(pScrn, entity_num);
 
-	if (!amdgpu_kernel_mode_enabled(pScrn, dev->pdev))
+	busid = amdgpu_bus_id(pScrn, dev->pdev);
+	if (!busid)
 		return FALSE;
 
+	if (!amdgpu_kernel_mode_enabled(pScrn, busid))
+		goto error;
+
 	pScrn->driverVersion = AMDGPU_VERSION_CURRENT;
 	pScrn->driverName = AMDGPU_DRIVER_NAME;
 	pScrn->name = AMDGPU_NAME;
@@ -353,7 +347,7 @@ amdgpu_platform_probe(DriverPtr pDriver,
 
 		pPriv->ptr = xnfcalloc(sizeof(AMDGPUEntRec), 1);
 		pAMDGPUEnt = pPriv->ptr;
-		pAMDGPUEnt->fd = amdgpu_kernel_open_fd(pScrn, dev->pdev, dev);
+		pAMDGPUEnt->fd = amdgpu_kernel_open_fd(pScrn, busid, dev);
 		if (pAMDGPUEnt->fd < 0)
 			goto error_fd;
 
@@ -378,6 +372,7 @@ amdgpu_platform_probe(DriverPtr pDriver,
 								 index)
 				       - 1);
 	free(pEnt);
+	free(busid);
 
 	return TRUE;
 
@@ -385,6 +380,8 @@ error_amdgpu:
 	drmClose(pAMDGPUEnt->fd);
 error_fd:
 	free(pPriv->ptr);
+error:
+	free(busid);
 	return FALSE;
 }
 #endif
commit 6e42c58375a4c3229da93c27bbd104af145c6163
Author: Michel Dänzer <michel.daenzer at amd.com>
Date:   Thu Jan 7 15:57:38 2016 +0900

    Remove pci_dev test from amdgpu_get_scrninfo
    
    The pci_dev parameter can never be NULL since we only support KMS.
    
    Reported-by: Tom St Denis <tom.stdenis at amd.com>
    Reviewed-by: Alex Deucher <alexander.deucher at amd.com>

diff --git a/src/amdgpu_probe.c b/src/amdgpu_probe.c
index fa68008..f74eb29 100644
--- a/src/amdgpu_probe.c
+++ b/src/amdgpu_probe.c
@@ -200,11 +200,8 @@ static Bool amdgpu_get_scrninfo(int entity_num, struct pci_device *pci_dev)
 	if (!pScrn)
 		return FALSE;
 
-	if (pci_dev) {
-		if (!amdgpu_kernel_mode_enabled(pScrn, pci_dev)) {
-			return FALSE;
-		}
-	}
+	if (!amdgpu_kernel_mode_enabled(pScrn, pci_dev))
+		return FALSE;
 
 	pScrn->driverVersion = AMDGPU_VERSION_CURRENT;
 	pScrn->driverName = AMDGPU_DRIVER_NAME;
commit 8e09180798a06af5afa030d754938e4ca06e272f
Author: Michel Dänzer <michel.daenzer at amd.com>
Date:   Thu Jan 7 15:35:35 2016 +0900

    Re-use PCI bus ID code from kernel_open_fd in kernel_mode_enabled
    
    Reviewed-by: Alex Deucher <alexander.deucher at amd.com>

diff --git a/src/amdgpu_probe.c b/src/amdgpu_probe.c
index e4f5c75..fa68008 100644
--- a/src/amdgpu_probe.c
+++ b/src/amdgpu_probe.c
@@ -80,19 +80,34 @@ static void AMDGPUIdentify(int flags)
 			  "Driver for AMD Radeon chipsets", AMDGPUChipsets);
 }
 
+static char *amdgpu_bus_id(ScrnInfoPtr pScrn, struct pci_device *dev)
+{
+	char *busid;
+
+#if XORG_VERSION_CURRENT >= XORG_VERSION_NUMERIC(1,9,99,901,0)
+	XNFasprintf(&busid, "pci:%04x:%02x:%02x.%d",
+		    dev->domain, dev->bus, dev->dev, dev->func);
+#else
+	busid = XNFprintf("pci:%04x:%02x:%02x.%d",
+			  dev->domain, dev->bus, dev->dev, dev->func);
+#endif
+
+	if (!busid)
+		xf86DrvMsgVerb(pScrn->scrnIndex, X_ERROR, 0,
+			       "AMDGPU: Failed to generate bus ID string\n");
+
+	return busid;
+}
+
 static Bool amdgpu_kernel_mode_enabled(ScrnInfoPtr pScrn,
 				       struct pci_device *pci_dev)
 {
-	char *busIdString;
+	char *busIdString = amdgpu_bus_id(pScrn, pci_dev);
 	int ret;
 
-	if (!xf86LoaderCheckSymbol("DRICreatePCIBusID")) {
-		xf86DrvMsgVerb(pScrn->scrnIndex, X_INFO, 0,
-			       "[KMS] No DRICreatePCIBusID symbol, no kernel modesetting.\n");
+	if (!busIdString)
 		return FALSE;
-	}
 
-	busIdString = DRICreatePCIBusID(pci_dev);
 	ret = drmCheckModesettingSupported(busIdString);
 #if defined(__FreeBSD__) || defined(__FreeBSD_kernel__)
 	if (ret) {
@@ -127,13 +142,9 @@ static int amdgpu_kernel_open_fd(ScrnInfoPtr pScrn, struct pci_device *dev,
 	}
 #endif
 
-#if XORG_VERSION_CURRENT >= XORG_VERSION_NUMERIC(1,9,99,901,0)
-	XNFasprintf(&busid, "pci:%04x:%02x:%02x.%d",
-		    dev->domain, dev->bus, dev->dev, dev->func);
-#else
-	busid = XNFprintf("pci:%04x:%02x:%02x.%d",
-			  dev->domain, dev->bus, dev->dev, dev->func);
-#endif
+	busid = amdgpu_bus_id(pScrn, dev);
+	if (!busid)
+		return -1;
 
 	fd = drmOpen(NULL, busid);
 	if (fd == -1) {


More information about the xorg-commit mailing list