<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta content="text/html;charset=UTF-8" http-equiv="Content-Type">
</head>
<body bgcolor="#ffffff" text="#000000">
Michel Dänzer wrote:
<blockquote cite="mid:1259833119.5316.595.camel@thor.local" type="cite">
<pre wrap="">On Thu, 2009-12-03 at 09:48 +0100, Arnaud Mouiche wrote:
</pre>
<blockquote type="cite">
<pre wrap="">Hi,
I start to play with EXA and tried to implement it under kdrive, for a
Davinci implementation
(<a class="moz-txt-link-freetext" href="http://focus.ti.com/docs/prod/folders/print/tms320dm6446.html">http://focus.ti.com/docs/prod/folders/print/tms320dm6446.html</a>)
- staring with version 1.7.1 of xserver (getting from xorg 7.5)
- as davinci can be consider as a slow platform, so target kdrive for
that job
- copy/paste hw/kdrive/fbdev as a starting point (working fine) and
looks at what hw/kdrive/ephyr is doing for EXA init, and with a EXA
implementation that does nothing first.
there is a segfault when using "ExaMigrationSmart" and/or when
"checkDirtyCorrectness" is true.
not happened with "ExaMigrationGreedy",
</pre>
</blockquote>
<pre wrap=""><!---->
Note that the default in Xorg is ExaMigrationAlways, and the other
heuristics haven't been actively maintained since that's been the case.
</pre>
</blockquote>
ok, good to know !<br>
<blockquote cite="mid:1259833119.5316.595.camel@thor.local" type="cite">
<pre wrap="">
</pre>
<blockquote type="cite">
<pre wrap="">and the segfault is due to a use of
REGION_NOTEMPTY (pScreen, DamageRegion(pExaPixmap->pDamage)
with pExaPixmap->pDamage == NULL
(see background informations for the whole details)
</pre>
</blockquote>
<pre wrap=""><!---->
Does the patch below fix the crash?
</pre>
</blockquote>
yes it (obviously) fix this the crash, and no other place with such
pExaPixmap->pDamage miss use up to now.<br>
I will continue this way, with ExaMigrationAlways, and report any other
issue.<br>
<br>
Thanks,<br>
<br>
arnaud<br>
<br>
<blockquote cite="mid:1259833119.5316.595.camel@thor.local" type="cite">
<pre wrap="">
diff --git a/exa/exa_migration_classic.c b/exa/exa_migration_classic.c
index 95189be..871679f 100644
--- a/exa/exa_migration_classic.c
+++ b/exa/exa_migration_classic.c
@@ -75,6 +75,9 @@ exaPixmapIsDirty (PixmapPtr pPix)
if (pExaPixmap == NULL)
        EXA_FatalErrorDebugWithRet(("EXA bug: exaPixmapIsDirty was called on a non-exa pixmap.\n"), TRUE);
+ if (!pExaPixmap->pDamage)
+        return FALSE;
+
return REGION_NOTEMPTY (pScreen, DamageRegion(pExaPixmap->pDamage)) ||
        !REGION_EQUAL(pScreen, &pExaPixmap->validSys, &pExaPixmap->validFB);
}
</pre>
</blockquote>
<br>
</body>
</html>