summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChris Wilson <chris@chris-wilson.co.uk>2012-01-26 12:41:34 +0000
committerChris Wilson <chris@chris-wilson.co.uk>2012-01-26 12:55:27 +0000
commit352828ee59164a9e81093d88dfdd45bc21f0c739 (patch)
tree9fec129798b9e8972093c295971d97bc17d317d7
parentcff6a1a2e4648eb211a1789ae9f711e2f16e9d4d (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.c26
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;