]> 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>
Wed, 26 Sep 2012 18:41:42 +0000 (11:41 -0700)
commitb6413aebdcb909fe68fd7eb71a0f106e181028af
treeeb069dacc3502ba7f9e575f462e80f48ec5b8fd4
parent4a296a08851356d367668a71cb852480dc7f909b
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>