summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorThomas Hellström <thomas@shipmail.org>2008-10-29 10:48:27 +0000
committerThomas Hellström <thomas@shipmail.org>2008-10-29 10:48:27 +0000
commit05f8dbb533ab8ca046a396be3acef9806667ac4f (patch)
treeeb4e9f6786aa0852c6a1596f43fff85f7d5a82da
parent3847a7fbdcdcaa50adf624344053dbb191f73a99 (diff)
Fix refcounting issues and vt leave calls
-rw-r--r--src/ochr_ioctl.c6
-rw-r--r--src/via_accel.c30
-rw-r--r--src/via_driver.c34
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;