aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Documentation/filesystems/nfs/nfs-rdma.txt9
-rw-r--r--MAINTAINERS9
-rw-r--r--drivers/infiniband/core/uverbs_main.c22
-rw-r--r--drivers/infiniband/hw/mlx4/alias_GUID.c457
-rw-r--r--drivers/infiniband/hw/mlx4/mad.c9
-rw-r--r--drivers/infiniband/hw/mlx4/main.c26
-rw-r--r--drivers/infiniband/hw/mlx4/mlx4_ib.h14
-rw-r--r--drivers/infiniband/hw/mlx4/qp.c7
-rw-r--r--drivers/infiniband/hw/mlx4/sysfs.c44
-rw-r--r--drivers/infiniband/ulp/ipoib/ipoib.h31
-rw-r--r--drivers/infiniband/ulp/ipoib/ipoib_cm.c18
-rw-r--r--drivers/infiniband/ulp/ipoib/ipoib_ib.c195
-rw-r--r--drivers/infiniband/ulp/ipoib/ipoib_main.c73
-rw-r--r--drivers/infiniband/ulp/ipoib/ipoib_multicast.c520
-rw-r--r--drivers/infiniband/ulp/ipoib/ipoib_verbs.c44
-rw-r--r--drivers/infiniband/ulp/iser/iscsi_iser.h66
-rw-r--r--drivers/infiniband/ulp/iser/iser_initiator.c66
-rw-r--r--drivers/infiniband/ulp/iser/iser_memory.c523
-rw-r--r--drivers/infiniband/ulp/iser/iser_verbs.c220
-rw-r--r--drivers/infiniband/ulp/srp/ib_srp.c9
-rw-r--r--drivers/infiniband/ulp/srpt/ib_srpt.c188
-rw-r--r--drivers/net/ethernet/mellanox/mlx4/cmd.c42
-rw-r--r--drivers/net/ethernet/mellanox/mlx4/eq.c2
-rw-r--r--drivers/net/ethernet/mellanox/mlx4/main.c31
-rw-r--r--drivers/net/ethernet/mellanox/mlx4/mlx4.h1
-rw-r--r--drivers/net/ethernet/mellanox/mlx5/core/pagealloc.c10
-rw-r--r--include/linux/mlx4/device.h4
27 files changed, 1508 insertions, 1132 deletions
diff --git a/Documentation/filesystems/nfs/nfs-rdma.txt b/Documentation/filesystems/nfs/nfs-rdma.txt
index 724043858b08..95c13aa575ff 100644
--- a/Documentation/filesystems/nfs/nfs-rdma.txt
+++ b/Documentation/filesystems/nfs/nfs-rdma.txt
@@ -187,8 +187,10 @@ Check RDMA and NFS Setup
187 To further test the InfiniBand software stack, use IPoIB (this 187 To further test the InfiniBand software stack, use IPoIB (this
188 assumes you have two IB hosts named host1 and host2): 188 assumes you have two IB hosts named host1 and host2):
189 189
190 host1$ ifconfig ib0 a.b.c.x 190 host1$ ip link set dev ib0 up
191 host2$ ifconfig ib0 a.b.c.y 191 host1$ ip address add dev ib0 a.b.c.x
192 host2$ ip link set dev ib0 up
193 host2$ ip address add dev ib0 a.b.c.y
192 host1$ ping a.b.c.y 194 host1$ ping a.b.c.y
193 host2$ ping a.b.c.x 195 host2$ ping a.b.c.x
194 196
@@ -229,7 +231,8 @@ NFS/RDMA Setup
229 231
230 $ modprobe ib_mthca 232 $ modprobe ib_mthca
231 $ modprobe ib_ipoib 233 $ modprobe ib_ipoib
232 $ ifconfig ib0 a.b.c.d 234 $ ip li set dev ib0 up
235 $ ip addr add dev ib0 a.b.c.d
233 236
234 NOTE: use unique addresses for the client and server 237 NOTE: use unique addresses for the client and server
235 238
diff --git a/MAINTAINERS b/MAINTAINERS
index c72a7baec55c..1b9e38d02318 100644
--- a/MAINTAINERS
+++ b/MAINTAINERS
@@ -8791,6 +8791,15 @@ W: http://www.emulex.com
8791S: Supported 8791S: Supported
8792F: drivers/net/ethernet/emulex/benet/ 8792F: drivers/net/ethernet/emulex/benet/
8793 8793
8794EMULEX ONECONNECT ROCE DRIVER
8795M: Selvin Xavier <selvin.xavier@emulex.com>
8796M: Devesh Sharma <devesh.sharma@emulex.com>
8797M: Mitesh Ahuja <mitesh.ahuja@emulex.com>
8798L: linux-rdma@vger.kernel.org
8799W: http://www.emulex.com
8800S: Supported
8801F: drivers/infiniband/hw/ocrdma/
8802
8794SFC NETWORK DRIVER 8803SFC NETWORK DRIVER
8795M: Solarflare linux maintainers <linux-net-drivers@solarflare.com> 8804M: Solarflare linux maintainers <linux-net-drivers@solarflare.com>
8796M: Shradha Shah <sshah@solarflare.com> 8805M: Shradha Shah <sshah@solarflare.com>
diff --git a/drivers/infiniband/core/uverbs_main.c b/drivers/infiniband/core/uverbs_main.c
index 259dcc7779f5..88cce9bb72fe 100644
--- a/drivers/infiniband/core/uverbs_main.c
+++ b/drivers/infiniband/core/uverbs_main.c
@@ -246,6 +246,17 @@ static int ib_uverbs_cleanup_ucontext(struct ib_uverbs_file *file,
246 kfree(uqp); 246 kfree(uqp);
247 } 247 }
248 248
249 list_for_each_entry_safe(uobj, tmp, &context->srq_list, list) {
250 struct ib_srq *srq = uobj->object;
251 struct ib_uevent_object *uevent =
252 container_of(uobj, struct ib_uevent_object, uobject);
253
254 idr_remove_uobj(&ib_uverbs_srq_idr, uobj);
255 ib_destroy_srq(srq);
256 ib_uverbs_release_uevent(file, uevent);
257 kfree(uevent);
258 }
259
249 list_for_each_entry_safe(uobj, tmp, &context->cq_list, list) { 260 list_for_each_entry_safe(uobj, tmp, &context->cq_list, list) {
250 struct ib_cq *cq = uobj->object; 261 struct ib_cq *cq = uobj->object;
251 struct ib_uverbs_event_file *ev_file = cq->cq_context; 262 struct ib_uverbs_event_file *ev_file = cq->cq_context;
@@ -258,17 +269,6 @@ static int ib_uverbs_cleanup_ucontext(struct ib_uverbs_file *file,
258 kfree(ucq); 269 kfree(ucq);
259 } 270 }
260 271
261 list_for_each_entry_safe(uobj, tmp, &context->srq_list, list) {
262 struct ib_srq *srq = uobj->object;
263 struct ib_uevent_object *uevent =
264 container_of(uobj, struct ib_uevent_object, uobject);
265
266 idr_remove_uobj(&ib_uverbs_srq_idr, uobj);
267 ib_destroy_srq(srq);
268 ib_uverbs_release_uevent(file, uevent);
269 kfree(uevent);
270 }
271
272 list_for_each_entry_safe(uobj, tmp, &context->mr_list, list) { 272 list_for_each_entry_safe(uobj, tmp, &context->mr_list, list) {
273 struct ib_mr *mr = uobj->object; 273 struct ib_mr *mr = uobj->object;
274 274
diff --git a/drivers/infiniband/hw/mlx4/alias_GUID.c b/drivers/infiniband/hw/mlx4/alias_GUID.c
index a31e031afd87..0f00204d2ece 100644
--- a/drivers/infiniband/hw/mlx4/alias_GUID.c
+++ b/drivers/infiniband/hw/mlx4/alias_GUID.c
@@ -58,14 +58,19 @@ struct mlx4_alias_guid_work_context {
58 int query_id; 58 int query_id;
59 struct list_head list; 59 struct list_head list;
60 int block_num; 60 int block_num;
61 ib_sa_comp_mask guid_indexes;
62 u8 method;
61}; 63};
62 64
63struct mlx4_next_alias_guid_work { 65struct mlx4_next_alias_guid_work {
64 u8 port; 66 u8 port;
65 u8 block_num; 67 u8 block_num;
68 u8 method;
66 struct mlx4_sriov_alias_guid_info_rec_det rec_det; 69 struct mlx4_sriov_alias_guid_info_rec_det rec_det;
67}; 70};
68 71
72static int get_low_record_time_index(struct mlx4_ib_dev *dev, u8 port,
73 int *resched_delay_sec);
69 74
70void mlx4_ib_update_cache_on_guid_change(struct mlx4_ib_dev *dev, int block_num, 75void mlx4_ib_update_cache_on_guid_change(struct mlx4_ib_dev *dev, int block_num,
71 u8 port_num, u8 *p_data) 76 u8 port_num, u8 *p_data)
@@ -118,6 +123,57 @@ ib_sa_comp_mask mlx4_ib_get_aguid_comp_mask_from_ix(int index)
118 return IB_SA_COMP_MASK(4 + index); 123 return IB_SA_COMP_MASK(4 + index);
119} 124}
120 125
126void mlx4_ib_slave_alias_guid_event(struct mlx4_ib_dev *dev, int slave,
127 int port, int slave_init)
128{
129 __be64 curr_guid, required_guid;
130 int record_num = slave / 8;
131 int index = slave % 8;
132 int port_index = port - 1;
133 unsigned long flags;
134 int do_work = 0;
135
136 spin_lock_irqsave(&dev->sriov.alias_guid.ag_work_lock, flags);
137 if (dev->sriov.alias_guid.ports_guid[port_index].state_flags &
138 GUID_STATE_NEED_PORT_INIT)
139 goto unlock;
140 if (!slave_init) {
141 curr_guid = *(__be64 *)&dev->sriov.
142 alias_guid.ports_guid[port_index].
143 all_rec_per_port[record_num].
144 all_recs[GUID_REC_SIZE * index];
145 if (curr_guid == cpu_to_be64(MLX4_GUID_FOR_DELETE_VAL) ||
146 !curr_guid)
147 goto unlock;