21170572 libmlx4 should be built with the system mlnx_umap.h
authorboris.chiu@oracle.com
Wed, 02 Sep 2015 11:01:59 -0700
changeset 4835 d5abd56e3fcf
parent 4834 22970ab7cd3a
child 4836 2963a732ee80
21170572 libmlx4 should be built with the system mlnx_umap.h 21481241 mlnx_umap.h needs removal and unwanted comment in libibverbs needs deletion 21747062 update libibverbs to handle EDR/FDR speeds
components/open-fabrics/libibverbs/patches/base.patch
components/open-fabrics/libibverbs/solaris_compatibility.c
components/open-fabrics/libmlx4/Makefile
components/open-fabrics/libmlx4/mlnx_umap.h
components/open-fabrics/libmlx4/patches/base.patch
--- a/components/open-fabrics/libibverbs/patches/base.patch	Tue Sep 01 13:30:24 2015 -0700
+++ b/components/open-fabrics/libibverbs/patches/base.patch	Wed Sep 02 11:01:59 2015 -0700
@@ -1,5 +1,5 @@
-#This patch was developed in-house. We plan to submit it upstream, but do
-# not yet have a target date for doing so
+#This patch was developed both in-house and from outside. We plan to submit it
+#upstream, but do not yet have a target date for doing so
 #
 diff -r -u /tmp/846623/libibverbs-1.1.4/Makefile.am libibverbs-1.1.4/Makefile.am
 --- /tmp/846623/libibverbs-1.1.4/Makefile.am	Thu Feb  3 01:53:17 2011
@@ -559,7 +559,62 @@
  int ibv_rate_to_mult(enum ibv_rate rate)
  {
  	switch (rate) {
[email protected]@ -93,6 +108,12 @@
[email protected]@ -76,6 +91,54 @@
+ 	}
+ }
+ 
++int ibv_rate_to_mbps(enum ibv_rate rate)
++{
++	switch (rate) {
++	case IBV_RATE_2_5_GBPS: return 2500;
++	case IBV_RATE_5_GBPS:   return 5000;
++	case IBV_RATE_10_GBPS:  return 10000;
++	case IBV_RATE_20_GBPS:  return 20000;
++	case IBV_RATE_30_GBPS:  return 30000;
++	case IBV_RATE_40_GBPS:  return 40000;
++	case IBV_RATE_60_GBPS:  return 60000;
++	case IBV_RATE_80_GBPS:  return 80000;
++	case IBV_RATE_120_GBPS: return 120000;
++	case IBV_RATE_14_GBPS:  return 14062;
++	case IBV_RATE_56_GBPS:  return 56250;
++	case IBV_RATE_112_GBPS: return 112500;
++	case IBV_RATE_168_GBPS: return 168750;
++	case IBV_RATE_25_GBPS:  return 25781;
++	case IBV_RATE_100_GBPS: return 103125;
++	case IBV_RATE_200_GBPS: return 206250;
++	case IBV_RATE_300_GBPS: return 309375;
++	default:               return -1;
++	}
++}
++
++enum ibv_rate mbps_to_ibv_rate(int mbps)
++{
++	switch (mbps) {
++	case 2500:   return IBV_RATE_2_5_GBPS;
++	case 5000:   return IBV_RATE_5_GBPS;
++	case 10000:  return IBV_RATE_10_GBPS;
++	case 20000:  return IBV_RATE_20_GBPS;
++	case 30000:  return IBV_RATE_30_GBPS;
++	case 40000:  return IBV_RATE_40_GBPS;
++	case 60000:  return IBV_RATE_60_GBPS;
++	case 80000:  return IBV_RATE_80_GBPS;
++	case 120000: return IBV_RATE_120_GBPS;
++	case 14062:  return IBV_RATE_14_GBPS;
++	case 56250:  return IBV_RATE_56_GBPS;
++	case 112500: return IBV_RATE_112_GBPS;
++	case 168750: return IBV_RATE_168_GBPS;
++	case 25781:  return IBV_RATE_25_GBPS;
++	case 103125: return IBV_RATE_100_GBPS;
++	case 206250: return IBV_RATE_200_GBPS;
++	case 309375: return IBV_RATE_300_GBPS;
++	default:     return IBV_RATE_MAX;
++	}
++}
++
+ int __ibv_query_device(struct ibv_context *context,
+ 		       struct ibv_device_attr *device_attr)
+ {
[email protected]@ -93,6 +156,12 @@
  int __ibv_query_gid(struct ibv_context *context, uint8_t port_num,
  		    int index, union ibv_gid *gid)
  {
@@ -572,7 +627,7 @@
  	char name[24];
  	char attr[41];
  	uint16_t val;
[email protected]@ -112,6 +133,7 @@
[email protected]@ -112,6 +181,7 @@
  	}
  
  	return 0;
@@ -580,7 +635,7 @@
  }
  default_symver(__ibv_query_gid, ibv_query_gid);
  
