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