[Pixman] [PATCH v2] pixman-general: Tighten up calculation of temporary buffer sizes

Ben Avison bavison at riscosopen.org
Tue Sep 22 04:43:25 PDT 2015

Each of the aligns can only add a maximum of 15 bytes to the space
requirement. This permits some edge cases to use the stack buffer where
previously it would have deduced that a heap buffer was required.

This is an update of my previous patch (now posted over a year ago):

which conflicts with the patch just pushed:

Since this piece of code is fresh in people's minds, this might be a good
time to get this one pushed as well.

Note that the scope of this change has been reduced: while the old code
added space to align the end address to a cacheline boundary (which as I
pointed out, was unnecessary), the new version works using buffer lengths

As a discussion point, wouldn't it be better for the ALIGN macro to
assume 32-byte cache lines? Both 16-byte and 32-byte cachelines are
currently in common use, but by aligning the buffers to 32-byte addresses
we would simultaneously achieve 16-byte alignment.

 pixman/pixman-general.c |    4 ++--
 1 files changed, 2 insertions(+), 2 deletions(-)

diff --git a/pixman/pixman-general.c b/pixman/pixman-general.c
index fa88463..6141cb0 100644
--- a/pixman/pixman-general.c
+++ b/pixman/pixman-general.c
@@ -158,9 +158,9 @@ general_composite_rect  (pixman_implementation_t *imp,
     if (width <= 0 || _pixman_multiply_overflows_int (width, Bpp * 3))
-    if (width * Bpp * 3 > sizeof (stack_scanline_buffer) - 32 * 3)
+    if (width * Bpp * 3 > sizeof (stack_scanline_buffer) - 15 * 3)
-	scanline_buffer = pixman_malloc_ab_plus_c (width, Bpp * 3, 32 * 3);
+	scanline_buffer = pixman_malloc_ab_plus_c (width, Bpp * 3, 15 * 3);
 	if (!scanline_buffer)

More information about the Pixman mailing list