[email protected]@ -118,6 +140,12 @@
[email protected]@ -118,6 +188,12 @@
  int __ibv_query_pkey(struct ibv_context *context, uint8_t port_num,
  		     int index, uint16_t *pkey)
  {
@@ -593,7 +648,7 @@
  	char name[24];
  	char attr[8];
  	uint16_t val;
[email protected]@ -133,9 +161,159 @@
[email protected]@ -133,9 +209,159 @@
  
  	*pkey = htons(val);
  	return 0;
@@ -753,7 +808,7 @@
  struct ibv_pd *__ibv_alloc_pd(struct ibv_context *context)
  {
  	struct ibv_pd *pd;
[email protected]@ -148,6 +326,27 @@
[email protected]@ -148,6 +374,27 @@
  }
  default_symver(__ibv_alloc_pd, ibv_alloc_pd);
  
@@ -781,7 +836,7 @@
  int __ibv_dealloc_pd(struct ibv_pd *pd)
  {
  	return pd->context->ops.dealloc_pd(pd);
[email protected]@ -175,6 +374,27 @@
[email protected]@ -175,6 +422,27 @@
  }
  default_symver(__ibv_reg_mr, ibv_reg_mr);
  
@@ -809,7 +864,7 @@
  int __ibv_dereg_mr(struct ibv_mr *mr)
  {
  	int ret;
[email protected]@ -189,6 +409,26 @@
[email protected]@ -189,6 +457,26 @@
  }
  default_symver(__ibv_dereg_mr, ibv_dereg_mr);
  
@@ -836,7 +891,7 @@
  static struct ibv_comp_channel *ibv_create_comp_channel_v2(struct ibv_context *context)
  {
  	struct ibv_abi_compat_v2 *t = context->abi_compat;
[email protected]@ -212,6 +452,10 @@
[email protected]@ -212,6 +500,10 @@
  	struct ibv_comp_channel            *channel;
  	struct ibv_create_comp_channel      cmd;
  	struct ibv_create_comp_channel_resp resp;
@@ -847,7 +902,7 @@
  
  	if (abi_ver <= 2)
  		return ibv_create_comp_channel_v2(context);
[email protected]@ -221,7 +465,23 @@
[email protected]@ -221,7 +513,23 @@
  		return NULL;
  
  	IBV_INIT_CMD_RESP(&cmd, sizeof cmd, CREATE_COMP_CHANNEL, &resp, sizeof resp);
@@ -871,7 +926,7 @@
  		free(channel);
  		return NULL;
  	}
[email protected]@ -228,6 +488,9 @@
[email protected]@ -228,6 +536,9 @@
  
  	VALGRIND_MAKE_MEM_DEFINED(&resp, sizeof resp);
  
@@ -2328,7 +2383,45 @@
  enum ibv_rereg_mr_flags {
  	IBV_REREG_MR_CHANGE_TRANSLATION	= (1 << 0),
  	IBV_REREG_MR_CHANGE_PD		= (1 << 1),
[email protected]@ -425,6 +448,14 @@
[email protected]@ -360,7 +383,15 @@
+ 	IBV_RATE_40_GBPS  = 7,
+ 	IBV_RATE_60_GBPS  = 8,
+ 	IBV_RATE_80_GBPS  = 9,
+-	IBV_RATE_120_GBPS = 10
++	IBV_RATE_120_GBPS = 10,
++	IBV_RATE_14_GBPS  = 11,
++	IBV_RATE_56_GBPS  = 12,
++	IBV_RATE_112_GBPS = 13,
++	IBV_RATE_168_GBPS = 14,
++	IBV_RATE_25_GBPS  = 15,
++	IBV_RATE_100_GBPS = 16,
++	IBV_RATE_200_GBPS = 17,
++	IBV_RATE_300_GBPS = 18
+ };
+ 
+ /**
[email protected]@ -377,6 +408,20 @@
+  */
+ enum ibv_rate mult_to_ibv_rate(int mult) __attribute_const;
+ 
++/**
++ * ibv_rate_to_mbps - Convert the IB rate enum to Mbit/sec.
++ * For example, IBV_RATE_5_GBPS will return the value 5000.
++ * @rate: rate to convert.
++ */
++int ibv_rate_to_mbps(enum ibv_rate rate) __attribute_const;
++
++/**
++ * mbps_to_ibv_rate - Convert a Mbit/sec value to an IB rate enum.
++ * @mbps: value to convert.
++ */
++enum ibv_rate mbps_to_ibv_rate(int mbps) __attribute_const;
++
++
+ struct ibv_ah_attr {
+ 	struct ibv_global_route	grh;
+ 	uint16_t		dlid;
[email protected]@ -425,6 +470,14 @@
  	uint32_t		max_inline_data;
  };
  
@@ -2343,7 +2436,7 @@
  struct ibv_qp_init_attr {
  	void		       *qp_context;
  	struct ibv_cq	       *send_cq;
[email protected]@ -659,6 +690,7 @@
[email protected]@ -659,6 +712,7 @@
  	char			dev_path[IBV_SYSFS_PATH_MAX];
  	/* Path to infiniband class device in sysfs */
  	char			ibdev_path[IBV_SYSFS_PATH_MAX];
@@ -2351,7 +2444,7 @@
  };
  
  struct ibv_more_ops {
[email protected]@ -743,6 +775,12 @@
[email protected]@ -743,6 +797,12 @@
  	int			(*detach_mcast)(struct ibv_qp *qp, const union ibv_gid *gid,
  						uint16_t lid);
  	void			(*async_event)(struct ibv_async_event *event);
@@ -2364,7 +2457,7 @@
  };
  
  struct ibv_context {
[email protected]@ -749,6 +787,13 @@
[email protected]@ -749,6 +809,13 @@
  	struct ibv_device      *device;
  	struct ibv_context_ops	ops;
  	int			cmd_fd;
@@ -2378,7 +2471,7 @@
  	int			async_fd;
  	int			num_comp_vectors;
  	pthread_mutex_t		mutex;
[email protected]@ -797,6 +842,11 @@
[email protected]@ -797,6 +864,11 @@
  uint64_t ibv_get_device_guid(struct ibv_device *device);
  
  /**
@@ -2390,7 +2483,7 @@
   * ibv_open_device - Initialize device for use
   */
  struct ibv_context *ibv_open_device(struct ibv_device *device);
[email protected]@ -853,11 +903,44 @@
[email protected]@ -853,11 +925,44 @@
  		   int index, uint16_t *pkey);
  
  /**
@@ -2435,7 +2528,7 @@
   * ibv_dealloc_pd - Free a protection domain
   */
  int ibv_dealloc_pd(struct ibv_pd *pd);
[email protected]@ -869,11 +952,27 @@
[email protected]@ -869,11 +974,27 @@
  			  size_t length, int access);
  
  /**
@@ -3176,3 +3269,13 @@
  
  #include <infiniband/verbs.h>
  #include <infiniband/driver.h>
[email protected]@ -140,6 +142,9 @@
+ 	case 1:  return "2.5 Gbps";
+ 	case 2:  return "5.0 Gbps";
+ 	case 4:  return "10.0 Gbps";
++	case 8:  return "10.0 Gbps";
++	case 16: return "14.0 Gbps";
++	case 32: return "25.0 Gbps";
+ 	default: return "invalid speed";
+ 	}
+ }
--- a/components/open-fabrics/libibverbs/solaris_compatibility.c	Tue Sep 01 13:30:24 2015 -0700
+++ b/components/open-fabrics/libibverbs/solaris_compatibility.c	Wed Sep 02 11:01:59 2015 -0700
@@ -94,69 +94,11 @@
 static int sol_uverbs_minor_dev = -1;
 
 /*
- * Ugly, evil and rest of the names that qualify for it.
- * This is a side definition for the uverbs hca_info till the
- * new header file can appear in the userland build environment once that
- * happens this code will go.
- */
-#if	(IB_USER_VERBS_SOLARIS_ABI_VERSION == 2)
-#undef	IB_USER_VERBS_SOLARIS_ABI_VERSION
-#define	IB_USER_VERBS_SOLARIS_ABI_VERSION	3
-#define	__VERBS_COMPAT_MODE	1
-
-/*
  * Some useful definitions.
  */
