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