#endif
#include "rseq-utils.h"
-#include "smp.h"
+#include <rseq/rseq.h>
/*
* rseq-mempool.c: rseq CPU-Local Storage (CLS) memory allocator.
void *mmap_priv;
bool init_set;
- void (*init_func)(void *priv, void *addr, size_t len, int cpu);
+ int (*init_func)(void *priv, void *addr, size_t len, int cpu);
void *init_priv;
bool robust_set;
void *ptr;
if (len < page_size || alignment < page_size ||
- !is_pow2(len) || !is_pow2(alignment)) {
+ !is_pow2(alignment) || (len & (alignment - 1))) {
errno = EINVAL;
return NULL;
}
int cpu;
for (cpu = 0; cpu < pool->attr.max_nr_cpus; cpu++) {
- pool->attr.init_func(pool->attr.init_priv,
- base + (pool->attr.stride * cpu),
- pool->attr.stride, cpu);
+ if (pool->attr.init_func(pool->attr.init_priv,
+ base + (pool->attr.stride * cpu),
+ pool->attr.stride, cpu)) {
+ goto error_alloc;
+ }
}
}
return range;
}
if (attr.max_nr_cpus == 0) {
/* Auto-detect */
- attr.max_nr_cpus = get_possible_cpus_array_len();
+ attr.max_nr_cpus = rseq_get_max_nr_cpus();
if (attr.max_nr_cpus == 0) {
errno = EINVAL;
return NULL;
}
int rseq_mempool_attr_set_init(struct rseq_mempool_attr *attr,
- void (*init_func)(void *priv, void *addr, size_t len, int cpu),
+ int (*init_func)(void *priv, void *addr, size_t len, int cpu),
void *init_priv)
{
if (!attr) {