-#define	PSID_STR_SZ		40
-#define	IBDEV_NAME_SZ		64
-#define	HCA_DRIVER_NAME_SZ	40
-#define	DEVID_STR_SZ		40
-
-/*
- * These are duplicate definitions to help the build complete on userland
- * build machines till the header files are populated with the new versions.
- * Once the new header file is available in the build system this code will
- * be removed.
- */
-typedef struct sol_uverbs_hca_infov3_s {
-	char		uverbs_hca_psid_string[PSID_STR_SZ];
-	char		uverbs_hca_ibdev_name[IBDEV_NAME_SZ];
-	char		uverbs_hca_driver_name[HCA_DRIVER_NAME_SZ];
-	uint32_t	uverbs_hca_driver_instance;
-	uint32_t	uverbs_hca_vendorid;
-	uint16_t	uverbs_hca_deviceid;
-	uint16_t	uverbs_hca_devidx;
-	int32_t		uverbs_hca_abi_version;
-	uint64_t	uverbs_hca_fw_ver;
-	uint64_t	uverbs_hca_node_guid;
-	uint64_t	uverbs_hca_node_external_guid;
-	uint64_t	uverbs_hca_sys_image_guid;
-	uint32_t	uverbs_hca_hw_version;
-	uint8_t		uverbs_hca_pad1[4];
-	char		uverbs_hca_devid_string[DEVID_STR_SZ];
-} sol_uverbs_hca_infov3_t;
-
-typedef struct sol_uverbs_info_v3_s {
-	int32_t			uverbs_abi_version;
-	int32_t			uverbs_solaris_abi_version;
-	int16_t			uverbs_hca_cnt;
-	int8_t			uverbs_pad1[6]; /* Padding for alignment */
-	sol_uverbs_hca_infov3_t uverbs_hca_info[];
-} sol_uverbs_infov3_t;
-
-#define	SIZEOF_UVERBS_INFO	(sizeof (sol_uverbs_infov3_t))
-#define	SIZEOF_HCA_INFO		(sizeof (sol_uverbs_hca_infov3_t))
-#define	UVERBS_INFO(x)		((sol_uverbs_infov3_t *)x)
-#define	HCA_INFO(x)		((sol_uverbs_hca_infov3_t *)x)
-
-#else /* (IB_USER_VERBS_SOLARIS_ABI_VERSION == 3) */
-
 #define	SIZEOF_UVERBS_INFO	(sizeof (sol_uverbs_info_t))
 #define	SIZEOF_HCA_INFO		(sizeof (sol_uverbs_hca_info_t))
 #define	UVERBS_INFO(x)		((sol_uverbs_info_t *)x)
