xf86-video-intel: 2 commits - src/sna/kgem.c src/sna/sna_accel.c src/sna/sna_damage.c src/sna/sna_io.c

Chris Wilson ickle at kemper.freedesktop.org
Tue Jan 17 15:13:41 PST 2012


 src/sna/kgem.c       |    1 -
 src/sna/sna_accel.c  |   38 ++++++++++++++++++++++++++------------
 src/sna/sna_damage.c |    8 ++++----
 src/sna/sna_io.c     |    2 ++
 4 files changed, 32 insertions(+), 17 deletions(-)

New commits:
commit 850495f956c811b1eb617d2e704e6bb7b5a86369
Author: Chris Wilson <chris at chris-wilson.co.uk>
Date:   Tue Jan 17 22:51:29 2012 +0000

    sna: Fix increment of damage boxes after updating for rectangles
    
    Found by valgrind:
    ==13639== Conditional jump or move depends on uninitialised value(s)
    ==13639==    at 0x5520B1E: pixman_region_init_rects (in
    /usr/lib/x86_64-linux-gnu/libpixman-1.so.0.24.0)
    ==13639==    by 0x89E6ED7: __sna_damage_reduce (sna_damage.c:489)
    ==13639==    by 0x89E7FEC: _sna_damage_contains_box (sna_damage.c:1161)
    ==13639==    by 0x89CFCD9: sna_drawable_use_gpu_bo (sna_damage.h:175)
    ==13639==    by 0x89D52DA: sna_poly_segment (sna_accel.c:6130)
    ==13639==    by 0x21F87E: damagePolySegment (damage.c:1096)
    ==13639==    by 0x1565A2: ProcPolySegment (dispatch.c:1771)
    ==13639==    by 0x159FB0: Dispatch (dispatch.c:437)
    ==13639==    by 0x1491D9: main (main.c:287)
    ==13639==  Uninitialised value was created by a heap allocation
    ==13639==    at 0x4028693: malloc (in
    /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
    ==13639==    by 0x89E6BFB: _sna_damage_create_boxes (sna_damage.c:205)
    ==13639==    by 0x89E78F0: _sna_damage_add_rectangles (sna_damage.c:327)
    ==13639==    by 0x89CD32D: sna_poly_fill_rect_blt.isra.65
    (sna_damage.h:68)
    ==13639==    by 0x89DE23F: sna_poly_fill_rect (sna_accel.c:8366)
    ==13639==    by 0x21E9C8: damagePolyFillRect (damage.c:1309)
    ==13639==    by 0x26DD3F: miPaintWindow (miexpose.c:674)
    ==13639==    by 0x18370A: ChangeWindowAttributes (window.c:1553)
    ==13639==    by 0x154500: ProcChangeWindowAttributes (dispatch.c:696)
    ==13639==    by 0x159FB0: Dispatch (dispatch.c:437)
    ==13639==    by 0x1491D9: main (main.c:287)
    ==13639==
    
    Use 'count' everywhere for consistency.
    
    Signed-off-by: Chris Wilson <chris at chris-wilson.co.uk>

diff --git a/src/sna/sna_damage.c b/src/sna/sna_damage.c
index 196f479..a68db55 100644
--- a/src/sna/sna_damage.c
+++ b/src/sna/sna_damage.c
@@ -287,8 +287,8 @@ _sna_damage_create_elt_from_boxes(struct sna_damage *damage,
 		damage->box[i].y1 = boxes[i].y1 + dy;
 		damage->box[i].y2 = boxes[i].y2 + dy;
 	}
-	damage->box += i;
-	damage->remain -= i;
+	damage->box += count;
+	damage->remain -= count;
 
 	return damage;
 }
@@ -333,8 +333,8 @@ _sna_damage_create_elt_from_rectangles(struct sna_damage *damage,
 		damage->box[i].y1 = r[i].y + dy;
 		damage->box[i].y2 = damage->box[i].y1 + r[i].height;
 	}
-	damage->box += n;
-	damage->remain -= n;
+	damage->box += count;
+	damage->remain -= count;
 
 	return damage;
 }
