infra: round up output_size to even sizes and addresses

This commit is contained in:
Thomas Schoebel-Theuer 2024-01-16 15:00:48 +01:00
parent 598cfc9d67
commit f0304dd7cd
3 changed files with 18 additions and 5 deletions

View File

@ -236,6 +236,7 @@ int generic_brick_init_full(
for (i = 0; i < brick_type->max_outputs; i++) {
struct generic_output *output = data;
const struct generic_output_type *type = *output_types++;
int output_size;
if (!type || type->output_size <= 0) {
return -EINVAL;
@ -244,8 +245,11 @@ int generic_brick_init_full(
generic_output_init(brick, i, type, output, (names && *names) ? *names++ : type->type_name);
if (status < 0)
return status;
data += type->output_size;
size -= type->output_size;
output_size = type->output_size;
output_size = DIV_ROUND_UP(output_size,
sizeof(void *)) * sizeof(void *);
data += output_size;
size -= output_size;
if (size < 0)
return -ENOMEM;
}

View File

@ -569,7 +569,11 @@ INLINE int generic_size(const struct generic_brick_type *brick_type)
}
size += brick_type->max_outputs * sizeof(void*);
for (i = 0; i < brick_type->max_outputs; i++) {
size += brick_type->default_output_types[i]->output_size;
int output_size = brick_type->default_output_types[i]->output_size;
output_size = DIV_ROUND_UP(output_size,
sizeof(void *)) * sizeof(void *);
size += output_size;
}
return size;
}

View File

@ -2867,15 +2867,20 @@ struct mars_brick *mars_make_brick(struct mars_global *global, struct mars_dent
output_types = brick_type->default_output_types;
for (i = 0; i < brick_type->max_outputs; i++) {
const struct generic_output_type *type = *output_types++;
int output_size;
if (unlikely(!type)) {
MARS_ERR("output_type %d is missing\n", i);
goto err_name;
}
if (unlikely(type->output_size <= 0)) {
output_size = type->output_size;
if (unlikely(output_size <= 0)) {
MARS_ERR("bad output_size at %d\n", i);
goto err_name;
}
size += type->output_size;
output_size = DIV_ROUND_UP(output_size,
sizeof(void *)) * sizeof(void *);
size += output_size;
}
res = brick_zmem_alloc(size);