mirror of
https://github.com/schoebel/mars
synced 2025-03-11 07:47:41 +00:00
infra: round up output_size to even sizes and addresses
This commit is contained in:
parent
598cfc9d67
commit
f0304dd7cd
@ -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;
|
||||
}
|
||||
|
@ -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;
|
||||
}
|
||||
|
@ -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);
|
||||
|
Loading…
Reference in New Issue
Block a user