]> git.openfabrics.org - ~shefty/libibverbs.git/commit
libibverbs: Support older providers that do not support extensions
authorSean Hefty <sean.hefty@intel.com>
Wed, 12 Sep 2012 18:32:27 +0000 (11:32 -0700)
committerSean Hefty <sean.hefty@intel.com>
Thu, 20 Sep 2012 21:23:59 +0000 (14:23 -0700)
commit7cb34472bd00bc286569b726c7d38c6dd0dfe3b0
treefaf904ed19d8b5c82065fbb4a4b16f27fe1ffb85
parentb3d744f488bc97442df7e6cef8536d3b0352a786
libibverbs: Support older providers that do not support extensions

In order to support providers that do not handle extensions, including
providers built against an older version of ibverbs, add a compatibility
layer.  This allows most of the core ibverbs code to assume that
extensions are always available.  The compatibility layer is responsible
for converting between the extended verbs and the current structure
definitions.

The compatibility layer allows applications to make use of extended
structures, independent of the provider supporting them, and allows us
to extend existing structures which are normally allocated by the
provider: ibv_qp, ibv_srq, ibv_ah, ibv_mr, ibv_cq, ibv_pd, ibv_mw,
and ibv_comp_channel.  Existing applications are unaffected.

The compatibility layer is similar to the 1.0 compat code.  It allocates
the extended structures, which then point to the ones allocated by the
provider.  For the most part, the compatibility code is invoked by
directing the ibv_context ops into a compat function, which then redirects
the call to the provider.  This results in one extra level of indirection
when running with a provider that does not support extensions.

The exceptions to the indirection are opening and closing a device and
handling asynchronous events.

Signed-off-by: Sean Hefty <sean.hefty@intel.com>
Makefile.am
include/infiniband/verbs.h
src/compat-ex.c [new file with mode: 0644]
src/device.c
src/ibverbs.h
src/verbs.c