commit 4b5c9affd4968fd5b3d85551cf5a0b4d600a7892
Author: Chris Wilson <chris at chris-wilson.co.uk>
Date:   Tue Jan 17 20:23:26 2012 +0000

    sna: Restore orginal shadow pointer before uploading CPU damage
    
    Detected by valgrind:
    ==22012== Source and destination overlap in memcpy(0xd101000, 0xd101000,
    783360)
    ==22012==    at 0x402A180: memcpy (in
    /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
    ==22012==    by 0x89BD4ED: memcpy_blt (blt.c:209)
    ==22012==    by 0x89F2921: sna_write_boxes (sna_io.c:364)
    ==22012==    by 0x89CFABF: sna_pixmap_move_to_gpu (sna_accel.c:1900)
    ==22012==    by 0x89F49B0: sna_render_pixmap_bo (sna_render.c:571)
    ==22012==    by 0x8A268CE: gen5_composite_picture (gen5_render.c:1908)
    ==22012==    by 0x8A29B8A: gen5_render_composite (gen5_render.c:2252)
    ==22012==    by 0x89E6762: sna_composite (sna_composite.c:485)
    ==22012==    by 0x21D3C3: damageComposite (damage.c:569)
    ==22012==    by 0x215963: ProcRenderComposite (render.c:728)
    ==22012==    by 0x159FB0: Dispatch (dispatch.c:437)
    ==22012==    by 0x1491D9: main (main.c:287)
    ==22012==
    
    Signed-off-by: Chris Wilson <chris at chris-wilson.co.uk>

diff --git a/src/sna/kgem.c b/src/sna/kgem.c
index c7e6aac..01521a9 100644
--- a/src/sna/kgem.c
+++ b/src/sna/kgem.c
@@ -1310,7 +1310,6 @@ static void kgem_finish_partials(struct kgem *kgem)
 			bo->need_io = 0;
 		}
 
-		VG(VALGRIND_MAKE_MEM_NOACCESS(bo->mem, bo->base.size));
 decouple:
 		list_del(&bo->base.list);
 		kgem_bo_unref(kgem, &bo->base);
diff --git a/src/sna/sna_accel.c b/src/sna/sna_accel.c
index 4a52983..5fefb81 100644
--- a/src/sna/sna_accel.c
+++ b/src/sna/sna_accel.c
@@ -184,7 +184,7 @@ static void sna_pixmap_free_gpu(struct sna *sna, struct sna_pixmap *priv)
 
 	if (priv->mapped) {
 		priv->pixmap->devPrivate.ptr = NULL;
-		priv->mapped = 0;
+		priv->mapped = false;
 	}
 
 	list_del(&priv->inactive);
@@ -257,7 +257,7 @@ static void sna_pixmap_free_cpu(struct sna *sna, struct sna_pixmap *priv)
 		free(priv->ptr);
 
 	priv->pixmap->devPrivate.ptr = priv->ptr = NULL;
-	priv->mapped = 0;
+	priv->mapped = false;
 }
 
 static Bool sna_destroy_private(PixmapPtr pixmap, struct sna_pixmap *priv)
@@ -392,7 +392,7 @@ struct kgem_bo *sna_pixmap_change_tiling(PixmapPtr pixmap, uint32_t tiling)
 
 	if (priv->mapped) {
 		pixmap->devPrivate.ptr = NULL;
-		priv->mapped = 0;
+		priv->mapped = false;
 	}
 
 	return priv->gpu_bo = bo;
@@ -780,7 +780,7 @@ _sna_pixmap_move_to_cpu(PixmapPtr pixmap, unsigned int flags)
 			if (pixmap->devPrivate.ptr == NULL)
 				goto skip_inplace_map;
 
