From: Michel Dänzer <[email protected]>

Instead of up to twice as before.

Signed-off-by: Michel Dänzer <[email protected]>
---
 src/amdgpu_probe.c | 52 +++++++++++++++++++++++++---------------------------
 1 file changed, 25 insertions(+), 27 deletions(-)

diff --git a/src/amdgpu_probe.c b/src/amdgpu_probe.c
index f74eb29..ea9ffa7 100644
--- a/src/amdgpu_probe.c
+++ b/src/amdgpu_probe.c
@@ -99,16 +99,10 @@ 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"))
@@ -127,10 +121,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 +135,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 +175,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 +186,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 +222,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 +248,7 @@ static Bool amdgpu_get_scrninfo(int entity_num, struct 
pci_device *pci_dev)
                                                                 index)
                                       - 1);
        free(pEnt);
+       free(busid);
 
        return TRUE;
 
@@ -268,6 +256,8 @@ error_amdgpu:
        drmClose(pAMDGPUEnt->fd);
 error_fd:
        free(pPriv->ptr);
+error:
+       free(busid);
        return FALSE;
 }
 
@@ -304,6 +294,7 @@ amdgpu_platform_probe(DriverPtr pDriver,
 {
        ScrnInfoPtr pScrn;
        int scr_flags = 0;
+       char *busid;
        EntityInfoPtr pEnt;
        DevUnion *pPriv;
        AMDGPUEntPtr pAMDGPUEnt;
@@ -319,9 +310,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 +348,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 +373,7 @@ amdgpu_platform_probe(DriverPtr pDriver,
                                                                 index)
                                       - 1);
        free(pEnt);
+       free(busid);
 
        return TRUE;
 
@@ -385,6 +381,8 @@ error_amdgpu:
        drmClose(pAMDGPUEnt->fd);
 error_fd:
        free(pPriv->ptr);
+error:
+       free(busid);
        return FALSE;
 }
 #endif
-- 
2.6.2

_______________________________________________
xorg-driver-ati mailing list
[email protected]
http://lists.x.org/mailman/listinfo/xorg-driver-ati

Reply via email to