diff --git a/srpt/Makefile b/srpt/Makefile index b25d0de72..e0d819eb4 100644 --- a/srpt/Makefile +++ b/srpt/Makefile @@ -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) # , 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) \ diff --git a/srpt/conftest/ib_dma_map_ops/Makefile b/srpt/conftest/ib_dma_map_ops/Makefile new file mode 100644 index 000000000..fc43ac8af --- /dev/null +++ b/srpt/conftest/ib_dma_map_ops/Makefile @@ -0,0 +1,3 @@ +LINUXINCLUDE := $(PRE_CFLAGS) $(LINUXINCLUDE) + +obj-m += ib_dma_map_ops.o diff --git a/srpt/conftest/ib_dma_map_ops/ib_dma_map_ops.c b/srpt/conftest/ib_dma_map_ops/ib_dma_map_ops.c new file mode 100644 index 000000000..2aeb8bbf2 --- /dev/null +++ b/srpt/conftest/ib_dma_map_ops/ib_dma_map_ops.c @@ -0,0 +1,11 @@ +#include +#include + +static struct ib_device *dev; + +static int modinit(void) +{ + return dev->dma_ops != NULL; +} + +module_init(modinit); diff --git a/srpt/conftest/pd_has_local_dma_lkey/Makefile b/srpt/conftest/pd_has_local_dma_lkey/Makefile new file mode 100644 index 000000000..7e203aff4 --- /dev/null +++ b/srpt/conftest/pd_has_local_dma_lkey/Makefile @@ -0,0 +1,3 @@ +LINUXINCLUDE := $(PRE_CFLAGS) $(LINUXINCLUDE) + +obj-m += pd_has_local_dma_lkey.o diff --git a/srpt/conftest/pd_has_local_dma_lkey/pd_has_local_dma_lkey.c b/srpt/conftest/pd_has_local_dma_lkey/pd_has_local_dma_lkey.c new file mode 100644 index 000000000..b6889c165 --- /dev/null +++ b/srpt/conftest/pd_has_local_dma_lkey/pd_has_local_dma_lkey.c @@ -0,0 +1,10 @@ +#include +#include +#include + +static int modinit(void) +{ + return offsetof(struct ib_pd, local_dma_lkey); +} + +module_init(modinit); diff --git a/srpt/src/ib_srpt.c b/srpt/src/ib_srpt.c index 0da84d2cf..426c5aaf4 100644 --- a/srpt/src/ib_srpt.c +++ b/srpt/src/ib_srpt.c @@ -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); diff --git a/srpt/src/ib_srpt.h b/srpt/src/ib_srpt.h index b410dd69e..5ff8869dc 100644 --- a/srpt/src/ib_srpt.h +++ b/srpt/src/ib_srpt.h @@ -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;