[xf86-video-mach64] crash on sparc64 w/ xserver 1.14.1

Matthieu Herrb matthieu.herrb at laas.fr
Wed Jun 5 06:19:06 PDT 2013


On Wed, Jun 05, 2013 at 10:21:29AM +0200, Michel Dänzer wrote:
> On Die, 2013-06-04 at 18:22 -0400, Matthieu Herrb wrote:
> > On Tue, Jun 04, 2013 at 06:26:50PM +0200, Michel Dänzer wrote:
> > > On Die, 2013-06-04 at 10:40 -0400, Matthieu Herrb wrote:
> > > > On Tue, Jun 04, 2013 at 12:39:11PM +0200, Michel Dänzer wrote:
> > > > > On Mon, 2013-06-03 at 15:41 -0400, Matthieu Herrb wrote:
> > > > > > 
> > > > > > I've implemented that (see previous message). Now the X server doesn't
> > > > > > crash anymore but experiences corruption in the Xft fonts, like shown
> > > > > > on the attached screenshot.
> > > > > > 
> > > > > > Any more clues ? 
> > > > > 
> > > > > Hmm... Looks like some of the glyphs are getting corrupted in the glyph
> > > > > cache. Maybe there's a problem with the UploadToScreen hook, or
> > > > > something like that.
> > > > > 
> > > > 
> > > > The mach64 driver has no UploadToScreen hook. So either it's the
> > > > fallback code that's behaving on sparc64 or something else. How could
> > > > I check that ?
> > > 
> > > I'm afraid you'll have to start digging from exaGlyphCacheUploadGlyph().
> > > E.g. maybe try forcing a software fallback for the composite fallback
> > > path, e.g. by calling ExaCheckComposite instead of CompositePicture, and
> > > see if that makes any difference for the problem.
> > 
> > Thanks for the help so far. Switching to ExaCheckComposite() makes the
> > issue go away.
> 
> Does the patch below fix the problem by any chance?
> 

No. No change in the result.

> 
> diff --git a/exa/exa_glyphs.c b/exa/exa_glyphs.c
> index 791fd72..9a74689 100644
> --- a/exa/exa_glyphs.c
> +++ b/exa/exa_glyphs.c
> @@ -309,6 +309,10 @@ exaGlyphCacheUploadGlyph(ScreenPtr pScreen,
>      if (pExaScr->do_migration) {
>          ExaMigrationRec pixmaps[1];
>  
> +        /* The cache pixmap isn't a window, so no need to offset coordinates. */
> +        exaPixmapDirty(pCachePixmap,
> +                       x, y, x + cache->glyphWidth, y + cache->glyphHeight);
> +
>          /* cache pixmap must have a gpu copy. */
>          pixmaps[0].as_dst = TRUE;
>          pixmaps[0].as_src = FALSE;
> @@ -338,9 +342,8 @@ exaGlyphCacheUploadGlyph(ScreenPtr pScreen,
>                       0, 0, 0, 0, x, y, pGlyph->info.width, pGlyph->info.height);
>  
>   damage:
> -    /* The cache pixmap isn't a window, so no need to offset coordinates. */
> -    exaPixmapDirty(pCachePixmap,
> -                   x, y, x + cache->glyphWidth, y + cache->glyphHeight);
> +    if (pExaScr->do_migration)
> +        DamageRegionProcessPending(&pCachePixmap->drawable);
>  }
>  
>  static _X_INLINE ExaGlyphCacheResult
> 
> -- 
> Earthling Michel Dänzer           |                   http://www.amd.com
> Libre software enthusiast         |          Debian, X and DRI developer
> 

-- 
Matthieu Herrb


More information about the xorg-devel mailing list