-#define	HCA_INFO(x)		((sol_uverbs_hca_info_t *)x)
-
-#endif /* END */
 
 /*
  * check_path() prefixs
@@ -326,13 +268,8 @@
 	ibdev_cache_info_t		*info;
 	int				fd, i, hca_cnt;
 	char				uverbs_devpath[MAX_OFS_DEVPATH_LEN];
-#ifdef	__VERBS_COMPAT_MODE
-	sol_uverbs_infov3_t		*uverbs_infop;
-	sol_uverbs_hca_infov3_t		*hca_infop;
-#else
 	sol_uverbs_info_t		*uverbs_infop;
 	sol_uverbs_hca_info_t		*hca_infop;
-#endif /* END __VERBS_COMPAT_MODE */
 	char 				*buf;
 	size_t				bufsize;
 	uint16_t			major, minor, sub_minor;
@@ -1121,8 +1058,16 @@
 				rate = 5;
 				break;
 			case 4:
+				/* FALLTHROUGH */
+			case 8:
 				rate = 10;
 				break;
+			case 16:
+				rate = 14.0625;
+				break;
+			case 32:
+				rate = 25.78125;
+				break;
 			default:
 				rate = 0;
 			}
--- a/components/open-fabrics/libmlx4/Makefile	Tue Sep 01 13:30:24 2015 -0700
+++ b/components/open-fabrics/libmlx4/Makefile	Wed Sep 02 11:01:59 2015 -0700
@@ -54,7 +54,6 @@
 		else \
 		cp mlx4.driver.sparc $(@D)/mlx4.driver; \
 		fi; \
-		cp mlnx_umap.h $(@D)/src ; \
 		cd $(@D) ; \
 		aclocal-1.11 --force ; \
 		libtoolize --copy --force --ltdl ; \
