diff options
author | Thomas Hellström <thomas@shipmail.org> | 2008-10-29 10:48:27 +0000 |
---|---|---|
committer | Thomas Hellström <thomas@shipmail.org> | 2008-10-29 10:48:27 +0000 |
commit | 05f8dbb533ab8ca046a396be3acef9806667ac4f (patch) | |
tree | eb4e9f6786aa0852c6a1596f43fff85f7d5a82da | |
parent | 3847a7fbdcdcaa50adf624344053dbb191f73a99 (diff) |
Fix refcounting issues and vt leave calls
-rw-r--r-- | src/ochr_ioctl.c | 6 | ||||
-rw-r--r-- | src/via_accel.c | 30 | ||||
-rw-r--r-- | src/via_driver.c | 34 |
3 files changed, 40 insertions, 30 deletions
diff --git a/src/ochr_ioctl.c b/src/ochr_ioctl.c index ade56ae..78b8285 100644 --- a/src/ochr_ioctl.c +++ b/src/ochr_ioctl.c @@ -173,7 +173,7 @@ ochr_reset_cmdlists(struct _ViaCommandBuffer *cBuf) if (ret) return ret; - ret = driBOResetList(cBuf->validate_list); + ret = driBOUnrefUserList(cBuf->validate_list); if (ret) return ret; @@ -250,7 +250,9 @@ ochr_2d_relocation(struct _ViaCommandBuffer *cBuf, fake.po_correct = 0; fake.offset = val_req->presumed_gpu_offset; - + if (fake.offset == 0) { + ErrorF("Warning! Offset was 0\n"); + } reloc.type = VIA_RELOC_2D; reloc.offset = 1; reloc.addr.index = 0; diff --git a/src/via_accel.c b/src/via_accel.c index 4709967..aeab2a4 100644 --- a/src/via_accel.c +++ b/src/via_accel.c @@ -243,7 +243,7 @@ void viaTearDownCBuffer(ViaCommandBuffer * buf) { if (buf->validate_list) { - driBOResetList(buf->validate_list); + driBOUnrefUserList(buf->validate_list); driBOFreeList(buf->validate_list); buf->validate_list = NULL; } @@ -378,9 +378,7 @@ viaEmitPixmap(ViaCommandBuffer *cb, if (ret) goto out_err; cb->srcPixmap = pSrcPix; - } else if (pSrcPix != NULL) { - ErrorF("Saved src reloc.\n"); - } + } return TRUE; out_err: return FALSE; @@ -1615,25 +1613,19 @@ viaExitAccel(ScreenPtr pScreen) VIAPtr pVia = VIAPTR(pScrn); viaAccelSync(pScrn); - viaTearDownCBuffer(&pVia->cb); - driDeleteBuffers(1, &pVia->exaMem.buf); - if (pVia->useEXA) { #ifdef XF86DRI - if (pVia->dBounce) - xfree(pVia->dBounce); + if (pVia->dBounce) + xfree(pVia->dBounce); #endif /* XF86DRI */ - if (pVia->exaDriverPtr) { - exaDriverFini(pScreen); - } - xfree(pVia->exaDriverPtr); - pVia->exaDriverPtr = NULL; - return; - } - if (pVia->AccelInfoRec) { - XAADestroyInfoRec(pVia->AccelInfoRec); - pVia->AccelInfoRec = NULL; + if (pVia->exaDriverPtr) { + exaDriverFini(pScreen); } + xfree(pVia->exaDriverPtr); + pVia->exaDriverPtr = NULL; + viaTearDownCBuffer(&pVia->cb); + driDeleteBuffers(1, &pVia->exaMem.buf); + return; } /* diff --git a/src/via_driver.c b/src/via_driver.c index 390af82..70458a4 100644 --- a/src/via_driver.c +++ b/src/via_driver.c @@ -1928,12 +1928,12 @@ VIALeaveVT(int scrnIndex, int flags) DRM_BO_FLAG_NO_EVICT); (void) driBOSetStatus(pVia->scanout.bufs[VIA_SCANOUT_CURSOR], - DRM_BO_FLAG_MEM_LOCAL, - DRM_BO_FLAG_MEM_VRAM | DRM_BO_FLAG_NO_EVICT); + 0, + DRM_BO_FLAG_NO_EVICT); (void) driBOSetStatus(pVia->scanout.bufs[VIA_SCANOUT_SYNC], - DRM_BO_FLAG_MEM_LOCAL, - DRM_BO_FLAG_MEM_VRAM | DRM_BO_FLAG_NO_EVICT); + 0, + DRM_BO_FLAG_NO_EVICT); (void) driBOData(pVia->scanout.bufs[VIA_SCANOUT_OVERLAY], 0, NULL, NULL, 0); @@ -2495,8 +2495,10 @@ VIAScreenInit(int scrnIndex, ScreenPtr pScreen, int argc, char **argv) * functions. */ - if (pVia->mainPool && !pVia->IsSecondary) + if (pVia->mainPool && !pVia->IsSecondary) { pVia->mainPool->takeDown(pVia->mainPool); + pVia->mainPool = NULL; + } #ifdef XF86DRI pVia->directRenderingEnabled = VIADRIScreenInit(pScreen); @@ -2857,17 +2859,31 @@ VIACloseScreen(int scrnIndex, ScreenPtr pScreen) } driBOUnReference(pVia->front.buf); + viaExitAccel(pScreen); driDeleteBuffers(VIA_SCANOUT_NUM, pVia->scanout.bufs); - - if (pVia->mainPool && !pVia->IsSecondary) + if (pVia->mainPool && !pVia->IsSecondary) { pVia->mainPool->takeDown(pVia->mainPool); + pVia->mainPool = NULL; + } + #ifdef XF86DRI - if (pVia->directRenderingEnabled) + if (pVia->directRenderingEnabled) { + if (pScrn->vtSema) { + struct drm_via_vt vt; + + vt.enter = 0; + + if (drmCommandWrite(pVia->drmFD, DRM_VIA_VT, + &vt, sizeof(vt)) < 0) + ErrorF("Failed DRM VT leave.\n"); + else + pVia->vtNotified = GL_FALSE; + } VIADRICloseScreen(pScreen); + } #endif - viaExitAccel(pScreen); if (pVia->CursorInfoRec) { xf86DestroyCursorInfoRec(pVia->CursorInfoRec); pVia->CursorInfoRec = NULL; |