])
# new fast registration API introduced in 4.4
- LB_CHECK_COMPILE([if 'ib_map_mr_sg' exists],
- ib_map_mr_sg, [
+ LB_CHECK_COMPILE([if 4arg 'ib_map_mr_sg' exists],
+ ib_map_mr_sg_4args, [
#ifdef HAVE_COMPAT_RDMA
#undef PACKAGE_NAME
#undef PACKAGE_TARNAME
[ib_map_mr_sg exists])
])
+ # ib_map_mr_sg changes from 4 to 5 args (adding sg_offset_p)
+ # in kernel 4.7 (and RHEL 7.3)
+ LB_CHECK_COMPILE([if 5arg 'ib_map_mr_sg' exists],
+ ib_map_mr_sg_5args, [
+ #ifdef HAVE_COMPAT_RDMA
+ #undef PACKAGE_NAME
+ #undef PACKAGE_TARNAME
+ #undef PACKAGE_VERSION
+ #undef PACKAGE_STRING
+ #undef PACKAGE_BUGREPORT
+ #undef PACKAGE_URL
+ #include <linux/compat-2.6.h>
+ #endif
+ #include <rdma/ib_verbs.h>
+ ],[
+ ib_map_mr_sg(NULL, NULL, 0, NULL, 0);
+ ],[
+ AC_DEFINE(HAVE_IB_MAP_MR_SG, 1,
+ [ib_map_mr_sg exists])
+ AC_DEFINE(HAVE_IB_MAP_MR_SG_5ARGS, 1,
+ [ib_map_mr_sg has 5 arguments])
+ ])
+
# ib_query_device() removed in 4.5
LB_CHECK_COMPILE([if 'struct ib_device' has member 'attrs'],
ib_device.attrs, [
}
#ifdef HAVE_IB_MAP_MR_SG
+#ifdef HAVE_IB_MAP_MR_SG_5ARGS
+ n = ib_map_mr_sg(mr, tx->tx_frags,
+ tx->tx_nfrags, NULL, PAGE_SIZE);
+#else
n = ib_map_mr_sg(mr, tx->tx_frags,
tx->tx_nfrags, PAGE_SIZE);
+#endif
if (unlikely(n != tx->tx_nfrags)) {
CERROR("Failed to map mr %d/%d "
"elements\n", n, tx->tx_nfrags);