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