[xf86-video-mach64] crash on sparc64 w/ xserver 1.14.1
Michel Dänzer
michel at daenzer.net
Wed Jun 5 01:21:29 PDT 2013
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?
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
More information about the xorg-devel
mailing list