xf86-video-intel: src/sna/kgem.c src/sna/sna_accel.c
Chris Wilson
ickle at kemper.freedesktop.org
Fri Jan 31 08:44:53 PST 2014
src/sna/kgem.c | 19 ++++++++-----------
src/sna/sna_accel.c | 4 ++++
2 files changed, 12 insertions(+), 11 deletions(-)
New commits:
commit bdb1a62ce21f3eb5e27e411b78f13ad2aea963a4
Author: Chris Wilson <chris at chris-wilson.co.uk>
Date: Fri Jan 31 16:42:46 2014 +0000
sna: Balance memory accounting for buffer objects
A couple bugs ended up with CPU bo gradually accumulating whilst the
overall number of bo vanished.
Signed-off-by: Chris Wilson <chris at chris-wilson.co.uk>
diff --git a/src/sna/kgem.c b/src/sna/kgem.c
index b3d3c4b..f7404df 100644
--- a/src/sna/kgem.c
+++ b/src/sna/kgem.c
@@ -228,7 +228,6 @@ static void debug_alloc__bo(struct kgem *kgem, struct kgem_bo *bo)
debug_alloc(kgem, bytes(bo));
}
#else
-#define debug_alloc(k, b)
#define debug_alloc__bo(k, b)
#endif
@@ -4696,10 +4695,9 @@ create:
bo->pitch = pitch;
} else {
if (flags & CREATE_EXACT) {
- if (bo->pitch != pitch || bo->tiling != tiling) {
- kgem_bo_free(kgem, bo);
- return NULL;
- }
+ gem_close(kgem->fd, handle);
+ free(bo);
+ return NULL;
}
}
@@ -5949,8 +5947,8 @@ create_snoopable_buffer(struct kgem *kgem, unsigned alloc)
return NULL;
}
- debug_alloc(kgem, alloc);
__kgem_bo_init(&bo->base, handle, alloc);
+ debug_alloc__bo(kgem, &bo->base);
DBG(("%s: created CPU (LLC) handle=%d for buffer, size %d\n",
__FUNCTION__, bo->base.handle, alloc));
}
@@ -5985,8 +5983,8 @@ create_snoopable_buffer(struct kgem *kgem, unsigned alloc)
return NULL;
}
- debug_alloc(kgem, alloc);
__kgem_bo_init(&bo->base, handle, alloc);
+ debug_alloc__bo(kgem, &bo->base);
DBG(("%s: created CPU handle=%d for buffer, size %d\n",
__FUNCTION__, bo->base.handle, alloc));
}
@@ -6029,8 +6027,8 @@ free_caching:
return NULL;
}
- debug_alloc(kgem, alloc);
__kgem_bo_init(&bo->base, handle, alloc);
+ debug_alloc__bo(kgem, &bo->base);
DBG(("%s: created snoop handle=%d for buffer\n",
__FUNCTION__, bo->base.handle));
@@ -6200,10 +6198,9 @@ struct kgem_bo *kgem_create_buffer(struct kgem *kgem,
goto skip_llc;
}
__kgem_bo_init(&bo->base, handle, alloc);
+ debug_alloc__bo(kgem, &bo->base);
DBG(("%s: created LLC handle=%d for buffer\n",
__FUNCTION__, bo->base.handle));
-
- debug_alloc(kgem, alloc);
}
assert(bo->mmapped);
@@ -6366,7 +6363,7 @@ skip_llc:
__FUNCTION__, handle));
__kgem_bo_init(&bo->base, handle, alloc);
- debug_alloc(kgem, alloc * PAGE_SIZE);
+ debug_alloc__bo(kgem, &bo->base);
}
assert(bo->mmapped);
diff --git a/src/sna/sna_accel.c b/src/sna/sna_accel.c
index bbb6e2b..c903385 100644
--- a/src/sna/sna_accel.c
+++ b/src/sna/sna_accel.c
@@ -3863,6 +3863,10 @@ sna_pixmap_move_to_gpu(PixmapPtr pixmap, unsigned flags)
kgem_bo_convert_to_gpu(&sna->kgem, priv->cpu_bo)) {
assert(!priv->mapped);
assert(!IS_STATIC_PTR(priv->ptr));
+#ifdef DEBUG_MEMORY
+ sna->debug_memory.cpu_bo_allocs--;
+ sna->debug_memory.cpu_bo_bytes -= kgem_bo_size(priv->cpu_bo);
+#endif
priv->gpu_bo = priv->cpu_bo;
priv->cpu_bo = NULL;
priv->ptr = NULL;
More information about the xorg-commit
mailing list