sna: Don't call into retire unless there are outstanding requests

Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
This commit is contained in:
Chris Wilson 2011-11-02 22:53:51 +00:00
parent 6fdd0f254d
commit 353fa4218c
3 changed files with 7 additions and 2 deletions

View File

@ -671,7 +671,8 @@ bool kgem_retire(struct kgem *kgem)
free(rq);
}
if (kgem->ring && list_is_empty(&kgem->requests))
kgem->need_retire = !list_is_empty(&kgem->requests);
if (!kgem->need_retire && kgem->ring)
kgem->ring = kgem->mode;
return retired;
@ -712,6 +713,7 @@ destroy:
list_add_tail(&rq->list, &kgem->requests);
kgem->next_request = __kgem_request_alloc();
kgem->need_retire = 1;
}
static void kgem_close_list(struct kgem *kgem, struct list *head)

View File

@ -107,6 +107,7 @@ struct kgem {
uint32_t flush:1;
uint32_t need_expire:1;
uint32_t need_purge:1;
uint32_t need_retire:1;
uint32_t busy:1;
uint32_t has_vmap :1;

View File

@ -7772,7 +7772,9 @@ void sna_accel_block_handler(struct sna *sna)
void sna_accel_wakeup_handler(struct sna *sna)
{
kgem_retire(&sna->kgem);
if (sna->kgem.need_retire)
kgem_retire(&sna->kgem);
sna_deferred_free(sna);
if (sna->kgem.need_purge)