2011/8/17 Michel Dänzer <[email protected]>: > From: Michel Dänzer <[email protected]> > > Ideally, the display manager will start the X server again, and everything > will be fine and dandy. But in the worst case, at least we won't hit the > hardware behind the KMS driver's back. > > Signed-off-by: Michel Dänzer <[email protected]>
One comment below. Other than that: Reviewed-by: Alex Deucher <[email protected]> > --- > src/radeon.h | 2 +- > src/radeon_dri.c | 29 ++++++++++++++++++++++------- > src/radeon_driver.c | 8 ++++++-- > 3 files changed, 29 insertions(+), 10 deletions(-) > > diff --git a/src/radeon.h b/src/radeon.h > index f66ffd0..151d85a 100644 > --- a/src/radeon.h > +++ b/src/radeon.h > @@ -1240,7 +1240,7 @@ extern void RADEONDRIAllocatePCIGARTTable(ScreenPtr > pScreen); > extern void RADEONDRICloseScreen(ScreenPtr pScreen); > extern Bool RADEONDRIFinishScreenInit(ScreenPtr pScreen); > extern int RADEONDRIGetPciAperTableSize(ScrnInfoPtr pScrn); > -extern Bool RADEONDRIGetVersion(ScrnInfoPtr pScrn); > +extern int RADEONDRIGetVersion(ScrnInfoPtr pScrn); > extern void RADEONDRIResume(ScreenPtr pScreen); > extern Bool RADEONDRIScreenInit(ScreenPtr pScreen); > extern int RADEONDRISetParam(ScrnInfoPtr pScrn, > diff --git a/src/radeon_dri.c b/src/radeon_dri.c > index ed167ed..946b4dc 100644 > --- a/src/radeon_dri.c > +++ b/src/radeon_dri.c > @@ -1336,7 +1336,7 @@ static void RADEONDRICPInit(ScrnInfoPtr pScrn) > > > /* Get the DRM version and do some basic useability checks of DRI */ > -Bool RADEONDRIGetVersion(ScrnInfoPtr pScrn) > +int RADEONDRIGetVersion(ScrnInfoPtr pScrn) > { > RADEONInfoPtr info = RADEONPTR(pScrn); > int major, minor, patch, fd; > @@ -1452,8 +1452,26 @@ Bool RADEONDRIGetVersion(ScrnInfoPtr pScrn) > } > > /* We don't, bummer ! */ > - if (info->dri->pKernelDRMVersion->version_major != req_major || > - info->dri->pKernelDRMVersion->version_minor < req_minor || > + if (info->dri->pKernelDRMVersion->version_major != req_major) { > + /* Looks like we're trying to start in UMS mode on a KMS kernel. > + * This can happen if the radeon kernel module wasn't loaded before > + * X starts. > + */ > + xf86DrvMsg(pScrn->scrnIndex, X_ERROR, > + "[dri] RADEONDRIGetVersion failed because of a version > mismatch.\n" > + "[dri] This chipset requires a kernel module version of > %d.%d.%d,\n" > + "[dri] but the kernel reports a version of %d.%d.%d." > + "[dri] Make sure your module is loaded prior to starting X, > and\n" > + "[dri] that this driver was built with support for KMS.\n" > + "[dri] Aborting.\n", > + req_major, req_minor, req_patch, > + info->dri->pKernelDRMVersion->version_major, > + info->dri->pKernelDRMVersion->version_minor, > + info->dri->pKernelDRMVersion->version_patchlevel); > + drmFreeVersion(info->dri->pKernelDRMVersion); > + info->dri->pKernelDRMVersion = NULL; > + return -1; > + } else if (info->dri->pKernelDRMVersion->version_minor < req_minor || > (info->dri->pKernelDRMVersion->version_minor == req_minor && > info->dri->pKernelDRMVersion->version_patchlevel < req_patch)) { > /* Incompatible drm version */ > @@ -1461,10 +1479,7 @@ Bool RADEONDRIGetVersion(ScrnInfoPtr pScrn) > "[dri] RADEONDRIGetVersion failed because of a version > mismatch.\n" > "[dri] This chipset requires a kernel module version of > %d.%d.%d,\n" > "[dri] but the kernel reports a version of %d.%d.%d." > - "[dri] If using legacy modesetting, upgrade your kernel.\n" > - "[dri] If using kernel modesetting, make sure your module is\n" > - "[dri] loaded prior to starting X, and that this driver was > built\n" > - "[dri] with support for KMS.\n" > + "[dri] Try upgrading your kernel.\n" > "[dri] Disabling DRI.\n", > req_major, req_minor, req_patch, > info->dri->pKernelDRMVersion->version_major, > diff --git a/src/radeon_driver.c b/src/radeon_driver.c > index 202951f..1a5b334 100644 > --- a/src/radeon_driver.c > +++ b/src/radeon_driver.c > @@ -2333,7 +2333,7 @@ static Bool RADEONPreInitInt10(ScrnInfoPtr pScrn, > xf86Int10InfoPtr *ppInt10) > } > > #ifdef XF86DRI > -static Bool RADEONPreInitDRI(ScrnInfoPtr pScrn) > +static int RADEONPreInitDRI(ScrnInfoPtr pScrn) > { > RADEONInfoPtr info = RADEONPTR(pScrn); > MessageType from; > @@ -2402,7 +2402,9 @@ static Bool RADEONPreInitDRI(ScrnInfoPtr pScrn) > info->dri->pLibDRMVersion = NULL; > info->dri->pKernelDRMVersion = NULL; > > - if (!RADEONDRIGetVersion(pScrn)) > + if (RADEONDRIGetVersion(pScrn) < 0) > + return -1; > + else if (!RADEONDRIGetVersion(pScrn)) > return FALSE; for consistency, might be worth changing FALSE/TRUE to 0/1 since you changed the return type. > > xf86DrvMsg(pScrn->scrnIndex, X_INFO, > @@ -3166,6 +3168,8 @@ Bool RADEONPreInit(ScrnInfoPtr pScrn, int flags) > * memory map > */ > info->directRenderingEnabled = RADEONPreInitDRI(pScrn); > + if (info->directRenderingEnabled < 0) > + goto fail; > #endif > if (!info->directRenderingEnabled) { > if (info->ChipFamily >= CHIP_FAMILY_R600) { > -- > 1.7.5.4 > > > _______________________________________________ > xorg-driver-ati mailing list > [email protected] > http://lists.x.org/mailman/listinfo/xorg-driver-ati > _______________________________________________ xorg-driver-ati mailing list [email protected] http://lists.x.org/mailman/listinfo/xorg-driver-ati
