exa, kdrive, and segfault

Arnaud Mouiche arnaud.mouiche at thomson.net
Thu Dec 3 00:48:23 PST 2009


Hi,

I start to play with EXA and tried to implement it under kdrive, for a 
Davinci implementation
(http://focus.ti.com/docs/prod/folders/print/tms320dm6446.html)

- 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",

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)


Questions:
- does it sound a bell to somebody ?
- does kdrive is still use and tested (I see that lot of kdrive drivers 
were removed) ?
- does kdrive still bring some speed / size improvements, compared with 
complete xorg server + driver modules

Thanks
(I continue to investigate)

Arnaud




_Background informations :_


the goal was mainly to understand how EXA is working in details, and by 
the way, add some acceleration on a platform some people are using.


I have a segfault at startup

exa/exa_migration_classic.c, line 78, in exaPixmapIsDirty
>     return REGION_NOTEMPTY (pScreen, DamageRegion(pExaPixmap->pDamage)) ||
because pExaPixmap->pDamage == NULL


the related pixmap is the first pixmap created at startup in
mi/miscinit.c, line 153, function miCreateScreenResources,
>     if (pScrInitParms->width)
>     {
>     PixmapPtr pPixmap;
>
>     /* create a pixmap with no data, then redirect it to point to
>      * the screen
>      */
>     pPixmap = (*pScreen->CreatePixmap)(pScreen, 0, 0, 
> pScreen->rootDepth, 0); 
>
> if (!pPixmap)
>         return FALSE;
>
>     if (!(*pScreen->ModifyPixmapHeader)(pPixmap, pScreen->width,
>             pScreen->height, pScreen->rootDepth,
>             BitsPerPixel(pScreen->rootDepth),
>             PixmapBytePad(pScrInitParms->width, pScreen->rootDepth),
>             pScrInitParms->pbits))
>         return FALSE;
>

pScrInitParms->width != 0 (and I don't see how it can be differently)
- "pScreen->CreatePixmap == exaCreatePixmap_classic" create the pixmap 
with a valid pDamage
- but "ModifyPixmapHeader == exaModifyPixmapHeader_classic" destroy and 
remove this pDamage ...


the difference when using "ExaMigrationGreedy", with 
"checkDirtyCorrectness" is that "exaPixmapIsDirty" is never called.






-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.x.org/archives/xorg-devel/attachments/20091203/7aac633e/attachment.html 


More information about the xorg-devel mailing list