]> git.openfabrics.org - ~shefty/libibverbs.git/commitdiff
Refresh of xrcd
authorSean Hefty <sean.hefty@intel.com>
Tue, 25 Sep 2012 23:22:51 +0000 (16:22 -0700)
committerSean Hefty <sean.hefty@intel.com>
Tue, 25 Sep 2012 23:22:51 +0000 (16:22 -0700)
include/infiniband/verbs.h

index 79ae6ebbcdfd2fbebff1035ed837e3500f24ca72..317e725447ac02f81db4dc9fdb5eeb42d183dcaa 100644 (file)
@@ -757,6 +757,12 @@ static inline struct verbs_context *verbs_get_ctx(
        return container_of(ctx, struct verbs_context, context);
 }
 
+#define verbs_get_ctx_op(ctx, op) { \
+       struct verbs_context *vctx = verbs_get_ctx(xrcd->context); \
+       return (!vctx || \
+               (vctx->sz < sizeof(*vctx) - offsetof(struct verbs_context, op)) || \
+               !vctx->op) ? NULL : vctx; }
+
 static inline struct verbs_device *verbs_get_device(
                                        const struct ibv_device *dev)
 {
@@ -878,9 +884,8 @@ int ibv_dealloc_pd(struct ibv_pd *pd);
  */
 struct ibv_xrcd *ibv_open_xrcd(struct ibv_context *context, int fd, int oflags)
 {
-       struct verbs_context vctx = verbs_get_ctx(xrcd->context);
-
-       if (!vctx || vctx->sz
+       struct verbs_context *vctx = verbs_get_ctx_op(context, open_xrcd);
+       return vctx ? vctx->open_xrcd(context, fd, oflags) : NULL;
 }
 
 /**
@@ -888,7 +893,7 @@ struct ibv_xrcd *ibv_open_xrcd(struct ibv_context *context, int fd, int oflags)
  */
 int ibv_close_xrcd(struct ibv_xrcd *xrcd)
 {
-       struct verbs_context vctx = verbs_get_ctx(xrcd->context);
+       struct verbs_context *vctx = verbs_get_ctx(xrcd->context);
        return vctx->close_xrcd(xrcd);
 }