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

Michel Dänzer daenzer at kemper.freedesktop.org
Thu Feb 15 16:27:33 UTC 2018


 man/radeon.man   |    2 -
 src/radeon_kms.c |   71 +++++++++++++++++++++++++++----------------------------
 2 files changed, 37 insertions(+), 36 deletions(-)

New commits:
commit 16954fab59f95bdca4540c4496b2ec0759c447e9
Author: Michel Dänzer <michel.daenzer at amd.com>
Date:   Wed Feb 14 18:20:04 2018 +0100

    Call RADEONFreeRec from RADEONFreeScreen_KMS even if info == NULL
    
    It's safe now.
    
    (Ported from amdgpu commit c9bd1399a13cea2e1331af2c826ca054b88db071)
    Reviewed-by: Alex Deucher <alexander.deucher at amd.com>

diff --git a/src/radeon_kms.c b/src/radeon_kms.c
index 06f7883e..6e5bf781 100644
--- a/src/radeon_kms.c
+++ b/src/radeon_kms.c
@@ -2206,14 +2206,9 @@ static Bool RADEONCloseScreen_KMS(ScreenPtr pScreen)
 
 void RADEONFreeScreen_KMS(ScrnInfoPtr pScrn)
 {
-    RADEONInfoPtr  info  = RADEONPTR(pScrn);
-
     xf86DrvMsgVerb(pScrn->scrnIndex, X_INFO, RADEON_LOGLEVEL_DEBUG,
 		   "RADEONFreeScreen\n");
 
-    /* when server quits at PreInit, we don't need do this anymore*/
-    if (!info) return;
-
     RADEONFreeRec(pScrn);
 }
 
commit 6b44b8c584f3b63712858be11277842c97d03426
Author: Michel Dänzer <michel.daenzer at amd.com>
Date:   Wed Feb 14 18:06:18 2018 +0100

    Don't call RADEONFreeRec from RADEONPreInit_KMS
    
    If the latter fails, Xorg will call RADEONFreeScreen_KMS, which calls
    the former.
    
    (Ported from amdgpu commit 103b7285845b786929fb509083c57e074c48f9be)
    Reviewed-by: Alex Deucher <alexander.deucher at amd.com>

diff --git a/src/radeon_kms.c b/src/radeon_kms.c
index 6b1dc38b..06f7883e 100644
--- a/src/radeon_kms.c
+++ b/src/radeon_kms.c
@@ -1712,7 +1712,7 @@ Bool RADEONPreInit_KMS(ScrnInfoPtr pScrn, int flags)
         && info->pEnt->location.type != BUS_PLATFORM
 #endif
         )
-        goto fail;
+        return FALSE;
 
     pPriv = xf86GetEntityPrivate(pScrn->entityList[0],
 				 getRADEONEntityIndex());
@@ -1739,24 +1739,24 @@ Bool RADEONPreInit_KMS(ScrnInfoPtr pScrn, int flags)
     pScrn->monitor     = pScrn->confScreen->monitor;
 
     if (!RADEONPreInitVisual(pScrn))
-	goto fail;
+	return FALSE;
 
     xf86CollectOptions(pScrn, NULL);
     if (!(info->Options = malloc(sizeof(RADEONOptions_KMS))))
-	goto fail;
+	return FALSE;
 
     memcpy(info->Options, RADEONOptions_KMS, sizeof(RADEONOptions_KMS));
     xf86ProcessOptions(pScrn->scrnIndex, pScrn->options, info->Options);
 
     if (!RADEONPreInitWeight(pScrn))
-	goto fail;
+	return FALSE;
 
     if (!RADEONPreInitChipType_KMS(pScrn))
-        goto fail;
+        return FALSE;
 
     if (radeon_open_drm_master(pScrn) == FALSE) {
 	xf86DrvMsg(pScrn->scrnIndex, X_ERROR, "Kernel modesetting setup failed\n");
-	goto fail;
+	return FALSE;
     }
 
     info->dri2.available = FALSE;
@@ -1765,14 +1765,15 @@ Bool RADEONPreInit_KMS(ScrnInfoPtr pScrn, int flags)
     if (info->dri2.pKernelDRMVersion == NULL) {
 	xf86DrvMsg(pScrn->scrnIndex, X_ERROR,
 		   "RADEONDRIGetVersion failed to get the DRM version\n");
-	goto fail;
+	return FALSE;
     }
 
     /* Get ScreenInit function */
     if (!xf86LoadSubModule(pScrn, "fb"))
 	return FALSE;
 
-    if (!RADEONPreInitAccel_KMS(pScrn))              goto fail;
+    if (!RADEONPreInitAccel_KMS(pScrn))
+	return FALSE;
 
     /* Depth 30 not yet supported under glamor. */
     if (pScrn->depth == 30 && info->use_glamor &&
@@ -1780,7 +1781,7 @@ Bool RADEONPreInit_KMS(ScrnInfoPtr pScrn, int flags)
 	xf86DrvMsg(pScrn->scrnIndex, X_ERROR,
 		   "Given depth (%d) is not supported under GLAMOR accel. Select EXA.\n",
 		   pScrn->depth);
-	goto fail;
+	return FALSE;
     }
 
     /* Depth 30 only supported since Linux 3.16 / kms driver minor version 39 */
@@ -1788,7 +1789,7 @@ Bool RADEONPreInit_KMS(ScrnInfoPtr pScrn, int flags)
 	xf86DrvMsg(pScrn->scrnIndex, X_ERROR,
 		   "Given depth (%d) is not supported. Kernel too old. Needs Linux 3.16+\n",
 		   pScrn->depth);
-	goto fail;
+	return FALSE;
     }
 
     radeon_drm_queue_init();
