diff options
author | Chris Wilson <chris@chris-wilson.co.uk> | 2012-01-26 12:41:34 +0000 |
---|---|---|
committer | Chris Wilson <chris@chris-wilson.co.uk> | 2012-01-26 12:55:27 +0000 |
commit | 352828ee59164a9e81093d88dfdd45bc21f0c739 (patch) | |
tree | 9fec129798b9e8972093c295971d97bc17d317d7 | |
parent | cff6a1a2e4648eb211a1789ae9f711e2f16e9d4d (diff) |
sna: Tweak aperture thresholds for batch flushing
In order to more easily accommodate operations on large source CPU bo.
Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
-rw-r--r-- | src/sna/kgem.c | 26 |
1 files changed, 16 insertions, 10 deletions
diff --git a/src/sna/kgem.c b/src/sna/kgem.c index 1bcda22a..6eae248a 100644 --- a/src/sna/kgem.c +++ b/src/sna/kgem.c @@ -634,7 +634,7 @@ void kgem_init(struct kgem *kgem, int fd, struct pci_device *dev, int gen) kgem->aperture_total = aperture.aper_size; kgem->aperture_high = aperture.aper_size * 3/4; - kgem->aperture_low = aperture.aper_size * 1/4; + kgem->aperture_low = aperture.aper_size * 1/3; DBG(("%s: aperture low=%d [%d], high=%d [%d]\n", __FUNCTION__, kgem->aperture_low, kgem->aperture_low / (1024*1024), kgem->aperture_high, kgem->aperture_high / (1024*1024))); @@ -2484,9 +2484,6 @@ bool kgem_check_bo(struct kgem *kgem, ...) int num_exec = 0; int size = 0; - if (kgem->aperture > kgem->aperture_low) - return false; - va_start(ap, kgem); while ((bo = va_arg(ap, struct kgem_bo *))) { if (bo->exec) @@ -2497,6 +2494,12 @@ bool kgem_check_bo(struct kgem *kgem, ...) } va_end(ap); + if (!size) + return true; + + if (kgem->aperture > kgem->aperture_low) + return false; + if (size + kgem->aperture > kgem->aperture_high) return false; @@ -2515,9 +2518,6 @@ bool kgem_check_bo_fenced(struct kgem *kgem, ...) int size = 0; int fenced_size = 0; - if (unlikely (kgem->aperture > kgem->aperture_low)) - return false; - va_start(ap, kgem); while ((bo = va_arg(ap, struct kgem_bo *))) { if (bo->exec) { @@ -2544,13 +2544,19 @@ bool kgem_check_bo_fenced(struct kgem *kgem, ...) if (fenced_size + kgem->aperture_fenced > kgem->aperture_mappable) return false; - if (size + kgem->aperture > kgem->aperture_high) + if (kgem->nfence + num_fence > kgem->fence_max) return false; - if (kgem->nexec + num_exec >= KGEM_EXEC_SIZE(kgem)) + if (!size) + return true; + + if (kgem->aperture > kgem->aperture_low) return false; - if (kgem->nfence + num_fence >= kgem->fence_max) + if (size + kgem->aperture > kgem->aperture_high) + return false; + + if (kgem->nexec + num_exec >= KGEM_EXEC_SIZE(kgem)) return false; return true; |