Hello ODP fellows,
I've suffering 'odp_buffer_alloc' failures, which occur very early in
applocation's lifetime.
These havn't occured in v0.4.0.
I was able to synthesize a test code demonstrating the failures, see
program below.
Working on Ubuntu 32bit, Linux 3.13.
ODP compiled locally from top of branch at ffea5118bd.
I'd be glad if you could please reproduce, or verify correctness of the
test program's ODP API usage.
Regards,
Shmulik
Example program:
#include <stdio.h>
#include <stdlib.h>
#include <odp_buffer_pool.h>
#include <odp_init.h>
#define ASSERT(x) do { \
if (!(x)) { \
fprintf(stderr, "\nFailure: %s:%d: '" #x "'\n", __func__, __LINE__); \
exit(-1); \
} \
} while (0)
int main(int argc, char **argv)
{
odp_buffer_pool_param_t params[] = {
{ .buf_size = 3116, .buf_align = 4, .num_bufs = 84,
.buf_type = ODP_BUFFER_TYPE_RAW },
{ .buf_size = 1076, .buf_align = 4, .num_bufs = 7796,
.buf_type = ODP_BUFFER_TYPE_RAW },
{ .buf_size = 53, .buf_align = 4, .num_bufs = 158275,
.buf_type = ODP_BUFFER_TYPE_RAW },
{ .buf_size = 308, .buf_align = 4, .num_bufs = 6808,
.buf_type = ODP_BUFFER_TYPE_RAW },
{ .buf_size = 1600, .buf_align = 0, .num_bufs = 2621,
.buf_type = ODP_BUFFER_TYPE_PACKET },
};
odp_buffer_pool_t pool_hdl[sizeof(params)/sizeof(*params)];
int i;
ASSERT(!odp_init_global(NULL, NULL));
ASSERT(!odp_init_local());
for (i = 0; i < sizeof(params)/sizeof(*params); i++)
{
char name[16];
sprintf(name, "pool%d", i);
pool_hdl[i] = odp_buffer_pool_create(name, ODP_SHM_NULL, ¶ms[i]);
/* assure pool ok */
ASSERT(pool_hdl[i] != ODP_BUFFER_POOL_INVALID);
/* assure one buff gets allocated */
ASSERT(odp_buffer_alloc(pool_hdl[i]) != ODP_BUFFER_INVALID);
}
/* test some allocations */
ASSERT(odp_buffer_alloc(pool_hdl[0]) != ODP_BUFFER_INVALID);
ASSERT(odp_buffer_alloc(pool_hdl[3]) != ODP_BUFFER_INVALID);
ASSERT(odp_buffer_alloc(pool_hdl[1]) != ODP_BUFFER_INVALID);
ASSERT(odp_buffer_alloc(pool_hdl[1]) != ODP_BUFFER_INVALID);
ASSERT(odp_buffer_alloc(pool_hdl[1]) != ODP_BUFFER_INVALID);
ASSERT(odp_buffer_alloc(pool_hdl[1]) != ODP_BUFFER_INVALID);
ASSERT(odp_buffer_alloc(pool_hdl[1]) != ODP_BUFFER_INVALID);
ASSERT(odp_buffer_alloc(pool_hdl[1]) != ODP_BUFFER_INVALID);
ASSERT(odp_buffer_alloc(pool_hdl[1]) != ODP_BUFFER_INVALID);
ASSERT(odp_buffer_alloc(pool_hdl[1]) != ODP_BUFFER_INVALID);
ASSERT(odp_buffer_alloc(pool_hdl[1]) != ODP_BUFFER_INVALID);
return 0;
}
_______________________________________________
lng-odp mailing list
[email protected]
http://lists.linaro.org/mailman/listinfo/lng-odp