diff options
-rw-r--r-- | src/sna/kgem.c | 8 | ||||
-rw-r--r-- | src/sna/kgem.h | 9 |
2 files changed, 10 insertions, 7 deletions
diff --git a/src/sna/kgem.c b/src/sna/kgem.c index 9b783a9f..0925c33e 100644 --- a/src/sna/kgem.c +++ b/src/sna/kgem.c @@ -4182,16 +4182,14 @@ void _kgem_bo_destroy(struct kgem *kgem, struct kgem_bo *bo) void __kgem_flush(struct kgem *kgem, struct kgem_bo *bo) { - assert(bo->rq); - assert(bo->exec == NULL); assert(bo->needs_flush); /* The kernel will emit a flush *and* update its own flushing lists. */ - if (!__kgem_busy(kgem, bo->handle)) + if (bo->exec == NULL && !__kgem_busy(kgem, bo->handle)) __kgem_bo_clear_busy(bo); - DBG(("%s: handle=%d, busy?=%d\n", - __FUNCTION__, bo->handle, bo->rq != NULL)); + DBG(("%s: handle=%d, busy?=%d, flushed?=%d\n", + __FUNCTION__, bo->handle, bo->rq != NULL, bo->exec == NULL)); } inline static bool needs_semaphore(struct kgem *kgem, struct kgem_bo *bo) diff --git a/src/sna/kgem.h b/src/sna/kgem.h index b7355d47..aa8097a4 100644 --- a/src/sna/kgem.h +++ b/src/sna/kgem.h @@ -338,10 +338,15 @@ static inline void kgem_bo_flush(struct kgem *kgem, struct kgem_bo *bo) return; /* If the kernel fails to emit the flush, then it will be forced when - * we assume direct access. And as the useual failure is EIO, we do - * not actualy care. + * we assume direct access. And as the usual failure is EIO, we do + * not actually care. */ __kgem_flush(kgem, bo); + + /* Whatever actually happens, we can regard the GTT write domain + * as being flushed. + */ + bo->gtt_dirty = false; } static inline struct kgem_bo *kgem_bo_reference(struct kgem_bo *bo) |