[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