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