From b6413aebdcb909fe68fd7eb71a0f106e181028af Mon Sep 17 00:00:00 2001 From: Sean Hefty Date: Wed, 12 Sep 2012 11:32:27 -0700 Subject: [PATCH] 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 -- 2.46.0