--- a/components/open-fabrics/libmlx4/mlnx_umap.h	Tue Sep 01 13:30:24 2015 -0700
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,152 +0,0 @@
-/*
- * Copyright (c) 2009, 2015, Oracle and/or its affiliates. All rights reserved.
- */
-
-#ifndef	_SYS_IB_ADAPTERS_MLNX_UMAP_H
-#define	_SYS_IB_ADAPTERS_MLNX_UMAP_H
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/*
- * mlnx_umap.h
- *	Contains all of the definions necessary for communicating the data
- *	needed for direct userland access to resources on Mellanox HCAs.
- */
-
-/*
- * Note: The structs in this file are used in the interface(s)
- *	between kernel service drivers, e.g. daplt, and the libraries
- *	on top of them, e.g. udapl_tavor.so.1.  When any of the
- *	structs in this file change, any version control between the
- *	kernel service driver and the library will need to change.
- *
- * There is a version control on the structs defined here.  The library
- * (consumer of structs from ibt_ci_data_out()) must verify a version
- * field to correctly read the data provided by the kernel driver
- * (tavor, arbel, and hermon).
- */
-
-#define	MLNX_UMAP_IF_VERSION	3
-
-/*
- * The following defines are used in the database type field for each database
- * entry.  They specify the type of object (UAR pages, PIDs, CQ, QP, and MR
- * umemcookie) that corresponds to the database key value.  On database queries,
- * this type value must match the search criterion.
- */
-#define	MLNX_UMAP_UARPG_RSRC		0x11
-#define	MLNX_UMAP_BLUEFLAMEPG_RSRC	0x12
-#define	MLNX_UMAP_PID_RSRC		0x22
-#define	MLNX_UMAP_CQMEM_RSRC		0x33
-#define	MLNX_UMAP_QPMEM_RSRC		0x44
-#define	MLNX_UMAP_MRMEM_RSRC		0x55
-#define	MLNX_UMAP_SRQMEM_RSRC		0x66
-#define	MLNX_UMAP_DBRMEM_RSRC		0x77
-#define	MLNX_UMAP_MRMEM_MAHDL		0x88
-#define	MLNX_UMAP_RSRC_TYPE_MASK	0xFF
-#define	MLNX_UMAP_RSRC_TYPE_SHIFT	8
-
-/* umap structures */
-
-typedef struct mlnx_umap_cq_data_out_s {
-	uint32_t	mcq_rev;
-	uint32_t	mcq_cqnum;
-	uint64_t	mcq_mapoffset;
-	uint64_t	mcq_maplen;
-	uint32_t	mcq_numcqe;
-	uint32_t	mcq_cqesz;
-
-	/* Arbel/Hermon doorbell records */
-	uint64_t	mcq_armdbr_mapoffset;
-	uint64_t	mcq_armdbr_maplen;
-	uint64_t	mcq_polldbr_mapoffset;
-	uint64_t	mcq_polldbr_maplen;
-	uint32_t	mcq_armdbr_offset;
-	uint32_t	mcq_polldbr_offset;
-} mlnx_umap_cq_data_out_t;
-
-typedef struct mlnx_umap_qp_data_out_s {
-	uint32_t	mqp_rev;
-	uint32_t	mqp_qpnum;
-	uint64_t	mqp_mapoffset;
-	uint64_t	mqp_maplen;
-
-	uint32_t	mqp_rq_off;
-	uint32_t	mqp_rq_desc_addr;
-	uint32_t	mqp_rq_numwqe;
-	uint32_t	mqp_rq_wqesz;
-
-	uint32_t	mqp_sq_off;
-	uint32_t	mqp_sq_desc_addr;
-	uint32_t	mqp_sq_numwqe;
-	uint32_t	mqp_sq_wqesz;
-
-	/* Arbel/Hermon doorbell records */
-	uint64_t	mqp_sdbr_mapoffset;
-	uint64_t	mqp_sdbr_maplen;
-	uint64_t	mqp_rdbr_mapoffset;
-	uint64_t	mqp_rdbr_maplen;
-	uint32_t	mqp_sdbr_offset;
-	uint32_t	mqp_rdbr_offset;
-
-	/* Hermon send queue headroom, in units of wqes */
-	uint32_t	mqp_sq_headroomwqes;
-	uint32_t	mqp_reserved;
-} mlnx_umap_qp_data_out_t;
-
-typedef struct mlnx_umap_srq_data_out_s {
-	uint32_t	msrq_rev;
-	uint32_t	msrq_srqnum;
-	uint64_t	msrq_mapoffset;
-	uint64_t	msrq_maplen;
-	uint32_t	msrq_desc_addr;
-	uint32_t	msrq_numwqe;
-	uint32_t	msrq_wqesz;
-	uint32_t	msrq_pad1;	/* reserved */
-
-	/* Arbel/Hermon doorbell records */
-	uint64_t	msrq_rdbr_mapoffset;
-	uint64_t	msrq_rdbr_maplen;
-	uint32_t	msrq_rdbr_offset;
-	uint32_t	msrq_reserved;
-} mlnx_umap_srq_data_out_t;
-
-typedef struct mlnx_umap_pd_data_out_s {
-	uint32_t	mpd_pdnum;
-	uint32_t	mpd_rev;
-} mlnx_umap_pd_data_out_t;
-
-/*
- * The following structure is used currently to pass data back to
- * libmlx4 on user allocation context.
- */
-typedef struct mlnx_umap_ucontext_data_out_s {
-	uint32_t	muc_qp_tab_size;
-	uint16_t	muc_bf_reg_size;
-	uint16_t	muc_bf_regs_per_page;
-	uint32_t	muc_rev;
-	uint32_t	muc_reserved;
-} mlnx_umap_ucontext_data_out_t;
-
-/*
- * Information for ibt_ci_data_in() for memory regions.
- *
- * MLNX_UMAP_MMR_DATA_IN_IF_VERSION is the value used in the mmr_rev member.
- * mmr_func is the callback handler.  mmr_arg1 and mmr_arg2 are its arguments.
- */
-#define	MLNX_UMAP_MMR_DATA_IN_IF_VERSION	1
-typedef struct mlnx_umap_mr_data_in_s {
-	uint32_t  mmr_rev;
-	uint32_t  mmr_reserved;
-	void    (*mmr_func)(void *, void *);
-	void    *mmr_arg1;
-	void    *mmr_arg2;
-} mlnx_umap_mr_data_in_t;
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif	/* _SYS_IB_ADAPTERS_MLNX_UMAP_H */
--- a/components/open-fabrics/libmlx4/patches/base.patch	Tue Sep 01 13:30:24 2015 -0700
+++ b/components/open-fabrics/libmlx4/patches/base.patch	Wed Sep 02 11:01:59 2015 -0700
@@ -16,22 +16,18 @@
 diff -r -u /tmp/839450/libmlx4-1.0.1/src/mlx4-abi.h libmlx4-1.0.1/src/mlx4-abi.h
 --- /tmp/839450/libmlx4-1.0.1/src/mlx4-abi.h	Thu Mar 10 04:48:34 2011
 +++ libmlx4-1.0.1/src/mlx4-abi.h	Fri Feb 11 03:49:51 2011
