[Mesa-dev] [PATCH] mesa/program_cache: calloc the correct size for the cache.
Carl Worth
cworth at cworth.org
Wed Sep 3 13:47:10 PDT 2014
Matt Turner <mattst88 at gmail.com> writes:
> git blaming that turns up a sloppy search and replace commit that
> replaced _mesa_calloc(x) (taking only one argument) with calloc(1, x),
> even when x was a multiplication expression.
Thanks for chasing that down.
> If someone wants to fix these up: git grep 'calloc.* \* '
Most of what that grep actually shows is harmless invocations along the
lines of:
pdp = calloc(1, sizeof *pdp);
But there are a number of instances with actual multiplication
occurring in the second argument to calloc.
Here are the instances I found after culling through the grep results:
src/gallium/drivers/freedreno/a2xx/ir-a2xx.c: ptr = dwords = calloc(1, 4 * info->sizedwords);
src/gallium/drivers/freedreno/ir3/ir3.c: ptr = dwords = calloc(1, 4 * info->sizedwords);
src/gallium/drivers/r600/r600_asm.c: bc->bytecode = calloc(1, bc->ndw * 4);
src/mapi/glapi/gen/gl_gentable.py: struct _glapi_table *disp = calloc(1, _glapi_get_dispatch_table_size() * sizeof(_glapi_proc));
src/mesa/drivers/dri/common/utils.c: configs = calloc(1, (num_modes + 1) * sizeof *configs);
src/mesa/drivers/dri/i965/brw_state_cache.c: calloc(1, cache->size * sizeof(struct brw_cache_item *));
src/mesa/main/atifragshader.c: calloc(1, sizeof(struct atifs_instruction) *
src/mesa/main/atifragshader.c: calloc(1, sizeof(struct atifs_setupinst) *
src/mesa/program/prog_cache.c: calloc(1, cache->size * sizeof(struct cache_item));
src/mesa/program/prog_instruction.c: calloc(1, numInst * sizeof(struct prog_instruction));
src/mesa/program/prog_optimize.c: calloc(1, prog->NumInstructions * sizeof(GLboolean));
src/mesa/program/prog_optimize.c: calloc(1, prog->NumInstructions * sizeof(GLboolean));
src/mesa/program/prog_optimize.c: calloc(1, prog->NumInstructions * sizeof(GLboolean));
src/mesa/program/prog_parameter.c: calloc(1, size * sizeof(struct gl_program_parameter));
src/mesa/vbo/vbo_exec_array.c: prim = calloc(1, primcount * sizeof(*prim));
And here's another that isn't the same pattern, (no "1", so not part of
the same search/replace issue), but potentially still worth looking
at. Here, there are three things being multiplied. I haven't looked at
the ranges of the actual values to know if there is an issue with the
way these things are split across the arguments:
src/mesa/tnl/t_vertex.c: vtx->vertex_buf = _mesa_align_calloc(vb_size * max_vertex_size, 32 );
Since the first list above is small enough, I'm happy to put together a
patch for this issue and trust that with peer review we can avoid
introducing any new bugs with the patch.
-Carl
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 818 bytes
Desc: not available
URL: <http://lists.freedesktop.org/archives/mesa-dev/attachments/20140903/1ec8bad9/attachment.sig>
More information about the mesa-dev
mailing list