ib_srpt: Improve portability

git-svn-id: http://svn.code.sf.net/p/scst/svn/trunk@7082 d57e44dd-8a1f-0410-8b47-8ef2f437770f
This commit is contained in:
Bart Van Assche
2016-12-27 20:23:31 +00:00
parent 6912463c2e
commit db5426169b
7 changed files with 53 additions and 24 deletions
+16 -7
View File
@@ -5,12 +5,18 @@ ifndef PREFIX
PREFIX=/usr/local
endif
SCST_INC_DIR := $(shell if [ -e "$$PWD/../scst" ]; \
then echo "$$PWD/../scst/include"; \
else echo "$(DESTDIR)$(PREFIX)/include/scst"; fi)
SCST_SYMVERS_DIR := $(shell if [ -e $$PWD/../scst ]; then \
echo $$PWD/../scst/src; \
else echo $(DESTDIR)$(PREFIX)/include/scst; fi)
SCST_INC_DIR := $(shell \
if [ -e "$$PWD/../scst" ]; then \
echo "$$PWD/../scst/include"; \
else \
echo "$(DESTDIR)$(PREFIX)/include/scst"; \
fi)
SCST_SYMVERS_DIR := $(shell \
if [ -e "$$PWD/../scst" ]; then \
echo "$$PWD/../scst/src"; \
else \
echo "$(DESTDIR)$(PREFIX)/include/scst"; \
fi)
ifeq ($(KVER),)
ifeq ($(KDIR),)
@@ -66,7 +72,6 @@ ifeq ($(OFED_FLAVOR),MOFED)
# <linux/compat-2.6.h>, include that header file explicitly.
OFED_KERNEL_DIR:=/usr/src/ofa_kernel/default
OFED_VERS=$(shell rpm -q --qf '%{version}\n' mlnx-ofa_kernel-devel 2>/dev/null)
CKVER:=$(shell echo "$(KVER)" | sed 's/^\(\(2\.6\|[3-9]\)\.[0-9]*\).*/\1/')
OFED_CFLAGS:=-I$(OFED_KERNEL_DIR)/include -include "linux/compat-2.6.h"
OFED_CFLAGS+=-DMOFED_MAJOR=$(shell echo $(OFED_VERS) | cut -f1 -d.)
OFED_CFLAGS+=-DMOFED_MINOR=$(shell echo $(OFED_VERS) | cut -f2 -d.)
@@ -96,8 +101,10 @@ endif
CLIENT_REMOVE := $(call run_conftest,ib_client_remove,-DIB_CLIENT_REMOVE_TAKES_TWO_ARGS)
CM_LISTEN := $(call run_conftest,cm_listen,-DIB_CM_LISTEN_TAKES_FOURTH_ARG)
MAD_HANDLER_TAKES_SEND_BUF := $(call run_conftest,mad_handler_takes_send_buf,-DMAD_HANDLER_TAKES_SEND_BUF)
HAVE_IB_DMA_MAP_OPS := $(call run_conftest,ib_dma_map_ops,-DHAVE_IB_DMA_MAP_OPS)
HAVE_IB_SET_CPI_RESP_TIME := $(call run_conftest,ib_set_cpi_resp_time,-DHAVE_IB_SET_CPI_RESP_TIME)
GID_CHANGE_FLAG := $(call run_conftest,gid_change,-DHAVE_IB_EVENT_GID_CHANGE)
PD_HAS_LOCAL_DMA_LKEY := $(call run_conftest,pd_has_local_dma_lkey,-DIB_PD_HAS_LOCAL_DMA_LKEY)
RDMA_CREATE_ID := $(call run_conftest,rdma_create_id_net,-DRDMA_CREATE_ID_TAKES_NET_ARG=1,-DRDMA_CREATE_ID_TAKES_NET_ARG=0)
REGISTER_MAD_AGENT_FLAG := $(call run_conftest,register_mad_agent,-DREGISTER_MAD_AGENT_HAS_FLAGS_ARG)
QUERY_DEVICE := $(call run_conftest,query_device,-DHAVE_IB_QUERY_DEVICE)
@@ -112,8 +119,10 @@ PRE_CFLAGS=$(OFED_CFLAGS) \
$(IB_CLIENT_REMOVE_TAKES_TWO_ARGS) \
$(CM_LISTEN) \
$(MAD_HANDLER_TAKES_SEND_BUF) \
$(HAVE_IB_DMA_MAP_OPS) \
$(HAVE_IB_SET_CPI_RESP_TIME) \
$(GID_CHANGE_FLAG) \
$(PD_HAS_LOCAL_DMA_LKEY) \
$(RDMA_CREATE_ID) \
$(REGISTER_MAD_AGENT_FLAG) \
$(QUERY_GID_FLAG) \
+3
View File
@@ -0,0 +1,3 @@
LINUXINCLUDE := $(PRE_CFLAGS) $(LINUXINCLUDE)
obj-m += ib_dma_map_ops.o
@@ -0,0 +1,11 @@
#include <linux/module.h>
#include <rdma/ib_verbs.h>
static struct ib_device *dev;
static int modinit(void)
{
return dev->dma_ops != NULL;
}
module_init(modinit);
@@ -0,0 +1,3 @@
LINUXINCLUDE := $(PRE_CFLAGS) $(LINUXINCLUDE)
obj-m += pd_has_local_dma_lkey.o
@@ -0,0 +1,10 @@
#include <linux/module.h>
#include <linux/stddef.h>
#include <rdma/ib_verbs.h>
static int modinit(void)
{
return offsetof(struct ib_pd, local_dma_lkey);
}
module_init(modinit);
+9 -16
View File
@@ -135,8 +135,7 @@ static int use_srq;
static bool use_srq;
#endif
module_param(use_srq, bool, S_IRUGO | S_IWUSR);
MODULE_PARM_DESC(use_srq,
"Whether or not to use SRQ");
MODULE_PARM_DESC(use_srq, "Whether or not to use SRQ");
static int srpt_srq_size = DEFAULT_SRPT_SRQ_SIZE;
module_param(srpt_srq_size, int, S_IRUGO | S_IWUSR);
@@ -145,8 +144,7 @@ MODULE_PARM_DESC(srpt_srq_size,
static int srpt_sq_size = DEF_SRPT_SQ_SIZE;
module_param(srpt_sq_size, int, 0444);
MODULE_PARM_DESC(srpt_sq_size,
"Per-channel send queue (SQ) size.");
MODULE_PARM_DESC(srpt_sq_size, "Per-channel send queue (SQ) size.");
#if LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 31) \
|| defined(RHEL_MAJOR) && RHEL_MAJOR -0 <= 5
@@ -626,8 +624,7 @@ static void srpt_mad_recv_handler(struct ib_mad_agent *mad_agent,
#endif
0, IB_MGMT_DEVICE_HDR, IB_MGMT_DEVICE_DATA,
GFP_KERNEL
#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 2, 0) && !defined(MOFED_MAJOR) || \
defined(CREATE_SEND_MAD_HAS_BASE_ARG)
#ifdef CREATE_SEND_MAD_HAS_BASE_ARG
, 0
#endif
);
@@ -702,8 +699,7 @@ static int srpt_refresh_port(struct srpt_port *sport)
sport->lid = port_attr.lid;
ret = ib_query_gid(sport->sdev->device, sport->port, 0, &sport->gid
#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 4, 0) || \
defined(IB_QUERY_GID_HAS_ATTR_ARG)
#ifdef IB_QUERY_GID_HAS_ATTR_ARG
, NULL
#endif
);
@@ -724,8 +720,7 @@ static int srpt_refresh_port(struct srpt_port *sport)
srpt_mad_send_handler,
srpt_mad_recv_handler,
sport
#if LINUX_VERSION_CODE >= KERNEL_VERSION(3, 17, 0) || \
defined(REGISTER_MAD_AGENT_HAS_FLAGS_ARG)
#ifdef REGISTER_MAD_AGENT_HAS_FLAGS_ARG
, 0
#endif
);
@@ -2227,9 +2222,7 @@ retry:
!defined(RHEL_RELEASE_CODE)
ch->cq = ib_create_cq(sdev->device, srpt_completion, NULL, ch,
ch->rq_size + sq_size);
#elif (LINUX_VERSION_CODE < KERNEL_VERSION(4, 2, 0) || \
defined(MOFED_MAJOR)) && \
!defined(IB_CREATE_CQ_HAS_INIT_ATTR)
#elif !defined(IB_CREATE_CQ_HAS_INIT_ATTR)
ch->cq = ib_create_cq(sdev->device, srpt_completion, NULL, ch,
ch->rq_size + sq_size, ch->comp_vector);
#else
@@ -4360,7 +4353,7 @@ static void srpt_add_one(struct ib_device *device)
goto free_dev;
}
#if LINUX_VERSION_CODE < KERNEL_VERSION(4, 9, 0)
#ifndef IB_PD_HAS_LOCAL_DMA_LKEY
sdev->mr = ib_get_dma_mr(sdev->pd, IB_ACCESS_LOCAL_WRITE);
if (IS_ERR(sdev->mr)) {
pr_err("ib_get_dma_mr() failed: %ld\n", PTR_ERR(sdev->mr));
@@ -4493,7 +4486,7 @@ err_ring:
if (sdev->use_srq)
ib_destroy_srq(sdev->srq);
err_mr:
#if LINUX_VERSION_CODE < KERNEL_VERSION(4, 9, 0)
#ifndef IB_PD_HAS_LOCAL_DMA_LKEY
ib_dereg_mr(sdev->mr);
err_pd:
#endif
@@ -4568,7 +4561,7 @@ static void srpt_remove_one(struct ib_device *device, void *client_data)
if (sdev->use_srq)
ib_destroy_srq(sdev->srq);
#if LINUX_VERSION_CODE < KERNEL_VERSION(4, 9, 0)
#ifndef IB_PD_HAS_LOCAL_DMA_LKEY
ib_dereg_mr(sdev->mr);
#endif
ib_dealloc_pd(sdev->pd);
+1 -1
View File
@@ -457,7 +457,7 @@ struct srpt_port {
struct srpt_device {
struct ib_device *device;
struct ib_pd *pd;
#if LINUX_VERSION_CODE < KERNEL_VERSION(4, 9, 0)
#ifndef IB_PD_HAS_LOCAL_DMA_LKEY
struct ib_mr *mr;
#endif
struct ib_srq *srq;