[email protected]@ -35,6 +35,14 @@
[email protected]@ -35,6 +35,10 @@
  
  #include <infiniband/kern-abi.h>
  
 +#if defined(__SVR4) && defined(__sun)
-+/* Restore once build systems are in sync
-+   See 21170572 - libmlx4 should be built with the system mlnx_umap.h
 +#include <sys/ib/adapters/mlnx_umap.h>   / * Opaque CI data out definitions * /
-+*/
-+#include "mlnx_umap.h"   /* Opaque CI data out definitions */
 +#endif
 +
  #define MLX4_UVERBS_MIN_ABI_VERSION	2
  #define MLX4_UVERBS_MAX_ABI_VERSION	3
  
[email protected]@ -43,6 +51,10 @@
[email protected]@ -43,6 +47,10 @@
  	__u32				qp_tab_size;
  	__u16				bf_reg_size;
  	__u16				bf_regs_per_page;
@@ -42,7 +38,7 @@
  };
  
  struct mlx4_alloc_pd_resp {
[email protected]@ -51,23 +63,45 @@
[email protected]@ -51,23 +59,45 @@
  	__u32				reserved;
  };
  
@@ -88,7 +84,7 @@
  #ifdef HAVE_IBV_XRC_OPS
  struct mlx4_create_xrc_srq {
  	struct ibv_create_xrc_srq	ibv_cmd;
[email protected]@ -78,18 +112,25 @@
[email protected]@ -78,18 +108,25 @@
  
  struct mlx4_create_srq {
  	struct ibv_create_srq		ibv_cmd;
@@ -114,7 +110,7 @@
  	__u64				buf_addr;
  	__u64				db_addr;
  	__u8				log_sq_bb_count;
[email protected]@ -96,8 +137,16 @@
[email protected]@ -96,8 +133,16 @@
  	__u8				log_sq_stride;
  	__u8				sq_no_prefetch;	/* was reserved in ABI 2 */
  	__u8				reserved[5];