Jason Gunthorpe <jguntho...@obsidianresearch.com> wrote: > The commit comment states the goal is to have new apps see > IBV_LINK_LAYER_UNSPECIFIED for all possible combinations of old stuff > underneath. > [...] The problem is with the userspace ABI out of libibverbs. Current > libibverbs does not zero its ib_port_attr structure before returning.
> Build this with Or's patch applied, then run it against libibverbs 1.1.5 > struct ibv_port_attr attr; > attr.link_layer = 100; > ibv_query_port(..,&attr); > assert(attr.link_layer == IBV_LINK_LAYER_UNSPECIFIED); // Fails! impossible, see below why > That is an ABI breaking issue that is not dealt with by Or's patch - couple > choices: > 1) Require and document callers using ibv_query_port to zero attr > before hand when using link_layer > 2) Crank the symbol version on ibv_query_port so dynamic linking fails > 3) Inline the memset in ibverbs.h: YES, #3 is what the patch does, and it follows your suggestion!! +static inline int ___ibv_query_port(struct ibv_context *context, + uint8_t port_num, + struct ibv_port_attr *port_attr) +{ + port_attr->link_layer = IBV_LINK_LAYER_UNSPECIFIED; + port_attr->pad = 0; + + return context->ops.query_port(context, port_num, port_attr); +} + +#define ibv_query_port(context, port_num, port_attr) \ + ___ibv_query_port(context, port_num, port_attr) + So we are okay now, correct? Or. -- 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