Permalink
Browse files

Update OFED to Linux 3.7 and update Mellanox drivers.

Update the OFED Infiniband core to the version supplied in Linux
version 3.7.

The update to OFED is nearly all additional defines and functions
with the exception of the addition of additional parameters to
ib_register_device() and the reg_user_mr callback.

In addition the ibcore (Infiniband core) and ipoib (IP over Infiniband)
have both been made into completely loadable modules to facilitate
testing of the OFED stack in FreeBSD.

Finally the Mellanox Infiniband drivers are now updated to the
latest version shipping with Linux 3.7.

Submitted by: Mellanox FreeBSD driver team:
                Oded Shanoon (odeds mellanox.com),
                Meny Yossefi (menyy mellanox.com),
                Orit Moskovich (oritm mellanox.com)

Approved by: re
  • Loading branch information...
1 parent 7e9b42c commit 91eb2b78a7e56a727c14039b1a0e05969398f2b5 @splbio splbio committed Sep 29, 2013
Showing with 25,094 additions and 3,534 deletions.
  1. +16 −1 sys/conf/files
  2. +59 −15 sys/contrib/rdma/ib_umem.h
  3. +3 −2 sys/dev/cxgb/ulp/iw_cxgb/iw_cxgb_provider.c
  4. +14 −0 sys/modules/Makefile
  5. +23 −0 sys/modules/ibcore/Makefile
  6. +31 −0 sys/modules/ipoib/Makefile
  7. +3 −3 sys/modules/mlx4/Makefile
  8. +8 −1 sys/modules/mlx4ib/Makefile
  9. +1 −1 sys/ofed/drivers/infiniband/core/addr.c
  10. +1 −1 sys/ofed/drivers/infiniband/core/cma.c
  11. +2 −1 sys/ofed/drivers/infiniband/core/core_priv.h
  12. +20 −4 sys/ofed/drivers/infiniband/core/device.c
  13. +21 −0 sys/ofed/drivers/infiniband/core/sa_query.c
  14. +180 −111 sys/ofed/drivers/infiniband/core/sysfs.c
  15. +15 −15 sys/ofed/drivers/infiniband/core/uverbs_cmd.c
  16. +4 −5 sys/ofed/drivers/infiniband/core/uverbs_main.c
  17. +14 −14 sys/ofed/drivers/infiniband/core/verbs.c
  18. +2 −0 sys/ofed/drivers/infiniband/hw/mlx4/Kconfig
  19. +30 −3 sys/ofed/drivers/infiniband/hw/mlx4/Makefile
  20. +25 −27 sys/ofed/drivers/infiniband/hw/mlx4/ah.c
  21. +688 −0 sys/ofed/drivers/infiniband/hw/mlx4/alias_GUID.c
  22. +440 −0 sys/ofed/drivers/infiniband/hw/mlx4/cm.c
  23. +98 −62 sys/ofed/drivers/infiniband/hw/mlx4/cq.c
  24. +1,928 −86 sys/ofed/drivers/infiniband/hw/mlx4/mad.c
  25. +1,350 −478 sys/ofed/drivers/infiniband/hw/mlx4/main.c
  26. +1,254 −0 sys/ofed/drivers/infiniband/hw/mlx4/mcg.c
  27. +441 −48 sys/ofed/drivers/infiniband/hw/mlx4/mlx4_ib.h
  28. +422 −93 sys/ofed/drivers/infiniband/hw/mlx4/mr.c
  29. +1,506 −706 sys/ofed/drivers/infiniband/hw/mlx4/qp.c
  30. +18 −51 sys/ofed/drivers/infiniband/hw/mlx4/srq.c
  31. +800 −0 sys/ofed/drivers/infiniband/hw/mlx4/sysfs.c
  32. +11 −1 sys/ofed/drivers/infiniband/hw/mlx4/user.h
  33. +0 −1 sys/ofed/drivers/infiniband/hw/mlx4/wc.c
  34. +1 −1 sys/ofed/drivers/infiniband/hw/mthca/mthca_cmd.c
  35. +1 −1 sys/ofed/drivers/infiniband/hw/mthca/mthca_main.c
  36. +1 −0 sys/ofed/drivers/infiniband/hw/mthca/mthca_memfree.c
  37. +2 −2 sys/ofed/drivers/infiniband/hw/mthca/mthca_provider.c
  38. +2 −1 sys/ofed/drivers/infiniband/ulp/ipoib/ipoib.h
  39. +17 −0 sys/ofed/drivers/infiniband/ulp/ipoib/ipoib_main.c
  40. +31 −6 sys/ofed/drivers/net/mlx4/Makefile
  41. +21 −24 sys/ofed/drivers/net/mlx4/alloc.c
  42. +31 −19 sys/ofed/drivers/net/mlx4/catas.c
  43. +1,747 −36 sys/ofed/drivers/net/mlx4/cmd.c
  44. +152 −68 sys/ofed/drivers/net/mlx4/cq.c
  45. +4 −2 sys/ofed/drivers/net/mlx4/en_cq.c
  46. +13 −9 sys/ofed/drivers/net/mlx4/en_main.c
  47. +6 −4 sys/ofed/drivers/net/mlx4/en_netdev.c
  48. +23 −10 sys/ofed/drivers/net/mlx4/en_port.c
  49. +2 −5 sys/ofed/drivers/net/mlx4/en_port.h
  50. +2 −4 sys/ofed/drivers/net/mlx4/en_rx.c
  51. +2 −2 sys/ofed/drivers/net/mlx4/en_tx.c
  52. +768 −125 sys/ofed/drivers/net/mlx4/eq.c
  53. +884 −118 sys/ofed/drivers/net/mlx4/fw.c
  54. +45 −5 sys/ofed/drivers/net/mlx4/fw.h
  55. +76 −75 sys/ofed/drivers/net/mlx4/icm.c
  56. +8 −12 sys/ofed/drivers/net/mlx4/icm.h
  57. +14 −39 sys/ofed/drivers/net/mlx4/intf.c
  58. +1,624 −448 sys/ofed/drivers/net/mlx4/main.c
  59. +1,124 −64 sys/ofed/drivers/net/mlx4/mcg.c
  60. +926 −34 sys/ofed/drivers/net/mlx4/mlx4.h
  61. +6 −5 sys/ofed/drivers/net/mlx4/mlx4_en.h
  62. +323 −197 sys/ofed/drivers/net/mlx4/mr.c
  63. +99 −8 sys/ofed/drivers/net/mlx4/pd.c
  64. +750 −59 sys/ofed/drivers/net/mlx4/port.c
  65. +24 −16 sys/ofed/drivers/net/mlx4/profile.c
  66. +281 −83 sys/ofed/drivers/net/mlx4/qp.c
  67. +4 −3 sys/ofed/drivers/net/mlx4/reset.c
  68. +4,315 −0 sys/ofed/drivers/net/mlx4/resource_tracker.c
  69. +17 −29 sys/ofed/drivers/net/mlx4/sense.c
  70. +93 −67 sys/ofed/drivers/net/mlx4/srq.c
  71. +325 −0 sys/ofed/drivers/net/mlx4/sys_tune.c
  72. +22 −0 sys/ofed/include/asm/atomic.h
  73. +1 −0 sys/ofed/include/asm/byteorder.h
  74. +53 −0 sys/ofed/include/linux/atomic.h
  75. +166 −0 sys/ofed/include/linux/bitops.h
  76. +17 −0 sys/ofed/include/linux/clocksource.h
  77. +3 −0 sys/ofed/include/linux/compat.h
  78. +6 −0 sys/ofed/include/linux/device.h
  79. +7 −0 sys/ofed/include/linux/dma-mapping.h
  80. +4 −0 sys/ofed/include/linux/gfp.h
  81. +4 −0 sys/ofed/include/linux/idr.h
  82. +5 −0 sys/ofed/include/linux/if_ether.h
  83. +2 −0 sys/ofed/include/linux/in6.h
  84. +70 −0 sys/ofed/include/linux/kernel.h
  85. +2 −0 sys/ofed/include/linux/linux_compat.c
  86. +3 −0 sys/ofed/include/linux/list.h
  87. +112 −3 sys/ofed/include/linux/log2.h
  88. +59 −11 sys/ofed/include/linux/mlx4/cmd.h
  89. +17 −1 sys/ofed/include/linux/mlx4/cq.h
  90. +628 −116 sys/ofed/include/linux/mlx4/device.h
  91. +27 −13 sys/ofed/include/linux/mlx4/driver.h
  92. +52 −19 sys/ofed/include/linux/mlx4/qp.h
  93. +0 −12 sys/ofed/include/linux/mlx4/srq.h
  94. +3 −0 sys/ofed/include/linux/moduleparam.h
  95. +107 −0 sys/ofed/include/linux/pci.h
  96. +6 −0 sys/ofed/include/linux/sysfs.h
  97. +2 −0 sys/ofed/include/linux/types.h
  98. +20 −1 sys/ofed/include/linux/workqueue.h
  99. +15 −0 sys/ofed/include/rdma/ib_cm.h
  100. +1 −1 sys/ofed/include/rdma/ib_mad.h
  101. +156 −0 sys/ofed/include/rdma/ib_pma.h
  102. +34 −0 sys/ofed/include/rdma/ib_sa.h
  103. +86 −5 sys/ofed/include/rdma/ib_user_verbs.h
  104. +212 −41 sys/ofed/include/rdma/ib_verbs.h
