xf86-video-intel: 6 commits - src/sna/gen4_render.c src/sna/gen5_render.c src/sna/gen6_render.c src/sna/gen7_render.c src/sna/sna_blt.c src/sna/sna_composite.c src/sna/sna_trapezoids_mono.c tools/virtual.c
Chris Wilson
ickle at kemper.freedesktop.org
Tue Nov 19 04:49:42 PST 2013
src/sna/gen4_render.c | 12 ++++++++++--
src/sna/gen5_render.c | 12 ++++++++++--
src/sna/gen6_render.c | 10 ++++++++--
src/sna/gen7_render.c | 17 ++++++++++++++---
src/sna/sna_blt.c | 4 ++--
src/sna/sna_composite.c | 2 +-
src/sna/sna_trapezoids_mono.c | 4 ++--
tools/virtual.c | 20 +++++++++++++++-----
8 files changed, 62 insertions(+), 19 deletions(-)
New commits:
commit b14228fafb654fe7d8f8783475aa0c0ba87e4fea
Author: Chris Wilson <chris at chris-wilson.co.uk>
Date: Tue Nov 19 12:15:24 2013 +0000
intel-virtual-output: Check for failure to create a clone
Signed-off-by: Chris Wilson <chris at chris-wilson.co.uk>
diff --git a/tools/virtual.c b/tools/virtual.c
index ab4f12b..2d5a4e4 100644
--- a/tools/virtual.c
+++ b/tools/virtual.c
@@ -2005,6 +2005,9 @@ static int last_display_add_clones__randr(struct context *ctx)
struct clone *clone = add_clone(ctx);
RROutput id;
+ if (clone == NULL)
+ return -ENOMEM;
+
clone->depth = 24;
clone->next = display->clone;
display->clone = clone;
@@ -2073,6 +2076,9 @@ static int last_display_add_clones__xinerama(struct context *ctx)
struct clone *clone = add_clone(ctx);
RROutput id;
+ if (clone == NULL)
+ return -ENOMEM;
+
if (xi[n].width == 0 || xi[n].height == 0)
continue;
@@ -2130,14 +2136,18 @@ static int last_display_add_clones__xinerama(struct context *ctx)
static int last_display_add_clones__display(struct context *ctx)
{
struct display *display = last_display(ctx);
- struct clone *clone = add_clone(ctx);
Display *dpy = display->dpy;
+ struct clone *clone;
Screen *scr;
char buf[80];
int ret;
RROutput id;
- DBG(("%s(%s)\n", __func__, DisplayString(display->dpy)));
+
+ DBG(("%s(%s)\n", __func__, DisplayString(dpy)));
+ clone = add_clone(ctx);
+ if (clone == NULL)
+ return -ENOMEM;
clone->depth = 24;
clone->next = display->clone;
@@ -2166,7 +2176,7 @@ static int last_display_add_clones__display(struct context *ctx)
ret = clone_init_depth(clone);
if (ret) {
fprintf(stderr, "Failed to negotiate image format for display \"%s\"\n",
- DisplayString(display->dpy));
+ DisplayString(dpy));
return ret;
}
@@ -2180,7 +2190,7 @@ static int last_display_add_clones__display(struct context *ctx)
ret = clone_update_modes__fixed(clone);
if (ret) {
fprintf(stderr, "Failed to clone display \"%s\"\n",
- DisplayString(display->dpy));
+ DisplayString(dpy));
return ret;
}
commit 9e6979b67afdd8122a29135d752c6ea84e9af6dc
Author: Chris Wilson <chris at chris-wilson.co.uk>
Date: Tue Nov 19 12:13:26 2013 +0000
intel-virtual-output: Fix trivial and unlikely fd leak from bumblebee failure
Signed-off-by: Chris Wilson <chris at chris-wilson.co.uk>
diff --git a/tools/virtual.c b/tools/virtual.c
index c3d7024..ab4f12b 100644
--- a/tools/virtual.c
+++ b/tools/virtual.c
@@ -1876,7 +1876,7 @@ static int bumblebee_open(struct context *ctx)
DBG(("%s query result '%s'\n", __func__, buf));
if (strncmp(buf, "Value: ", 7))
- return -ECONNREFUSED;
+ goto err;
len = 7;
while (buf[len] != '\n' && buf[len] != '\0')
commit 9ed5f83fe7ec71faf40147271aef1cf4a5a38329
Author: Chris Wilson <chris at chris-wilson.co.uk>
Date: Tue Nov 19 12:09:35 2013 +0000
sna: Fix use before assignment
mono.sna was being used the line before it was assigned.
Signed-off-by: Chris Wilson <chris at chris-wilson.co.uk>
diff --git a/src/sna/sna_trapezoids_mono.c b/src/sna/sna_trapezoids_mono.c
index 40d0381..dd629b6 100644
--- a/src/sna/sna_trapezoids_mono.c
+++ b/src/sna/sna_trapezoids_mono.c
@@ -803,8 +803,8 @@ mono_trapezoids_span_converter(struct sna *sna,
unbounded = (!sna_drawable_is_clear(dst->pDrawable) &&
!operator_is_bounded(op));
- if (op == PictOpClear && mono.sna->clear)
- src = mono.sna->clear;
+ if (op == PictOpClear && sna->clear)
+ src = sna->clear;
mono.sna = sna;
if (!mono.sna->render.composite(mono.sna, op, src, NULL, dst,
commit a9d6f897e6d6dc388de24f7b49ba79bf1f6125c3
Author: Chris Wilson <chris at chris-wilson.co.uk>
Date: Tue Nov 19 12:03:33 2013 +0000
sna: Free composite boxes in the unlikely all-invalid path
Signed-off-by: Chris Wilson <chris at chris-wilson.co.uk>
diff --git a/src/sna/sna_composite.c b/src/sna/sna_composite.c
index 6078d52..56e34f3 100644
--- a/src/sna/sna_composite.c
+++ b/src/sna/sna_composite.c
@@ -877,7 +877,7 @@ sna_composite_rectangles(CARD8 op,
}
if (num_boxes == 0)
- return;
+ goto cleanup_boxes;
if (!pixman_region_init_rects(®ion, boxes, num_boxes))
goto cleanup_boxes;
commit 0782d4e57e4ba33aee30925ad276ee4a1ec15feb
Author: Chris Wilson <chris at chris-wilson.co.uk>
Date: Tue Nov 19 12:01:33 2013 +0000
sna: Correct check for overwriting last BLT fill
Typo crept in from the reloc rework.
Signed-off-by: Chris Wilson <chris at chris-wilson.co.uk>
diff --git a/src/sna/sna_blt.c b/src/sna/sna_blt.c
index 63153b7..48a7cf6 100644
--- a/src/sna/sna_blt.c
+++ b/src/sna/sna_blt.c
@@ -3270,7 +3270,7 @@ bool sna_blt_copy_boxes(struct sna *sna, uint8_t alu,
}
} else {
if (kgem->nbatch >= 6 &&
- kgem->batch[kgem->nbatch-7] == (XY_COLOR_BLT | (cmd & (BLT_WRITE_ALPHA | BLT_WRITE_RGB)) | 4) &&
+ kgem->batch[kgem->nbatch-6] == (XY_COLOR_BLT | (cmd & (BLT_WRITE_ALPHA | BLT_WRITE_RGB)) | 4) &&
kgem->batch[kgem->nbatch-4] == ((uint32_t)(box->y1 + dst_dy) << 16 | (uint16_t)(box->x1 + dst_dx)) &&
kgem->batch[kgem->nbatch-3] == ((uint32_t)(box->y2 + dst_dy) << 16 | (uint16_t)(box->x2 + dst_dx))) {
DBG(("%s: deleting last fill\n", __FUNCTION__));
@@ -3605,7 +3605,7 @@ bool sna_blt_copy_boxes__with_alpha(struct sna *sna, uint8_t alu,
}
} else {
if (kgem->nbatch >= 6 &&
- kgem->batch[kgem->nbatch-7] == (XY_COLOR_BLT | (cmd & (BLT_WRITE_ALPHA | BLT_WRITE_RGB)) | 4) &&
+ kgem->batch[kgem->nbatch-6] == (XY_COLOR_BLT | (cmd & (BLT_WRITE_ALPHA | BLT_WRITE_RGB)) | 4) &&
kgem->batch[kgem->nbatch-4] == ((uint32_t)(box->y1 + dst_dy) << 16 | (uint16_t)(box->x1 + dst_dx)) &&
kgem->batch[kgem->nbatch-3] == ((uint32_t)(box->y2 + dst_dy) << 16 | (uint16_t)(box->x2 + dst_dx))) {
DBG(("%s: deleting last fill\n", __FUNCTION__));
commit 31f559820dbde1a028a76b9eeaeb1848aec3cc2b
Author: Chris Wilson <chris at chris-wilson.co.uk>
Date: Tue Nov 19 12:00:08 2013 +0000
sna/gen4+: Clear redirect bo before falling back to BLT paths
Just in case we later try to take action on the already freed
redirection.
Signed-off-by: Chris Wilson <chris at chris-wilson.co.uk>
diff --git a/src/sna/gen4_render.c b/src/sna/gen4_render.c
index b122408..c6a1e6d 100644
--- a/src/sna/gen4_render.c
+++ b/src/sna/gen4_render.c
@@ -2411,8 +2411,13 @@ fallback_blt:
kgem_submit(&sna->kgem);
if (!kgem_check_bo(&sna->kgem, dst_bo, src_bo, NULL)) {
kgem_bo_destroy(&sna->kgem, tmp.src.bo);
- if (tmp.redirect.real_bo)
+ tmp.src.bo = NULL;
+
+ if (tmp.redirect.real_bo) {
kgem_bo_destroy(&sna->kgem, tmp.dst.bo);
+ tmp.redirect.real_bo = NULL;
+ }
+
goto fallback_blt;
}
}
@@ -2441,9 +2446,12 @@ fallback_blt:
return true;
fallback_tiled_dst:
- if (tmp.redirect.real_bo)
+ if (tmp.redirect.real_bo) {
kgem_bo_destroy(&sna->kgem, tmp.dst.bo);
+ tmp.redirect.real_bo = NULL;
+ }
fallback_tiled:
+ assert(tmp.src.bo == NULL);
if (sna_blt_compare_depth(&src->drawable, &dst->drawable) &&
sna_blt_copy_boxes(sna, alu,
src_bo, src_dx, src_dy,
diff --git a/src/sna/gen5_render.c b/src/sna/gen5_render.c
index 59ce2be..1e90413 100644
--- a/src/sna/gen5_render.c
+++ b/src/sna/gen5_render.c
@@ -2371,8 +2371,13 @@ fallback_blt:
if (!kgem_check_bo(&sna->kgem, dst_bo, src_bo, NULL)) {
DBG(("%s: aperture check failed\n", __FUNCTION__));
kgem_bo_destroy(&sna->kgem, tmp.src.bo);
- if (tmp.redirect.real_bo)
+ tmp.src.bo = NULL;
+
+ if (tmp.redirect.real_bo) {
kgem_bo_destroy(&sna->kgem, tmp.dst.bo);
+ tmp.redirect.real_bo = NULL;
+ }
+
goto fallback_blt;
}
}
@@ -2421,9 +2426,12 @@ fallback_blt:
return true;
fallback_tiled_dst:
- if (tmp.redirect.real_bo)
+ if (tmp.redirect.real_bo) {
kgem_bo_destroy(&sna->kgem, tmp.dst.bo);
+ tmp.redirect.real_bo = NULL;
+ }
fallback_tiled:
+ assert(tmp.src.bo == NULL);
if (sna_blt_compare_depth(&src->drawable, &dst->drawable) &&
sna_blt_copy_boxes(sna, alu,
src_bo, src_dx, src_dy,
diff --git a/src/sna/gen6_render.c b/src/sna/gen6_render.c
index a2b4082..f03b893 100644
--- a/src/sna/gen6_render.c
+++ b/src/sna/gen6_render.c
@@ -2785,8 +2785,11 @@ fallback_blt:
__FUNCTION__));
if (tmp.src.bo != src_bo)
kgem_bo_destroy(&sna->kgem, tmp.src.bo);
- if (tmp.redirect.real_bo)
+ tmp.src.bo = NULL;
+ if (tmp.redirect.real_bo) {
kgem_bo_destroy(&sna->kgem, tmp.dst.bo);
+ tmp.redirect.real_bo = NULL;
+ }
goto fallback_blt;
}
_kgem_set_mode(&sna->kgem, KGEM_RENDER);
@@ -2831,9 +2834,12 @@ fallback_blt:
return true;
fallback_tiled_dst:
- if (tmp.redirect.real_bo)
+ if (tmp.redirect.real_bo) {
kgem_bo_destroy(&sna->kgem, tmp.dst.bo);
+ tmp.redirect.real_bo = NULL;
+ }
fallback_tiled:
+ assert(tmp.src.bo == NULL);
if (sna_blt_compare_depth(&src->drawable, &dst->drawable) &&
sna_blt_copy_boxes(sna, alu,
src_bo, src_dx, src_dy,
diff --git a/src/sna/gen7_render.c b/src/sna/gen7_render.c
index 9a7be4c..bd37ced 100644
--- a/src/sna/gen7_render.c
+++ b/src/sna/gen7_render.c
@@ -3040,8 +3040,11 @@ fallback_blt:
if (!kgem_check_bo(&sna->kgem, tmp.dst.bo, tmp.src.bo, NULL)) {
if (tmp.src.bo != src_bo)
kgem_bo_destroy(&sna->kgem, tmp.src.bo);
- if (tmp.redirect.real_bo)
+ tmp.src.bo = NULL;
+ if (tmp.redirect.real_bo) {
kgem_bo_destroy(&sna->kgem, tmp.dst.bo);
+ tmp.redirect.real_bo = NULL;
+ }
goto fallback_blt;
}
_kgem_set_mode(&sna->kgem, KGEM_RENDER);
@@ -3086,10 +3089,13 @@ fallback_blt:
return true;
fallback_tiled_dst:
- if (tmp.redirect.real_bo)
+ if (tmp.redirect.real_bo) {
kgem_bo_destroy(&sna->kgem, tmp.dst.bo);
+ tmp.redirect.real_bo = NULL;
+ }
fallback_tiled:
DBG(("%s: fallback tiled\n", __FUNCTION__));
+ assert(tmp.src.bo == NULL);
if (sna_blt_compare_depth(&src->drawable, &dst->drawable) &&
sna_blt_copy_boxes(sna, alu,
src_bo, src_dx, src_dy,
@@ -3351,8 +3357,13 @@ gen7_render_fill_boxes(struct sna *sna,
kgem_submit(&sna->kgem);
if (!kgem_check_bo(&sna->kgem, dst_bo, NULL)) {
kgem_bo_destroy(&sna->kgem, tmp.src.bo);
- if (tmp.redirect.real_bo)
+ tmp.src.bo = NULL;
+
+ if (tmp.redirect.real_bo) {
kgem_bo_destroy(&sna->kgem, tmp.dst.bo);
+ tmp.redirect.real_bo = NULL;
+ }
+
return false;
}
_kgem_set_mode(&sna->kgem, KGEM_RENDER);
More information about the xorg-commit
mailing list