Hey Roland,
I have this library I'm writing that uses libibverbs. Somehow it seems
to be using the 1.0 version instead of the newer version (I'm
guessing). When I call ibv_create_cq() I get a seg fault and the stack
looks like this:
#0 0x000000319d80871d in pthread_mutex_lock () from /lib64/libpthread.so.0
#1 0x00007f60e93fac9a in __ibv_create_cq (context=0x7f60e8597c51, cqe=256,
cq_context=0x0, channel=0x0, comp_vector=0) at src/verbs.c:278
#2 0x00007f60e93f727f in __ibv_create_cq_1_0 (context=0x61db30, cqe=256,
cq_context=0x0, channel=0x0, comp_vector=0) at src/compat-1_0.c:649
At the __ibv_create_cq_1_0 stack frame, context looks good:
(gdb) p *context
$3 = {device = 0x61ede0, ops = {
query_device = 0x7f60e8596c98 <c4iw_query_device>,
query_port = 0x7f60e8596d35 <c4iw_query_port>,
alloc_pd = 0x7f60e8596d66 <c4iw_alloc_pd>,
dealloc_pd = 0x7f60e8596dd9 <c4iw_free_pd>,
reg_mr = 0x7f60e8596f77 <c4iw_reg_mr>, dereg_mr = 0,
create_cq = 0x7f60e8596fae <c4iw_dereg_mr>, poll_cq = 0,
req_notify_cq = 0, cq_event = 0,
<stuff truncated>
But context->real_context looks bad:
(gdb) p *context->real_context
$5 = {device = 0x30ec8348e5894855, ops = {query_device = 0xe0758948e87d8948,
query_port = 0xe87d8b48dc558966, alloc_pd = 0x458948fffffdf2e8,
dealloc_pd = 0xc78148f07d8b48f0, reg_mr = 0xffaa4ee800000130,
rereg_mr = 0xc78148f07d8b48ff, dereg_mr = 0xfffddce8000000b0,
alloc_mw = 0x7d8b480974c085ff, bind_mw = 0xb70fffffed72e8f0,
dealloc_mw = 0x8b48e0758b48dc55, create_cq = 0x89ffffac70e8e87d,
poll_cq = 0x358d48fc558bfc45, req_notify_cq = 0xb43d8d48000016a3,
<stuff truncated>
When I walk through a different program that does work, I don't see the
__ibv_create_cq_1_0() call. The program seems to call
__ibv_create_cq() directly.
What am I doing wrong? How does the loader determine which version is
needed?
Thanks in advance,
Stevo
--
To unsubscribe from this list: send the line "unsubscribe linux-rdma" in
the body of a message to majord...@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html