dorons@xxxxxxxxxxxx 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, > IBV_ACCESS_LOCAL_WRITE); 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@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html