server 1.7 EXA and R600 UploadToScreen infinite loop

Dave Airlie airlied at gmail.com
Tue Sep 29 20:08:20 PDT 2009


Hi Michel,

So I've been getting a recusive problem with 1.7's EXA (not with master)
0369eeeb6bf8a808fa2df503fc8b8df81e6e07b8 works around the issue.

What seems to be happening is the r600 UTS has an "optimisation" (Alex did
you write it?)

    /* If we know the BO won't be busy, don't bother */
    if (driver_priv->bo->cref == 1 &&
    	!radeon_bo_is_busy(driver_priv->bo, &dst_domain))
    	return FALSE;

Now we get into a cycle, as shown below, the EXA core tries to migrate
to the FB, UTS fails it fallbacks to doing prepare/memcpy/finish, finish
notices dirty status, and tries to upload to screen again, which fallsback
to doing prepare/memcpy/finish, etc.

The patch in master works around this of course, however I've no idea whether
a) that is in fact the correct solution
b) r600 code is broken and shouldn't do this.

Suggestions welcome.
Dave.

#1  0x003ce13f in exaCopyDirty (migrate=0xbfffee70, pValidDst=0x8389b14,
    pValidSrc=0x8389b08, transfer=0xf09a40 <R600UploadToScreenCS>,
    fallback_index=0, sync=0) at exa_migration_classic.c:217
#2  0x003ce3fd in exaCopyDirtyToFb (migrate=0xbfffee70)
    at exa_migration_classic.c:295
#3  0x003d01a2 in exaDoMigration_mixed (pixmaps=0xbfffee70, npixmaps=1,
    can_accel=1) at exa_migration_mixed.c:103
#4  0x003cd20c in exaDoMigration (pixmaps=0xbfffee70, npixmaps=1, can_accel=1)
    at exa.c:1181
#5  0x003d0214 in exaMoveInPixmap_mixed (pPixmap=0x838f7f0)
    at exa_migration_mixed.c:120
#6  0x003d04ea in exaFinishAccess_mixed (pPixmap=0x838f7f0, index=0)
    at exa_migration_mixed.c:207
#7  0x003cb61f in exaFinishAccess (pDrawable=0x838f7f0, index=0) at exa.c:421
#8  0x003ce222 in exaCopyDirty (migrate=0xbffff060, pValidDst=0x8389b14,
    pValidSrc=0x8389b08, transfer=0xf09a40 <R600UploadToScreenCS>,
    fallback_index=0, sync=0) at exa_migration_classic.c:246
#9  0x003ce3fd in exaCopyDirtyToFb (migrate=0xbffff060)
    at exa_migration_classic.c:295
#10 0x003d01a2 in exaDoMigration_mixed (pixmaps=0xbffff060, npixmaps=1,
    can_accel=1) at exa_migration_mixed.c:103
---Type <return> to continue, or q <return> to quit---
#11 0x003cd20c in exaDoMigration (pixmaps=0xbffff060, npixmaps=1, can_accel=1)
    at exa.c:1181
#12 0x003d0214 in exaMoveInPixmap_mixed (pPixmap=0x838f7f0)
    at exa_migration_mixed.c:120
#13 0x003d04ea in exaFinishAccess_mixed (pPixmap=0x838f7f0, index=0)
    at exa_migration_mixed.c:207
#14 0x003cb61f in exaFinishAccess (pDrawable=0x838f7f0, index=0) at exa.c:421
#15 0x003ce222 in exaCopyDirty (migrate=0xbffff274, pValidDst=0x8389b14,
    pValidSrc=0x8389b08, transfer=0xf09a40 <R600UploadToScreenCS>,
    fallback_index=0, sync=0) at exa_migration_classic.c:246
#16 0x003ce3fd in exaCopyDirtyToFb (migrate=0xbffff274)
    at exa_migration_classic.c:295
#17 0x003d01a2 in exaDoMigration_mixed (pixmaps=0xbffff264, npixmaps=2,
    can_accel=1) at exa_migration_mixed.c:103
#18 0x003cd20c in exaDoMigration (pixmaps=0xbffff264, npixmaps=2, can_accel=1)
    at exa.c:1181
#19 0x003d334d in exaFillRegionTiled (pDrawable=0x828daf8, pRegion=0x83469e0,
    pTile=0x838f7f0, pPatOrg=0x828bff8, planemask=4294967295, alu=3,
    clientClipType=0) at exa_accel.c:1099
#20 0x003d28aa in exaPolyFillRect (pDrawable=0x828daf8, pGC=0x828bfd0,
    nrect=1, prect=0x83513d8) at exa_accel.c:804


More information about the xorg-devel mailing list