xf86-video-intel: src/sna/kgem.c src/sna/kgem.h
Chris Wilson
ickle at kemper.freedesktop.org
Thu Jan 22 13:04:05 PST 2015
src/sna/kgem.c | 9 +++++++++
src/sna/kgem.h | 14 +++++++-------
2 files changed, 16 insertions(+), 7 deletions(-)
New commits:
commit 3cb0672586a55effa89a59c9a97744e225a05dac
Author: Chris Wilson <chris at chris-wilson.co.uk>
Date: Thu Jan 22 21:02:42 2015 +0000
sna: Reorganise assertions when retiring idle bo
References: https://bugs.freedesktop.org/show_bug.cgi?id=70461#c83
Signed-off-by: Chris Wilson <chris at chris-wilson.co.uk>
diff --git a/src/sna/kgem.c b/src/sna/kgem.c
index cb838ac..c9c651e 100644
--- a/src/sna/kgem.c
+++ b/src/sna/kgem.c
@@ -2680,6 +2680,7 @@ static bool __kgem_retire_rq(struct kgem *kgem, struct kgem_request *rq)
if (bo->needs_flush) {
DBG(("%s: moving %d to flushing\n",
__FUNCTION__, bo->handle));
+ assert(bo != rq->bo);
list_add(&bo->request, &kgem->flushing);
bo->rq = MAKE_REQUEST(kgem, RQ_RING(bo->rq));
kgem->need_retire = true;
@@ -2845,6 +2846,9 @@ void __kgem_retire_requests_upto(struct kgem *kgem, struct kgem_bo *bo)
struct kgem_request *rq = bo->rq, *tmp;
struct list *requests = &kgem->requests[RQ_RING(rq) == I915_EXEC_BLT];
+ DBG(("%s(handle=%d)\n", __FUNCTION__, bo->handle));
+ assert(!__kgem_busy(kgem, bo->handle));
+
rq = RQ(rq);
assert(rq != &kgem->static_request);
if (rq == (struct kgem_request *)kgem) {
@@ -2857,6 +2861,11 @@ void __kgem_retire_requests_upto(struct kgem *kgem, struct kgem_bo *bo)
assert(tmp->ring == rq->ring);
__kgem_retire_rq(kgem, tmp);
} while (tmp != rq);
+
+ assert(bo->rq == NULL);
+ assert(list_is_empty(&bo->request));
+ assert(!bo->needs_flush);
+ assert(bo->domain == DOMAIN_NONE);
}
#if 0
diff --git a/src/sna/kgem.h b/src/sna/kgem.h
index 59cb724..ae53e67 100644
--- a/src/sna/kgem.h
+++ b/src/sna/kgem.h
@@ -637,14 +637,14 @@ static inline bool __kgem_bo_is_busy(struct kgem *kgem, struct kgem_bo *bo)
if (bo->exec)
return true;
- if (bo->rq && !__kgem_busy(kgem, bo->handle)) {
- __kgem_retire_requests_upto(kgem, bo);
- assert(list_is_empty(&bo->request));
- assert(bo->rq == NULL);
- assert(bo->domain == DOMAIN_NONE);
- }
+ if (bo->rq == NULL)
+ return false;
+
+ if (__kgem_busy(kgem, bo->handle))
+ return true;
- return kgem_bo_is_busy(bo);
+ __kgem_retire_requests_upto(kgem, bo);
+ return false;
}
static inline bool kgem_bo_is_render(struct kgem_bo *bo)
More information about the xorg-commit
mailing list