-			priv->mapped = 1;
+			priv->mapped = true;
 			pixmap->devKind = priv->gpu_bo->pitch;
 
 			sna_damage_all(&priv->gpu_damage,
@@ -816,7 +816,7 @@ skip_inplace_map:
 
 	if (priv->mapped) {
 		pixmap->devPrivate.ptr = NULL;
-		priv->mapped = 0;
+		priv->mapped = false;
 	}
 
 	if (pixmap->devPrivate.ptr == NULL &&
@@ -1059,7 +1059,7 @@ sna_drawable_move_region_to_cpu(DrawablePtr drawable,
 				if (pixmap->devPrivate.ptr == NULL)
 					return false;
 
-				priv->mapped = 1;
+				priv->mapped = true;
 				pixmap->devKind = priv->gpu_bo->pitch;
 
 				sna_damage_subtract(&priv->cpu_damage, region);
@@ -1097,7 +1097,7 @@ sna_drawable_move_region_to_cpu(DrawablePtr drawable,
 			if (pixmap->devPrivate.ptr == NULL)
 				return false;
 
-			priv->mapped = 1;
+			priv->mapped = true;
 			pixmap->devKind = priv->gpu_bo->pitch;
 
 			sna_damage_subtract(&priv->cpu_damage, region);
@@ -1125,19 +1125,19 @@ sna_drawable_move_region_to_cpu(DrawablePtr drawable,
 		pixmap->devPrivate.ptr =
 			kgem_bo_map(&sna->kgem, priv->gpu_bo);
 		if (pixmap->devPrivate.ptr != NULL) {
-			priv->mapped = 1;
+			priv->mapped = true;
 			pixmap->devKind = priv->gpu_bo->pitch;
 			if (!DAMAGE_IS_ALL(priv->gpu_damage))
 				sna_damage_add(&priv->gpu_damage, region);
 			return true;
 		}
 
-		priv->mapped = 0;
+		priv->mapped = false;
 	}
 
 	if (priv->mapped) {
 		pixmap->devPrivate.ptr = NULL;
-		priv->mapped = 0;
+		priv->mapped = false;
 	}
 
 	if (pixmap->devPrivate.ptr == NULL &&
@@ -1411,6 +1411,14 @@ sna_pixmap_move_area_to_gpu(PixmapPtr pixmap, BoxPtr box)
 	if (priv->cpu_damage == NULL)
 		goto done;
 
+	if (priv->mapped) {
+		assert(priv->stride);
+		pixmap->devPrivate.ptr = priv->ptr;
+		pixmap->devKind = priv->stride;
+		priv->mapped = false;
+	}
+	assert(pixmap->devPrivate.ptr != NULL);
+
 	region_set(&r, box);
 	if (MIGRATE_ALL || region_subsumes_damage(&r, priv->cpu_damage)) {
 		Bool ok;
@@ -1873,6 +1881,12 @@ sna_pixmap_move_to_gpu(PixmapPtr pixmap, unsigned flags)
 	if (priv->cpu_damage == NULL)
 		goto done;
 
+	if (priv->mapped) {
+		assert(priv->stride);
+		pixmap->devPrivate.ptr = priv->ptr;
+		pixmap->devKind = priv->stride;
+		priv->mapped = false;
+	}
 	assert(pixmap->devPrivate.ptr != NULL);
 
 	n = sna_damage_get_boxes(priv->cpu_damage, &box);
@@ -2249,7 +2263,7 @@ sna_put_zpixmap_blt(DrawablePtr drawable, GCPtr gc, RegionPtr region,
 			pixmap->devPrivate.ptr =
 				kgem_bo_map(&sna->kgem, priv->gpu_bo);
 			if (pixmap->devPrivate.ptr) {
-				priv->mapped = 1;
+				priv->mapped = true;
 				pixmap->devKind = priv->gpu_bo->pitch;
 			}
 		}
@@ -2319,7 +2333,7 @@ sna_put_zpixmap_blt(DrawablePtr drawable, GCPtr gc, RegionPtr region,
 
 	if (priv->mapped) {
 		pixmap->devPrivate.ptr = NULL;
-		priv->mapped = 0;
+		priv->mapped = false;
 	}
 
 	if (pixmap->devPrivate.ptr == NULL &&
diff --git a/src/sna/sna_io.c b/src/sna/sna_io.c
index 4174b0e..79448c8 100644
--- a/src/sna/sna_io.c
+++ b/src/sna/sna_io.c
@@ -354,6 +354,8 @@ static void write_boxes_inplace(struct kgem *kgem,
 	if (dst == NULL)
 		return;
 
+	assert(dst != src);
+
 	do {
 		DBG(("%s: (%d, %d) -> (%d, %d) x (%d, %d) [bpp=%d, src_pitch=%d, dst_pitch=%d]\n", __FUNCTION__,
 		     box->x1 + src_dx, box->y1 + src_dy,


More information about the xorg-commit mailing list