summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorArthur Huillet <arthur.huillet@free.fr>2007-08-06 01:37:17 +0200
committerArthur Huillet <arthur.huillet@free.fr>2007-08-06 01:37:17 +0200
commit59d073c9b01a8f61675b8d74f5c55f134ddfb8bf (patch)
tree61681bae32b9d8901a236d9fd748cf889edbf8da
parent047aa7e0a6ecce59c9be8d36c51f082c0ddaafe8 (diff)
downloadxorg-driver-xf86-video-nouveau-59d073c9b01a8f61675b8d74f5c55f134ddfb8bf.tar.gz
Xv: waiting for last transfers to finish before freeing notifiers
-rw-r--r--src/nv_video.c17
1 files changed, 14 insertions, 3 deletions
diff --git a/src/nv_video.c b/src/nv_video.c
index 52a2e2f..67a231f 100644
--- a/src/nv_video.c
+++ b/src/nv_video.c
@@ -349,6 +349,16 @@ NVFreePortMemory(ScrnInfoPtr pScrn, NVPortPrivPtr pPriv)
pPriv->video_mem = NULL;
}
+ if ( pPriv->TT_mem_chunk[ 0 ] && pPriv->DMANotifier [ 0 ] )
+ {
+ NVNotifierWaitStatus(pScrn, pPriv->DMANotifier [ 0 ] , 0, 1000);
+ }
+
+ if ( pPriv->TT_mem_chunk[ 1 ] && pPriv->DMANotifier [ 1 ] )
+ {
+ NVNotifierWaitStatus(pScrn, pPriv->DMANotifier [ 1 ] , 0, 1000);
+ }
+
if(pPriv->TT_mem_chunk[0]) {
NVFreeMemory(pNv, pPriv->TT_mem_chunk[0]);
pPriv->TT_mem_chunk[0] = NULL;
@@ -1364,13 +1374,14 @@ NVPutImage(ScrnInfoPtr pScrn, short src_x, short src_y,
NVDmaStart(pNv, NvSubMemFormat, 0x100, 1);
NVDmaNext (pNv, 0);
- NVDmaKickoff(pNv);
-
+
//Put back NvDmaNotifier0 for EXA
NVDmaStart(pNv, NvSubMemFormat,
NV_MEMORY_TO_MEMORY_FORMAT_DMA_NOTIFY, 1);
NVDmaNext (pNv, NvDmaNotifier0);
-
+
+ NVDmaKickoff(pNv);
+
if ( destination_buffer == pNv->GARTScratch )
if (!NVNotifierWaitStatus(pScrn, pNv->Notifier0, 0, 0))
return FALSE;