View
@@ -3542,6 +3542,18 @@ ofed/drivers/infiniband/ulp/sdp/sdp_tx.c optional sdp inet \
no-depend \
compile-with "${OFED_C} -I$S/ofed/drivers/infiniband/ulp/sdp/"
+ofed/drivers/infiniband/hw/mlx4/alias_GUID.c optional mlx4ib \
+ no-depend obj-prefix "mlx4ib_" \
+ compile-with "${OFED_C_NOIMP} -I$S/ofed/drivers/infiniband/hw/mlx4/"
+ofed/drivers/infiniband/hw/mlx4/mcg.c optional mlx4ib \
+ no-depend obj-prefix "mlx4ib_" \
+ compile-with "${OFED_C_NOIMP} -I$S/ofed/drivers/infiniband/hw/mlx4/"
+ofed/drivers/infiniband/hw/mlx4/sysfs.c optional mlx4ib \
+ no-depend obj-prefix "mlx4ib_" \
+ compile-with "${OFED_C_NOIMP} -I$S/ofed/drivers/infiniband/hw/mlx4/"
+ofed/drivers/infiniband/hw/mlx4/cm.c optional mlx4ib \
+ no-depend obj-prefix "mlx4ib_" \
+ compile-with "${OFED_C_NOIMP} -I$S/ofed/drivers/infiniband/hw/mlx4/"
ofed/drivers/infiniband/hw/mlx4/ah.c optional mlx4ib \
no-depend obj-prefix "mlx4ib_" \
compile-with "${OFED_C_NOIMP} -I$S/ofed/drivers/infiniband/hw/mlx4/"
@@ -3624,7 +3636,10 @@ ofed/drivers/net/mlx4/sense.c optional mlx4ib | mlxen \
ofed/drivers/net/mlx4/srq.c optional mlx4ib | mlxen \
no-depend obj-prefix "mlx4_" \
compile-with "${OFED_C_NOIMP} -I$S/ofed/drivers/net/mlx4/"
-ofed/drivers/net/mlx4/xrcd.c optional mlx4ib | mlxen \
+ofed/drivers/net/mlx4/resource_tracker.c optional mlx4ib | mlxen \
+ no-depend obj-prefix "mlx4_" \
+ compile-with "${OFED_C_NOIMP} -I$S/ofed/drivers/net/mlx4/"
+ofed/drivers/net/mlx4/sys_tune.c optional mlx4ib | mlxen \
no-depend obj-prefix "mlx4_" \
compile-with "${OFED_C_NOIMP} -I$S/ofed/drivers/net/mlx4/"
@@ -28,50 +28,94 @@
* ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
* SOFTWARE.
- *
- * $FreeBSD$
*/
#ifndef IB_UMEM_H
#define IB_UMEM_H
-struct ib_ucontext;
+#include <linux/list.h>
+#include <linux/scatterlist.h>
+#include <linux/workqueue.h>
+#include <linux/dma-attrs.h>
-struct ib_umem_chunk {
- TAILQ_ENTRY(ib_umem_chunk) entry;
- int nents;
- int nmap;
- struct rdma_scatterlist page_list[0];
-};
+struct ib_ucontext;
struct ib_umem {
struct ib_ucontext *context;
size_t length;
int offset;
int page_size;
int writable;
- TAILQ_HEAD(, ib_umem_chunk) chunk_list;
-#ifdef notyet
+ int hugetlb;
+ struct list_head chunk_list;
struct work_struct work;
struct mm_struct *mm;
-#endif
unsigned long diff;
};
+/* contiguous memory structure */
+struct ib_cmem {
+
+ struct ib_ucontext *context;
+ size_t length;
+ /* Link list of contiguous blocks being part of that cmem */
+ struct list_head ib_cmem_block;
+
+ /* Order of cmem block, 2^ block_order will equal number
+ of physical pages per block
+ */
+ unsigned long block_order;
+ /* Refernce counter for that memory area
+ - When value became 0 pages will be returned to the kernel.
+ */
+ struct kref refcount;
+};
+
+
+struct ib_cmem_block {
+
+ struct list_head list;
+ /* page will point to the page struct of the head page
+ in the current compound page.
+ block order is saved once as part of ib_cmem.
+ */
+ struct page *page;
+};
+
+
+
+struct ib_umem_chunk {
+ struct list_head list;
+ int nents;
+ int nmap;
+ struct dma_attrs attrs;
+ struct scatterlist page_list[0];
+};
+
#ifdef CONFIG_INFINIBAND_USER_MEM
struct ib_umem *ib_umem_get(struct ib_ucontext *context, unsigned long addr,
- size_t size, int access);
+ size_t size, int access, int dmasync);
void ib_umem_release(struct ib_umem *umem);
int ib_umem_page_count(struct ib_umem *umem);
+int ib_cmem_map_contiguous_pages_to_vma(struct ib_cmem *ib_cmem,
+ struct vm_area_struct *vma);
+struct ib_cmem *ib_cmem_alloc_contiguous_pages(struct ib_ucontext *context,
+ unsigned long total_size,
+ unsigned long page_size_order);
+void ib_cmem_release_contiguous_pages(struct ib_cmem *cmem);
+int ib_umem_map_to_vma(struct ib_umem *umem,
+ struct vm_area_struct *vma);
+
#else /* CONFIG_INFINIBAND_USER_MEM */
+#include <linux/err.h>
static inline struct ib_umem *ib_umem_get(struct ib_ucontext *context,
unsigned long addr, size_t size,
- int access) {
- return ERR_PTR(EINVAL);
+ int access, int dmasync) {
+ return ERR_PTR(-EINVAL);
}
static inline void ib_umem_release(struct ib_umem *umem) { }
static inline int ib_umem_page_count(struct ib_umem *umem) { return 0; }
@@ -541,7 +541,8 @@ static int iwch_reregister_phys_mem(struct ib_mr *mr,
static struct ib_mr *iwch_reg_user_mr(struct ib_pd *pd, u64 start, u64 length,
- u64 virt, int acc, struct ib_udata *udata)
+ u64 virt, int acc, struct ib_udata *udata,
+ int mr_id)
{
__be64 *pages;
int shift, i, n;
@@ -1136,7 +1137,7 @@ int iwch_register_device(struct iwch_dev *dev)
dev->ibdev.iwcm->rem_ref = iwch_qp_rem_ref;
dev->ibdev.iwcm->get_qp = iwch_get_qp;
- ret = ib_register_device(&dev->ibdev);
+ ret = ib_register_device(&dev->ibdev, NULL);
if (ret)
goto bail1;
View
@@ -128,6 +128,7 @@ SUBDIR= \
hwpmc \
${_hyperv} \
${_i2c} \
+ ${_ibcore} \
${_ibcs2} \
${_ichwd} \
${_ida} \
@@ -149,6 +150,7 @@ SUBDIR= \
${_igb} \
${_iir} \
${_io} \
+ ${_ipoib} \
${_ipdivert} \
${_ipfilter} \
${_ipfw} \
@@ -499,11 +501,17 @@ _fe= fe
_glxiic= glxiic
_glxsb= glxsb
_i2c= i2c
+.if ${MK_OFED} != "no" || defined(ALL_MODULES)
+_ibcore= ibcore
+.endif
_ibcs2= ibcs2
_ie= ie
_if_ndis= if_ndis
_igb= igb
_io= io
+.if ${MK_OFED} != "no" || defined(ALL_MODULES)
+_ipoib= ipoib
+.endif
_lindev= lindev
_linprocfs= linprocfs
_linsysfs= linsysfs
@@ -675,13 +683,19 @@ _hptrr= hptrr
.endif
_hyperv= hyperv
_i2c= i2c
+.if ${MK_OFED} != "no" || defined(ALL_MODULES)
+_ibcore= ibcore
+.endif
_ichwd= ichwd
_ida= ida
_if_ndis= if_ndis
_igb= igb
_iir= iir
_io= io
_ipmi= ipmi
+.if ${MK_OFED} != "no" || defined(ALL_MODULES)
+_ipoib= ipoib
+.endif
_ips= ips
_ipw= ipw
.if ${MK_SOURCELESS_UCODE} != "no"
@@ -0,0 +1,23 @@
+# $FreeBSD$
+.PATH: ${.CURDIR}/../../ofed/drivers/infiniband/core
+.PATH: ${.CURDIR}/../../ofed/include/linux
+
+.include <bsd.own.mk>
+
+KMOD = ibcore
+SRCS = addr.c cm_msgs.h iwcm.c mad_rmpp.h sa_query.c ucma.c uverbs_cmd.c
+SRCS+= agent.c local_sa.c iwcm.h multicast.c smi.c ud_header.c uverbs_main.c
+SRCS+= agent.h core_priv.h mad.c notice.c smi.h umem.c uverbs_marshall.c
+SRCS+= cache.c device.c mad_priv.h packer.c sysfs.c user_mad.c verbs.c
+SRCS+= cm.c fmr_pool.c mad_rmpp.c sa.h ucm.c uverbs.h cma.c
+SRCS+= linux_compat.c linux_radix.c linux_idr.c
+SRCS+= vnode_if.h device_if.h bus_if.h pci_if.h opt_inet.h
+
+CFLAGS+= -I${.CURDIR}/../../ofed/drivers/infiniband/core
+CFLAGS+= -I${.CURDIR}/../mlx4ib
+CFLAGS+= -I${.CURDIR}/../../ofed/include/
+CFLAGS+= -DINET6 -DINET -DOFED
+
+.include <bsd.kmod.mk>
+
+CFLAGS+= -Wno-cast-qual -Wno-pointer-arith -fms-extensions
@@ -0,0 +1,31 @@
+# $FreeBSD$
+.PATH: ${.CURDIR}/../../ofed/drivers/infiniband/ulp/ipoib
+.PATH: ${.CURDIR}/../../ofed/include/linux
+
+.include <bsd.own.mk>
+
+KMOD = ipoib
+SRCS = device_if.h bus_if.h opt_ofed.h vnode_if.h opt_inet.h opt_inet6.h
+SRCS += ipoib_cm.c ipoib_ib.c ipoib_main.c ipoib_multicast.c ipoib_verbs.c ipoib.h
+SRCS+= linux_compat.c linux_radix.c linux_idr.c
+
+CFLAGS+= -I${.CURDIR}/../../ofed/drivers/infiniband/ulp/ipoib
+CFLAGS+= -I${.CURDIR}/../ibcore
+CFLAGS+= -I${.CURDIR}/../../ofed/include/
+CFLAGS+= -DINET6 -DINET -DOFED
+
+.if !defined(KERNBUILDDIR)
+.if ${MK_INET_SUPPORT} != "no"
+opt_inet.h:
+ @echo "#define INET 1" > ${.TARGET}
+.endif
+
+.if ${MK_INET6_SUPPORT} != "no"
+opt_inet6.h:
+ @echo "#define INET6 1" > ${.TARGET}
+.endif
+.endif
+
+.include <bsd.kmod.mk>
+
+CFLAGS+= -Wno-cast-qual -Wno-pointer-arith -fms-extensions
@@ -3,11 +3,11 @@
.include <bsd.own.mk>
+.PATH: ${.CURDIR}/../../ofed/include/linux
KMOD = mlx4
SRCS = device_if.h bus_if.h pci_if.h vnode_if.h
-SRCS+= alloc.c catas.c cmd.c cq.c eq.c fw.c icm.c intf.c main.c mcg.c mr.c
-SRCS+= pd.c port.c profile.c qp.c reset.c sense.c srq.c xrcd.c
-SRCS+= opt_inet.h opt_inet6.h
+SRCS+= alloc.c catas.c cmd.c cq.c eq.c fw.c icm.c intf.c main.c mcg.c mr.c linux_compat.c linux_radix.c linux_idr.c
+SRCS+= pd.c port.c profile.c qp.c reset.c sense.c srq.c resource_tracker.c sys_tune.c
CFLAGS+= -I${.CURDIR}/../../ofed/drivers/net/mlx4
CFLAGS+= -I${.CURDIR}/../../ofed/include/
@@ -1,14 +1,21 @@
# $FreeBSD$
.PATH: ${.CURDIR}/../../ofed/drivers/infiniband/hw/mlx4
+.PATH: ${.CURDIR}/../../ofed/include/linux
.include <bsd.own.mk>
KMOD = mlx4ib
SRCS = device_if.h bus_if.h pci_if.h vnode_if.h
-SRCS+= ah.c cq.c doorbell.c mad.c main.c mr.c qp.c srq.c wc.c
+SRCS+= linux_compat.c linux_radix.c linux_idr.c
+SRCS+= alias_GUID.c mcg.c sysfs.c ah.c cq.c doorbell.c mad.c main.c mr.c qp.c srq.c wc.c cm.c
SRCS+= opt_inet.h opt_inet6.h
+#CFLAGS+= -I${.CURDIR}/../../ofed/include/
+#CFLAGS+= -I${.CURDIR}/../../../../include
+CFLAGS+= -I${.CURDIR}/../../ofed/drivers/infiniband/hw/mlx4
CFLAGS+= -I${.CURDIR}/../../ofed/include/
+CFLAGS+= -DCONFIG_INFINIBAND_USER_MEM
+CFLAGS+= -DINET6 -DINET -DOFED
.if !defined(KERNBUILDDIR)
.if ${MK_INET_SUPPORT} != "no"
@@ -356,7 +356,7 @@ static int addr_resolve(struct sockaddr *src_in,
u_char edst[MAX_ADDR_LEN];
int multi;
int bcast;
- int error;
+ int error = 0;
/*
* Determine whether the address is unicast, multicast, or broadcast
@@ -2957,7 +2957,7 @@ static void cma_set_mgid(struct rdma_id_private *id_priv,
0xFF10A01B)) {
/* IPv6 address is an SA assigned MGID. */
memcpy(mgid, &sin6->sin6_addr, sizeof *mgid);
- } else if ((addr->sa_family == AF_INET6)) {
+ } else if (addr->sa_family == AF_INET6) {
ipv6_ib_mc_map(&sin6->sin6_addr, dev_addr->broadcast, mc_map);
if (id_priv->id.ps == RDMA_PS_UDP)
mc_map[7] = 0x01; /* Use RDMA CM signature */
@@ -38,7 +38,8 @@
#include <rdma/ib_verbs.h>
-int ib_device_register_sysfs(struct ib_device *device);
+int ib_device_register_sysfs(struct ib_device *device, int (*port_callback)(struct ib_device *,
+ u8, struct kobject *));
void ib_device_unregister_sysfs(struct ib_device *device);
int ib_sysfs_setup(void);
@@ -273,7 +273,9 @@ static int read_port_table_lengths(struct ib_device *device)
* callback for each device that is added. @device must be allocated
* with ib_alloc_device().
*/
-int ib_register_device(struct ib_device *device)
+int ib_register_device(struct ib_device *device,
+ int (*port_callback)(struct ib_device *,
+ u8, struct kobject *))
{
int ret;
@@ -294,8 +296,6 @@ int ib_register_device(struct ib_device *device)
INIT_LIST_HEAD(&device->client_data_list);
spin_lock_init(&device->event_handler_lock);
spin_lock_init(&device->client_data_lock);
- device->ib_uverbs_xrcd_table = RB_ROOT;
- mutex_init(&device->xrcd_table_mutex);
ret = read_port_table_lengths(device);
if (ret) {
@@ -304,7 +304,7 @@ int ib_register_device(struct ib_device *device)
goto out;
}
- ret = ib_device_register_sysfs(device);
+ ret = ib_device_register_sysfs(device, port_callback);
if (ret) {
printk(KERN_WARNING "Couldn't register device %s with driver model\n",
device->name);
@@ -752,3 +752,19 @@ static void __exit ib_core_cleanup(void)
module_init(ib_core_init);
module_exit(ib_core_cleanup);
+
+#undef MODULE_VERSION
+#include <sys/module.h>
+static int
+ibcore_evhand(module_t mod, int event, void *arg)
+{
+ return (0);
+}
+
+static moduledata_t ibcore_mod = {
+ .name = "ibcore",
+ .evhand = ibcore_evhand,
+};
+
+MODULE_VERSION(ibcore, 1);
+DECLARE_MODULE(ibcore, ibcore_mod, SI_SUB_SMP, SI_ORDER_ANY);
Oops, something went wrong.

0 comments on commit 91eb2b7

Please sign in to comment.