[PATCH] Fail more gracefully when drm surface manager can't be initialized

Anisse Astier anisse at astier.eu
Thu May 10 08:22:59 PDT 2012


On Thu, 10 May 2012 17:08:55 +0200, Michel Dänzer <michel at daenzer.net> wrote :

> On Don, 2012-05-10 at 16:56 +0200, Anisse Astier wrote: 
> > Should make bugs like https://bugs.freedesktop.org/show_bug.cgi?id=48138
> > easier to diagnose.
> 
> FWIW, commit 1e656cd5973bbcf85b63406638ede0bccd65e28f should help for
> that already.

Yes, this patch was inspired by this commit.
I found the source of this bug: missing PCI ids in libdrm's
radeon/r600_pci_ids.h, therefore failed initialization of the drm surface
manager. Patch to follow.

> 
> 
> > Signed-off-by: Anisse Astier <anisse at astier.eu>
> > ---
> >  src/radeon_kms.c |    5 +++++
> >  1 files changed, 5 insertions(+), 0 deletions(-)
> > 
> > diff --git a/src/radeon_kms.c b/src/radeon_kms.c
> > index edc8fe3..d2089d1 100644
> > --- a/src/radeon_kms.c
> > +++ b/src/radeon_kms.c
> > @@ -947,6 +947,11 @@ Bool RADEONScreenInit_KMS(int scrnIndex, ScreenPtr pScreen,
> >      front_ptr = info->FB;
> >  
> >      info->surf_man = radeon_surface_manager_new(info->dri->drmFD);
> > +    if(!info->surf_man) {
> > +        xf86DrvMsg(pScrn->scrnIndex, X_ERROR,
> > +		   "failed to initialise surface manager");
> > +        return FALSE;
> > +    }
> >      if (!info->bufmgr)
> >          info->bufmgr = radeon_bo_manager_gem_ctor(info->dri->drmFD);
> >      if (!info->bufmgr) {
> 
> This would probably break pre-R600 cards, which aren't supported by the
> surface manager.
Indeed, I didn't know about that.

How about the version below ?


From: Anisse Astier <anisse at astier.eu>
Subject: [PATCH] Fail more gracefully when drm surface manager can't be
 initialized

Should make bugs like https://bugs.freedesktop.org/show_bug.cgi?id=48138
easier to diagnose.

Signed-off-by: Anisse Astier <anisse at astier.eu>
---
 src/radeon_kms.c |    5 +++++
 1 files changed, 5 insertions(+), 0 deletions(-)

diff --git a/src/radeon_kms.c b/src/radeon_kms.c
index edc8fe3..c47897e 100644
--- a/src/radeon_kms.c
+++ b/src/radeon_kms.c
@@ -1256,6 +1256,11 @@ static Bool radeon_setup_kernel_mem(ScreenPtr pScreen)
     screen_size = RADEON_ALIGN(pScrn->virtualY, drmmode_get_height_align(pScrn, tiling_flags)) * pitch;
     base_align = drmmode_get_base_align(pScrn, cpp, tiling_flags);
 	if (info->ChipFamily >= CHIP_FAMILY_R600) {
+		if(!info->surf_man) {
+			xf86DrvMsg(pScreen->myNum, X_ERROR,
+				   "failed to initialise surface manager");
+			return FALSE;
+		}
 		memset(&surface, 0, sizeof(struct radeon_surface));
 		surface.npix_x = pScrn->displayWidth;
 		surface.npix_y = pScrn->virtualY;
-- 
1.7.9



More information about the xorg-driver-ati mailing list