[stgt] [PATCH] dynamically link libibverbs and librdma

Pete Wyckoff pw at padd.com
Mon Sep 22 23:07:16 CEST 2008

dorons at Voltaire.COM wrote on Sun, 21 Sep 2008 08:34 +0300:
> dynamically link libibverbs and librdma for using
> stgt without having userspace IB (e.g tcp mode).

I like the idea, but the implementation is quite ugly.  Is there any
better way to do it?  What other projects do dynamic linking to IB
like this?

> +typedef void (*ibv_ack_cq_events_t)(struct ibv_cq *cq, unsigned int nevents);
> +typedef struct ibv_pd *(*ibv_alloc_pd_t)(struct ibv_context *context);
> +typedef struct ibv_comp_channel *(*ibv_create_comp_channel_t)(struct ibv_context *context);
> +typedef struct ibv_cq *(*ibv_create_cq_t)(struct ibv_context *context, int cqe,
> +                              void *cq_context,
> +                              struct ibv_comp_channel *channel,
> +                              int comp_vector);

This particularly feels wrong.  We have to duplicate the function
declarations from verbs.h inside tgt?

> -	conn->srmr = ibv_reg_mr(conn->dev->pd, conn->srbuf, size,
> +	conn->srmr = tgt_fptr.ibv_reg_mr(conn->dev->pd, conn->srbuf, size,

Is this really the only way?  All calls have to go through this big
table of function pointers?

What about compiling libtgt-rdma.so using existing verbs, then
figure out if you can dlopen() that successfully.  Maybe if you say
RTLD_NOW and libverbs.so is not present, the dlopen will fail and
you can fall back to non-IB mode.

		-- Pete
To unsubscribe from this list: send the line "unsubscribe stgt" in
the body of a message to majordomo at vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

More information about the stgt mailing list