@@ -1901,7 +1902,7 @@ Bool RADEONPreInit_KMS(ScrnInfoPtr pScrn, int flags)
 
     if (drmmode_pre_init(pScrn, &info->drmmode, pScrn->bitsPerPixel / 8) == FALSE) {
 	xf86DrvMsg(pScrn->scrnIndex, X_ERROR, "Kernel modesetting setup failed\n");
-	goto fail;
+	return FALSE;
     }
 
     RADEONSetupCapabilities(pScrn);
@@ -1995,14 +1996,10 @@ Bool RADEONPreInit_KMS(ScrnInfoPtr pScrn, int flags)
 #endif
         ) {
       xf86DrvMsg(pScrn->scrnIndex, X_ERROR, "No modes.\n");
-      goto fail;
-   }
+      return FALSE;
+    }
 
     return TRUE;
- fail:
-    RADEONFreeRec(pScrn);
-    return FALSE;
-
 }
 
 static Bool RADEONCursorInit_KMS(ScreenPtr pScreen)
commit 8a55e66bfd77dcb2553a43e86215b9d3c87b03f0
Author: Michel Dänzer <michel.daenzer at amd.com>
Date:   Wed Feb 14 18:13:16 2018 +0100

    Don't use RADEONEntPriv in RADEONFreeRec
    
    It crashes if info == NULL.
    
    (Ported from amdgpu commits fb8444e731765588c0ff1e9053c1c7b73f5f0907 &
     cfccf4c4e7e5c73fe4040fabeb1b43283cf29b33)
    Reviewed-by: Alex Deucher <alexander.deucher at amd.com>

diff --git a/src/radeon_kms.c b/src/radeon_kms.c
index 25b889a6..6b1dc38b 100644
--- a/src/radeon_kms.c
+++ b/src/radeon_kms.c
@@ -194,18 +194,33 @@ static Bool RADEONGetRec(ScrnInfoPtr pScrn)
 /* Free our private RADEONInfoRec */
 static void RADEONFreeRec(ScrnInfoPtr pScrn)
 {
+    DevUnion *pPriv;
     RADEONEntPtr pRADEONEnt;
     RADEONInfoPtr  info;
+    EntityInfoPtr pEnt;
 
-    if (!pScrn || !pScrn->driverPrivate) return;
+    if (!pScrn)
+	return;
 
     info = RADEONPTR(pScrn);
+    if (info) {
+	if (info->fbcon_pixmap)
+	    pScrn->pScreen->DestroyPixmap(info->fbcon_pixmap);
 
-    if (info->fbcon_pixmap)
-	pScrn->pScreen->DestroyPixmap(info->fbcon_pixmap);
+	if (info->accel_state) {
+	    free(info->accel_state);
+	    info->accel_state = NULL;
+	}
 
-    pRADEONEnt = RADEONEntPriv(pScrn);
+	pEnt = info->pEnt;
+	free(pScrn->driverPrivate);
+	pScrn->driverPrivate = NULL;
+    } else {
+	pEnt = xf86GetEntityInfo(pScrn->entityList[pScrn->numEntities - 1]);
+    }
 
+    pPriv = xf86GetEntityPrivate(pEnt->index, gRADEONEntityIndex);
+    pRADEONEnt = pPriv->ptr;
     if (pRADEONEnt->fd > 0) {
         DevUnion *pPriv;
         RADEONEntPtr pRADEONEnt;
@@ -225,14 +240,7 @@ static void RADEONFreeRec(ScrnInfoPtr pScrn)
         }
     }
 
-    if (info->accel_state) {
-	free(info->accel_state);
-	info->accel_state = NULL;
-    }
-
-    free(info->pEnt);
-    free(pScrn->driverPrivate);
-    pScrn->driverPrivate = NULL;
+    free(pEnt);
 }
 
 static void *
commit 703cbb7177c6f69264836e975c1921e552fd60a4
Author: Michel Dänzer <michel.daenzer at amd.com>
Date:   Wed Feb 14 17:28:10 2018 +0100

    glamor: Allow depth 30 with Xorg >= 1.19.99.1
    
    Corresponding to amdgpu commit 6aee5770fb913713bb1b9a1af8f0d0892a66f21a.
    
    Reviewed-by: Alex Deucher <alexander.deucher at amd.com>

diff --git a/man/radeon.man b/man/radeon.man
index 889355bb..dcebf537 100644
--- a/man/radeon.man
+++ b/man/radeon.man
@@ -19,7 +19,7 @@ following features:
 .TP 2
 \(bu
 Full support for 8-, 15-, 16- and 24-bit pixel depths, and for 30-bit depth on Linux 3.16
-and later with EXA acceleration;
+and later;
 .TP
 \(bu
 RandR 1.2 and RandR 1.3 support;
diff --git a/src/radeon_kms.c b/src/radeon_kms.c
index bac98cb6..25b889a6 100644
--- a/src/radeon_kms.c
+++ b/src/radeon_kms.c
@@ -1767,7 +1767,8 @@ Bool RADEONPreInit_KMS(ScrnInfoPtr pScrn, int flags)
     if (!RADEONPreInitAccel_KMS(pScrn))              goto fail;
 
     /* Depth 30 not yet supported under glamor. */
-    if (pScrn->depth == 30 && info->use_glamor) {
+    if (pScrn->depth == 30 && info->use_glamor &&
+	xorgGetVersion() < XORG_VERSION_NUMERIC(1,19,99,1,0)) {
 	xf86DrvMsg(pScrn->scrnIndex, X_ERROR,
 		   "Given depth (%d) is not supported under GLAMOR accel. Select EXA.\n",
 		   pScrn->depth);


More information about the xorg-commit mailing list