diff options
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 | |||
| 8791 | S: Supported | 8791 | S: Supported |
| 8792 | F: drivers/net/ethernet/emulex/benet/ | 8792 | F: drivers/net/ethernet/emulex/benet/ |
| 8793 | 8793 | ||
| 8794 | EMULEX ONECONNECT ROCE DRIVER | ||
| 8795 | M: Selvin Xavier <selvin.xavier@emulex.com> | ||
| 8796 | M: Devesh Sharma <devesh.sharma@emulex.com> | ||
| 8797 | M: Mitesh Ahuja <mitesh.ahuja@emulex.com> | ||
| 8798 | L: linux-rdma@vger.kernel.org | ||
| 8799 | W: http://www.emulex.com | ||
| 8800 | S: Supported | ||
| 8801 | F: drivers/infiniband/hw/ocrdma/ | ||
| 8802 | |||
| 8794 | SFC NETWORK DRIVER | 8803 | SFC NETWORK DRIVER |
| 8795 | M: Solarflare linux maintainers <linux-net-drivers@solarflare.com> | 8804 | M: Solarflare linux maintainers <linux-net-drivers@solarflare.com> |
| 8796 | M: Shradha Shah <sshah@solarflare.com> | 8805 | M: 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 | ||
| 63 | struct mlx4_next_alias_guid_work { | 65 | struct 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 | ||
| 72 | static int get_low_record_time_index(struct mlx4_ib_dev *dev, u8 port, | ||
| 73 | int *resched_delay_sec); | ||
| 69 | 74 | ||
| 70 | void mlx4_ib_update_cache_on_guid_change(struct mlx4_ib_dev *dev, int block_num, | 75 | void 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 | ||
| 126 | void 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; | ||
