diff options
author | Linus Torvalds <torvalds@linux-foundation.org> | 2014-08-14 13:09:05 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2014-08-14 13:09:05 -0400 |
commit | e3b1fd56f175526db42ae94c457f29c2fa810aca (patch) | |
tree | 3e2948ca44fb7fd5348244c2a83eef864b3110b4 /include | |
parent | 0680eb1f485ba5aac2ee02c9f0622239c9a4b16c (diff) | |
parent | d087f6ad724dfbcdc3df8e0191b80d9d8d839e71 (diff) |
Merge tag 'rdma-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/roland/infiniband
Pull infiniband/rdma updates from Roland Dreier:
"Main set of InfiniBand/RDMA updates for 3.17 merge window:
- MR reregistration support
- MAD support for RMPP in userspace
- iSER and SRP initiator updates
- ocrdma hardware driver updates
- other fixes..."
* tag 'rdma-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/roland/infiniband: (52 commits)
IB/srp: Fix return value check in srp_init_module()
RDMA/ocrdma: report asic-id in query device
RDMA/ocrdma: Update sli data structure for endianness
RDMA/ocrdma: Obtain SL from device structure
RDMA/uapi: Include socket.h in rdma_user_cm.h
IB/srpt: Handle GID change events
IB/mlx5: Use ARRAY_SIZE instead of sizeof/sizeof[0]
IB/mlx4: Use ARRAY_SIZE instead of sizeof/sizeof[0]
RDMA/amso1100: Check for integer overflow in c2_alloc_cq_buf()
IPoIB: Remove unnecessary test for NULL before debugfs_remove()
IB/mad: Add user space RMPP support
IB/mad: add new ioctl to ABI to support new registration options
IB/mad: Add dev_notice messages for various umad/mad registration failures
IB/mad: Update module to [pr|dev]_* style print messages
IB/ipoib: Avoid multicast join attempts with invalid P_key
IB/umad: Update module to [pr|dev]_* style print messages
IB/ipoib: Avoid flushing the workqueue from worker context
IB/ipoib: Use P_Key change event instead of P_Key polling mechanism
IB/ipath: Add P_Key change event support
mlx4_core: Add support for secure-host and SMP firewall
...
Diffstat (limited to 'include')
-rw-r--r-- | include/linux/mlx4/cmd.h | 7 | ||||
-rw-r--r-- | include/linux/mlx4/device.h | 17 | ||||
-rw-r--r-- | include/rdma/ib_mad.h | 18 | ||||
-rw-r--r-- | include/rdma/ib_verbs.h | 10 | ||||
-rw-r--r-- | include/uapi/rdma/ib_user_mad.h | 42 | ||||
-rw-r--r-- | include/uapi/rdma/ib_user_verbs.h | 16 | ||||
-rw-r--r-- | include/uapi/rdma/rdma_user_cm.h | 1 |
7 files changed, 109 insertions, 2 deletions
diff --git a/include/linux/mlx4/cmd.h b/include/linux/mlx4/cmd.h index c8450366c130..379c02648ab3 100644 --- a/include/linux/mlx4/cmd.h +++ b/include/linux/mlx4/cmd.h | |||
@@ -116,6 +116,7 @@ enum { | |||
116 | /* special QP and management commands */ | 116 | /* special QP and management commands */ |
117 | MLX4_CMD_CONF_SPECIAL_QP = 0x23, | 117 | MLX4_CMD_CONF_SPECIAL_QP = 0x23, |
118 | MLX4_CMD_MAD_IFC = 0x24, | 118 | MLX4_CMD_MAD_IFC = 0x24, |
119 | MLX4_CMD_MAD_DEMUX = 0x203, | ||
119 | 120 | ||
120 | /* multicast commands */ | 121 | /* multicast commands */ |
121 | MLX4_CMD_READ_MCG = 0x25, | 122 | MLX4_CMD_READ_MCG = 0x25, |
@@ -186,6 +187,12 @@ enum { | |||
186 | }; | 187 | }; |
187 | 188 | ||
188 | enum { | 189 | enum { |
190 | MLX4_CMD_MAD_DEMUX_CONFIG = 0, | ||
191 | MLX4_CMD_MAD_DEMUX_QUERY_STATE = 1, | ||
192 | MLX4_CMD_MAD_DEMUX_QUERY_RESTR = 2, /* Query mad demux restrictions */ | ||
193 | }; | ||
194 | |||
195 | enum { | ||
189 | MLX4_CMD_WRAPPED, | 196 | MLX4_CMD_WRAPPED, |
190 | MLX4_CMD_NATIVE | 197 | MLX4_CMD_NATIVE |
191 | }; | 198 | }; |
diff --git a/include/linux/mlx4/device.h b/include/linux/mlx4/device.h index e15b1544ea83..071f6b234604 100644 --- a/include/linux/mlx4/device.h +++ b/include/linux/mlx4/device.h | |||
@@ -183,6 +183,7 @@ enum { | |||
183 | MLX4_DEV_CAP_FLAG2_UPDATE_QP = 1LL << 8, | 183 | MLX4_DEV_CAP_FLAG2_UPDATE_QP = 1LL << 8, |
184 | MLX4_DEV_CAP_FLAG2_DMFS_IPOIB = 1LL << 9, | 184 | MLX4_DEV_CAP_FLAG2_DMFS_IPOIB = 1LL << 9, |
185 | MLX4_DEV_CAP_FLAG2_VXLAN_OFFLOADS = 1LL << 10, | 185 | MLX4_DEV_CAP_FLAG2_VXLAN_OFFLOADS = 1LL << 10, |
186 | MLX4_DEV_CAP_FLAG2_MAD_DEMUX = 1LL << 11, | ||
186 | }; | 187 | }; |
187 | 188 | ||
188 | enum { | 189 | enum { |
@@ -273,6 +274,7 @@ enum { | |||
273 | MLX4_PERM_REMOTE_WRITE = 1 << 13, | 274 | MLX4_PERM_REMOTE_WRITE = 1 << 13, |
274 | MLX4_PERM_ATOMIC = 1 << 14, | 275 | MLX4_PERM_ATOMIC = 1 << 14, |
275 | MLX4_PERM_BIND_MW = 1 << 15, | 276 | MLX4_PERM_BIND_MW = 1 << 15, |
277 | MLX4_PERM_MASK = 0xFC00 | ||
276 | }; | 278 | }; |
277 | 279 | ||
278 | enum { | 280 | enum { |
@@ -1254,6 +1256,21 @@ int mlx4_vf_smi_enabled(struct mlx4_dev *dev, int slave, int port); | |||
1254 | int mlx4_vf_get_enable_smi_admin(struct mlx4_dev *dev, int slave, int port); | 1256 | int mlx4_vf_get_enable_smi_admin(struct mlx4_dev *dev, int slave, int port); |
1255 | int mlx4_vf_set_enable_smi_admin(struct mlx4_dev *dev, int slave, int port, | 1257 | int mlx4_vf_set_enable_smi_admin(struct mlx4_dev *dev, int slave, int port, |
1256 | int enable); | 1258 | int enable); |
1259 | int mlx4_mr_hw_get_mpt(struct mlx4_dev *dev, struct mlx4_mr *mmr, | ||
1260 | struct mlx4_mpt_entry ***mpt_entry); | ||
1261 | int mlx4_mr_hw_write_mpt(struct mlx4_dev *dev, struct mlx4_mr *mmr, | ||
1262 | struct mlx4_mpt_entry **mpt_entry); | ||
1263 | int mlx4_mr_hw_change_pd(struct mlx4_dev *dev, struct mlx4_mpt_entry *mpt_entry, | ||
1264 | u32 pdn); | ||
1265 | int mlx4_mr_hw_change_access(struct mlx4_dev *dev, | ||
1266 | struct mlx4_mpt_entry *mpt_entry, | ||
1267 | u32 access); | ||
1268 | void mlx4_mr_hw_put_mpt(struct mlx4_dev *dev, | ||
1269 | struct mlx4_mpt_entry **mpt_entry); | ||
1270 | void mlx4_mr_rereg_mem_cleanup(struct mlx4_dev *dev, struct mlx4_mr *mr); | ||
1271 | int mlx4_mr_rereg_mem_write(struct mlx4_dev *dev, struct mlx4_mr *mr, | ||
1272 | u64 iova, u64 size, int npages, | ||
1273 | int page_shift, struct mlx4_mpt_entry *mpt_entry); | ||
1257 | 1274 | ||
1258 | /* Returns true if running in low memory profile (kdump kernel) */ | 1275 | /* Returns true if running in low memory profile (kdump kernel) */ |
1259 | static inline bool mlx4_low_memory_profile(void) | 1276 | static inline bool mlx4_low_memory_profile(void) |
diff --git a/include/rdma/ib_mad.h b/include/rdma/ib_mad.h index 3d81b90cc315..9bb99e983f58 100644 --- a/include/rdma/ib_mad.h +++ b/include/rdma/ib_mad.h | |||
@@ -40,6 +40,7 @@ | |||
40 | #include <linux/list.h> | 40 | #include <linux/list.h> |
41 | 41 | ||
42 | #include <rdma/ib_verbs.h> | 42 | #include <rdma/ib_verbs.h> |
43 | #include <uapi/rdma/ib_user_mad.h> | ||
43 | 44 | ||
44 | /* Management base version */ | 45 | /* Management base version */ |
45 | #define IB_MGMT_BASE_VERSION 1 | 46 | #define IB_MGMT_BASE_VERSION 1 |
@@ -355,9 +356,13 @@ typedef void (*ib_mad_recv_handler)(struct ib_mad_agent *mad_agent, | |||
355 | * @hi_tid: Access layer assigned transaction ID for this client. | 356 | * @hi_tid: Access layer assigned transaction ID for this client. |
356 | * Unsolicited MADs sent by this client will have the upper 32-bits | 357 | * Unsolicited MADs sent by this client will have the upper 32-bits |
357 | * of their TID set to this value. | 358 | * of their TID set to this value. |
359 | * @flags: registration flags | ||
358 | * @port_num: Port number on which QP is registered | 360 | * @port_num: Port number on which QP is registered |
359 | * @rmpp_version: If set, indicates the RMPP version used by this agent. | 361 | * @rmpp_version: If set, indicates the RMPP version used by this agent. |
360 | */ | 362 | */ |
363 | enum { | ||
364 | IB_MAD_USER_RMPP = IB_USER_MAD_USER_RMPP, | ||
365 | }; | ||
361 | struct ib_mad_agent { | 366 | struct ib_mad_agent { |
362 | struct ib_device *device; | 367 | struct ib_device *device; |
363 | struct ib_qp *qp; | 368 | struct ib_qp *qp; |
@@ -367,6 +372,7 @@ struct ib_mad_agent { | |||
367 | ib_mad_snoop_handler snoop_handler; | 372 | ib_mad_snoop_handler snoop_handler; |
368 | void *context; | 373 | void *context; |
369 | u32 hi_tid; | 374 | u32 hi_tid; |
375 | u32 flags; | ||
370 | u8 port_num; | 376 | u8 port_num; |
371 | u8 rmpp_version; | 377 | u8 rmpp_version; |
372 | }; | 378 | }; |
@@ -426,6 +432,7 @@ struct ib_mad_recv_wc { | |||
426 | * in the range from 0x30 to 0x4f. Otherwise not used. | 432 | * in the range from 0x30 to 0x4f. Otherwise not used. |
427 | * @method_mask: The caller will receive unsolicited MADs for any method | 433 | * @method_mask: The caller will receive unsolicited MADs for any method |
428 | * where @method_mask = 1. | 434 | * where @method_mask = 1. |
435 | * | ||
429 | */ | 436 | */ |
430 | struct ib_mad_reg_req { | 437 | struct ib_mad_reg_req { |
431 | u8 mgmt_class; | 438 | u8 mgmt_class; |
@@ -451,6 +458,7 @@ struct ib_mad_reg_req { | |||
451 | * @recv_handler: The completion callback routine invoked for a received | 458 | * @recv_handler: The completion callback routine invoked for a received |
452 | * MAD. | 459 | * MAD. |
453 | * @context: User specified context associated with the registration. | 460 | * @context: User specified context associated with the registration. |
461 | * @registration_flags: Registration flags to set for this agent | ||
454 | */ | 462 | */ |
455 | struct ib_mad_agent *ib_register_mad_agent(struct ib_device *device, | 463 | struct ib_mad_agent *ib_register_mad_agent(struct ib_device *device, |
456 | u8 port_num, | 464 | u8 port_num, |
@@ -459,7 +467,8 @@ struct ib_mad_agent *ib_register_mad_agent(struct ib_device *device, | |||
459 | u8 rmpp_version, | 467 | u8 rmpp_version, |
460 | ib_mad_send_handler send_handler, | 468 | ib_mad_send_handler send_handler, |
461 | ib_mad_recv_handler recv_handler, | 469 | ib_mad_recv_handler recv_handler, |
462 | void *context); | 470 | void *context, |
471 | u32 registration_flags); | ||
463 | 472 | ||
464 | enum ib_mad_snoop_flags { | 473 | enum ib_mad_snoop_flags { |
465 | /*IB_MAD_SNOOP_POSTED_SENDS = 1,*/ | 474 | /*IB_MAD_SNOOP_POSTED_SENDS = 1,*/ |
@@ -661,4 +670,11 @@ void *ib_get_rmpp_segment(struct ib_mad_send_buf *send_buf, int seg_num); | |||
661 | */ | 670 | */ |
662 | void ib_free_send_mad(struct ib_mad_send_buf *send_buf); | 671 | void ib_free_send_mad(struct ib_mad_send_buf *send_buf); |
663 | 672 | ||
673 | /** | ||
674 | * ib_mad_kernel_rmpp_agent - Returns if the agent is performing RMPP. | ||
675 | * @agent: the agent in question | ||
676 | * @return: true if agent is performing rmpp, false otherwise. | ||
677 | */ | ||
678 | int ib_mad_kernel_rmpp_agent(struct ib_mad_agent *agent); | ||
679 | |||
664 | #endif /* IB_MAD_H */ | 680 | #endif /* IB_MAD_H */ |
diff --git a/include/rdma/ib_verbs.h b/include/rdma/ib_verbs.h index 7ccef342f724..ed44cc07a7b3 100644 --- a/include/rdma/ib_verbs.h +++ b/include/rdma/ib_verbs.h | |||
@@ -1097,7 +1097,8 @@ struct ib_mr_attr { | |||
1097 | enum ib_mr_rereg_flags { | 1097 | enum ib_mr_rereg_flags { |
1098 | IB_MR_REREG_TRANS = 1, | 1098 | IB_MR_REREG_TRANS = 1, |
1099 | IB_MR_REREG_PD = (1<<1), | 1099 | IB_MR_REREG_PD = (1<<1), |
1100 | IB_MR_REREG_ACCESS = (1<<2) | 1100 | IB_MR_REREG_ACCESS = (1<<2), |
1101 | IB_MR_REREG_SUPPORTED = ((IB_MR_REREG_ACCESS << 1) - 1) | ||
1101 | }; | 1102 | }; |
1102 | 1103 | ||
1103 | /** | 1104 | /** |
@@ -1547,6 +1548,13 @@ struct ib_device { | |||
1547 | u64 virt_addr, | 1548 | u64 virt_addr, |
1548 | int mr_access_flags, | 1549 | int mr_access_flags, |
1549 | struct ib_udata *udata); | 1550 | struct ib_udata *udata); |
1551 | int (*rereg_user_mr)(struct ib_mr *mr, | ||
1552 | int flags, | ||
1553 | u64 start, u64 length, | ||
1554 | u64 virt_addr, | ||
1555 | int mr_access_flags, | ||
1556 | struct ib_pd *pd, | ||
1557 | struct ib_udata *udata); | ||
1550 | int (*query_mr)(struct ib_mr *mr, | 1558 | int (*query_mr)(struct ib_mr *mr, |
1551 | struct ib_mr_attr *mr_attr); | 1559 | struct ib_mr_attr *mr_attr); |
1552 | int (*dereg_mr)(struct ib_mr *mr); | 1560 | int (*dereg_mr)(struct ib_mr *mr); |
diff --git a/include/uapi/rdma/ib_user_mad.h b/include/uapi/rdma/ib_user_mad.h index d6fce1cbdb90..09f809f323ea 100644 --- a/include/uapi/rdma/ib_user_mad.h +++ b/include/uapi/rdma/ib_user_mad.h | |||
@@ -191,6 +191,45 @@ struct ib_user_mad_reg_req { | |||
191 | __u8 rmpp_version; | 191 | __u8 rmpp_version; |
192 | }; | 192 | }; |
193 | 193 | ||
194 | /** | ||
195 | * ib_user_mad_reg_req2 - MAD registration request | ||
196 | * | ||
197 | * @id - Set by the _kernel_; used by userspace to identify the | ||
198 | * registered agent in future requests. | ||
199 | * @qpn - Queue pair number; must be 0 or 1. | ||
200 | * @mgmt_class - Indicates which management class of MADs should be | ||
201 | * receive by the caller. This field is only required if | ||
202 | * the user wishes to receive unsolicited MADs, otherwise | ||
203 | * it should be 0. | ||
204 | * @mgmt_class_version - Indicates which version of MADs for the given | ||
205 | * management class to receive. | ||
206 | * @res - Ignored. | ||
207 | * @flags - additional registration flags; Must be in the set of | ||
208 | * flags defined in IB_USER_MAD_REG_FLAGS_CAP | ||
209 | * @method_mask - The caller wishes to receive unsolicited MADs for the | ||
210 | * methods whose bit(s) is(are) set. | ||
211 | * @oui - Indicates IEEE OUI to use when mgmt_class is a vendor | ||
212 | * class in the range from 0x30 to 0x4f. Otherwise not | ||
213 | * used. | ||
214 | * @rmpp_version - If set, indicates the RMPP version to use. | ||
215 | */ | ||
216 | enum { | ||
217 | IB_USER_MAD_USER_RMPP = (1 << 0), | ||
218 | }; | ||
219 | #define IB_USER_MAD_REG_FLAGS_CAP (IB_USER_MAD_USER_RMPP) | ||
220 | struct ib_user_mad_reg_req2 { | ||
221 | __u32 id; | ||
222 | __u32 qpn; | ||
223 | __u8 mgmt_class; | ||
224 | __u8 mgmt_class_version; | ||
225 | __u16 res; | ||
226 | __u32 flags; | ||
227 | __u64 method_mask[2]; | ||
228 | __u32 oui; | ||
229 | __u8 rmpp_version; | ||
230 | __u8 reserved[3]; | ||
231 | }; | ||
232 | |||
194 | #define IB_IOCTL_MAGIC 0x1b | 233 | #define IB_IOCTL_MAGIC 0x1b |
195 | 234 | ||
196 | #define IB_USER_MAD_REGISTER_AGENT _IOWR(IB_IOCTL_MAGIC, 1, \ | 235 | #define IB_USER_MAD_REGISTER_AGENT _IOWR(IB_IOCTL_MAGIC, 1, \ |
@@ -200,4 +239,7 @@ struct ib_user_mad_reg_req { | |||
200 | 239 | ||
201 | #define IB_USER_MAD_ENABLE_PKEY _IO(IB_IOCTL_MAGIC, 3) | 240 | #define IB_USER_MAD_ENABLE_PKEY _IO(IB_IOCTL_MAGIC, 3) |
202 | 241 | ||
242 | #define IB_USER_MAD_REGISTER_AGENT2 _IOWR(IB_IOCTL_MAGIC, 4, \ | ||
243 | struct ib_user_mad_reg_req2) | ||
244 | |||
203 | #endif /* IB_USER_MAD_H */ | 245 | #endif /* IB_USER_MAD_H */ |
diff --git a/include/uapi/rdma/ib_user_verbs.h b/include/uapi/rdma/ib_user_verbs.h index cbfdd4ca9510..26daf55ff76e 100644 --- a/include/uapi/rdma/ib_user_verbs.h +++ b/include/uapi/rdma/ib_user_verbs.h | |||
@@ -276,6 +276,22 @@ struct ib_uverbs_reg_mr_resp { | |||
276 | __u32 rkey; | 276 | __u32 rkey; |
277 | }; | 277 | }; |
278 | 278 | ||
279 | struct ib_uverbs_rereg_mr { | ||
280 | __u64 response; | ||
281 | __u32 mr_handle; | ||
282 | __u32 flags; | ||
283 | __u64 start; | ||
284 | __u64 length; | ||
285 | __u64 hca_va; | ||
286 | __u32 pd_handle; | ||
287 | __u32 access_flags; | ||
288 | }; | ||
289 | |||
290 | struct ib_uverbs_rereg_mr_resp { | ||
291 | __u32 lkey; | ||
292 | __u32 rkey; | ||
293 | }; | ||
294 | |||
279 | struct ib_uverbs_dereg_mr { | 295 | struct ib_uverbs_dereg_mr { |
280 | __u32 mr_handle; | 296 | __u32 mr_handle; |
281 | }; | 297 | }; |
diff --git a/include/uapi/rdma/rdma_user_cm.h b/include/uapi/rdma/rdma_user_cm.h index 99b80abf360a..3066718eb120 100644 --- a/include/uapi/rdma/rdma_user_cm.h +++ b/include/uapi/rdma/rdma_user_cm.h | |||
@@ -34,6 +34,7 @@ | |||
34 | #define RDMA_USER_CM_H | 34 | #define RDMA_USER_CM_H |
35 | 35 | ||
36 | #include <linux/types.h> | 36 | #include <linux/types.h> |
37 | #include <linux/socket.h> | ||
37 | #include <linux/in6.h> | 38 | #include <linux/in6.h> |
38 | #include <rdma/ib_user_verbs.h> | 39 | #include <rdma/ib_user_verbs.h> |
39 | #include <rdma/ib_user_sa.h> | 40 | #include <rdma/ib_user_sa.h> |