Recently, a change has been merged to "lnet/klnds/o2iblnd/o2iblnd.c" which
introduces the usage of IB_DEVICE_SG_GAPS_REG and IB_MR_TYPE_SG_GAPS.
Unfortunately, these symbols are not available in the 4.4.0 Kernels as used
by Ubuntu 14/16.
Additionally, there seems to be general warning against their use:
- https://patchwork.kernel.org/patch/9573483/
- https://lkml.org/lkml/2017/3/13/206
Also, there is a related performance issue as reported in LU-10394.
The solution is to create a preprocessor guard around their use, so that
Kernels lacking these symbols will not use them and revert to using the older
IB_MR_TYPE_MEM_REG, instead.
Test-Parameters: trivial
Signed-off-by: Martin Schroeder <martin.h.schroeder@intel.com>
Change-Id: Ie835d6e04f3859634ba508c24dff1f27f1b24cf6
Reviewed-on: https://review.whamcloud.com/30893
Tested-by: Jenkins
Reviewed-by: Bob Glossman <bob.glossman@intel.com>
Reviewed-by: James Simmons <uja.ornl@yahoo.com>
Reviewed-by: Amir Shehata <amir.shehata@intel.com>
Tested-by: Maloo <hpdd-maloo@intel.com>
Reviewed-by: Oleg Drokin <oleg.drokin@intel.com>
* gaps. So we will need to track them here.
*/
frd->frd_mr = ib_alloc_mr(fpo->fpo_hdev->ibh_pd,
+#ifdef IB_MR_TYPE_SG_GAPS
(dev_caps &
IBLND_DEV_CAPS_FASTREG_GAPS_SUPPORT) ?
IB_MR_TYPE_SG_GAPS :
IB_MR_TYPE_MEM_REG,
+#else
+ IB_MR_TYPE_MEM_REG,
+#endif
LNET_MAX_PAYLOAD/PAGE_SIZE);
#endif
if (IS_ERR(frd->frd_mr)) {
LCONSOLE_INFO("Using FastReg for registration\n");
hdev->ibh_dev->ibd_dev_caps |= IBLND_DEV_CAPS_FASTREG_ENABLED;
#ifndef HAVE_IB_ALLOC_FAST_REG_MR
+#ifdef IB_DEVICE_SG_GAPS_REG
if (dev_attr->device_cap_flags & IB_DEVICE_SG_GAPS_REG)
hdev->ibh_dev->ibd_dev_caps |= IBLND_DEV_CAPS_FASTREG_GAPS_SUPPORT;
#endif
+#endif
} else {
rc = -ENOSYS;
}