<!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-&gt;pDamage)
with pExaPixmap-&gt;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-&gt;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-&gt;pDamage)
+        return FALSE;
+
     return REGION_NOTEMPTY (pScreen, DamageRegion(pExaPixmap-&gt;pDamage)) ||
         !REGION_EQUAL(pScreen, &amp;pExaPixmap-&gt;validSys, &amp;pExaPixmap-&gt;validFB);
 }


  </pre>
</blockquote>
<br>
</body>
</html>