Skip to content

Commit d109d83

Browse files
committed
Merge tag 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/dledford/rdma
Pull rdma fixes from Doug Ledford: "This is a pretty small pull request. Only 6 patches in total. There are no outstanding -rc patches on the mailing list after this pull request, so only if some new issues are discovered in the remainder of the rc cycles will you hear from me again. Summary: - a fix for iwpm netlink usage - a fix for error unwinding in mlx5 - two fixes to vlan handling in qedr - a couple small i40iw fixes" * tag 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/dledford/rdma: i40iw: Fix port number for query QP i40iw: Add missing memory barriers RDMA/qedr: Parse vlan priority as sl RDMA/qedr: Parse VLAN ID correctly and ignore the value of zero IB/mlx5: Fix label order in error path handling RDMA/iwpm: Properly mark end of NL messages
2 parents bf2db0b + 789f903 commit d109d83

File tree

9 files changed

+34
-14
lines changed

9 files changed

+34
-14
lines changed

drivers/infiniband/core/iwpm_msg.c

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -100,6 +100,8 @@ int iwpm_register_pid(struct iwpm_dev_data *pm_msg, u8 nl_client)
100100
if (ret)
101101
goto pid_query_error;
102102

103+
nlmsg_end(skb, nlh);
104+
103105
pr_debug("%s: Multicasting a nlmsg (dev = %s ifname = %s iwpm = %s)\n",
104106
__func__, pm_msg->dev_name, pm_msg->if_name, iwpm_ulib_name);
105107

@@ -170,6 +172,8 @@ int iwpm_add_mapping(struct iwpm_sa_data *pm_msg, u8 nl_client)
170172
&pm_msg->loc_addr, IWPM_NLA_MANAGE_ADDR);
171173
if (ret)
172174
goto add_mapping_error;
175+
176+
nlmsg_end(skb, nlh);
173177
nlmsg_request->req_buffer = pm_msg;
174178

175179
ret = rdma_nl_unicast_wait(skb, iwpm_user_pid);
@@ -246,6 +250,8 @@ int iwpm_add_and_query_mapping(struct iwpm_sa_data *pm_msg, u8 nl_client)
246250
&pm_msg->rem_addr, IWPM_NLA_QUERY_REMOTE_ADDR);
247251
if (ret)
248252
goto query_mapping_error;
253+
254+
nlmsg_end(skb, nlh);
249255
nlmsg_request->req_buffer = pm_msg;
250256

251257
ret = rdma_nl_unicast_wait(skb, iwpm_user_pid);
@@ -308,6 +314,8 @@ int iwpm_remove_mapping(struct sockaddr_storage *local_addr, u8 nl_client)
308314
if (ret)
309315
goto remove_mapping_error;
310316

317+
nlmsg_end(skb, nlh);
318+
311319
ret = rdma_nl_unicast_wait(skb, iwpm_user_pid);
312320
if (ret) {
313321
skb = NULL; /* skb is freed in the netlink send-op handling */

drivers/infiniband/core/iwpm_util.c

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -597,6 +597,9 @@ static int send_mapinfo_num(u32 mapping_num, u8 nl_client, int iwpm_pid)
597597
&mapping_num, IWPM_NLA_MAPINFO_SEND_NUM);
598598
if (ret)
599599
goto mapinfo_num_error;
600+
601+
nlmsg_end(skb, nlh);
602+
600603
ret = rdma_nl_unicast(skb, iwpm_pid);
601604
if (ret) {
602605
skb = NULL;
@@ -678,6 +681,8 @@ int iwpm_send_mapinfo(u8 nl_client, int iwpm_pid)
678681
if (ret)
679682
goto send_mapping_info_unlock;
680683

684+
nlmsg_end(skb, nlh);
685+
681686
iwpm_print_sockaddr(&map_info->local_sockaddr,
682687
"send_mapping_info: Local sockaddr:");
683688
iwpm_print_sockaddr(&map_info->mapped_sockaddr,

drivers/infiniband/hw/i40iw/i40iw_ctrl.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,7 @@
4848
* @wqe: cqp wqe for header
4949
* @header: header for the cqp wqe
5050
*/
51-
static inline void i40iw_insert_wqe_hdr(u64 *wqe, u64 header)
51+
void i40iw_insert_wqe_hdr(u64 *wqe, u64 header)
5252
{
5353
wmb(); /* make sure WQE is populated before polarity is set */
5454
set_64bit_val(wqe, 24, header);

drivers/infiniband/hw/i40iw/i40iw_p.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,8 @@ enum i40iw_status_code i40iw_sc_mr_fast_register(struct i40iw_sc_qp *qp,
5959
struct i40iw_fast_reg_stag_info *info,
6060
bool post_sq);
6161

62+
void i40iw_insert_wqe_hdr(u64 *wqe, u64 header);
63+
6264
/* HMC/FPM functions */
6365
enum i40iw_status_code i40iw_sc_init_iw_hmc(struct i40iw_sc_dev *dev,
6466
u8 hmc_fn_id);

drivers/infiniband/hw/i40iw/i40iw_puda.c

Lines changed: 4 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -123,12 +123,11 @@ static void i40iw_puda_post_recvbuf(struct i40iw_puda_rsrc *rsrc, u32 wqe_idx,
123123
get_64bit_val(wqe, 24, &offset24);
124124

125125
offset24 = (offset24) ? 0 : LS_64(1, I40IWQPSQ_VALID);
126-
set_64bit_val(wqe, 24, offset24);
127126

128127
set_64bit_val(wqe, 0, buf->mem.pa);
129128
set_64bit_val(wqe, 8,
130129
LS_64(buf->mem.size, I40IWQPSQ_FRAG_LEN));
131-
set_64bit_val(wqe, 24, offset24);
130+
i40iw_insert_wqe_hdr(wqe, offset24);
132131
}
133132

134133
/**
@@ -409,9 +408,7 @@ enum i40iw_status_code i40iw_puda_send(struct i40iw_sc_qp *qp,
409408
set_64bit_val(wqe, 8, LS_64(info->len, I40IWQPSQ_FRAG_LEN));
410409
set_64bit_val(wqe, 16, header[0]);
411410

412-
/* Ensure all data is written before writing valid bit */
413-
wmb();
414-
set_64bit_val(wqe, 24, header[1]);
411+
i40iw_insert_wqe_hdr(wqe, header[1]);
415412

416413
i40iw_debug_buf(qp->dev, I40IW_DEBUG_PUDA, "PUDA SEND WQE", wqe, 32);
417414
i40iw_qp_post_wr(&qp->qp_uk);
@@ -539,7 +536,7 @@ static enum i40iw_status_code i40iw_puda_qp_wqe(struct i40iw_sc_dev *dev, struct
539536
LS_64(2, I40IW_CQPSQ_QP_NEXTIWSTATE) |
540537
LS_64(cqp->polarity, I40IW_CQPSQ_WQEVALID);
541538

542-
set_64bit_val(wqe, 24, header);
539+
i40iw_insert_wqe_hdr(wqe, header);
543540

544541
i40iw_debug_buf(cqp->dev, I40IW_DEBUG_PUDA, "PUDA CQE", wqe, 32);
545542
i40iw_sc_cqp_post_sq(cqp);
@@ -655,7 +652,7 @@ static enum i40iw_status_code i40iw_puda_cq_wqe(struct i40iw_sc_dev *dev, struct
655652
LS_64(1, I40IW_CQPSQ_CQ_ENCEQEMASK) |
656653
LS_64(1, I40IW_CQPSQ_CQ_CEQIDVALID) |
657654
LS_64(cqp->polarity, I40IW_CQPSQ_WQEVALID);
658-
set_64bit_val(wqe, 24, header);
655+
i40iw_insert_wqe_hdr(wqe, header);
659656

660657
i40iw_debug_buf(dev, I40IW_DEBUG_PUDA, "PUDA CQE",
661658
wqe, I40IW_CQP_WQE_SIZE * 8);

drivers/infiniband/hw/i40iw/i40iw_verbs.c

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -826,12 +826,14 @@ static int i40iw_query_qp(struct ib_qp *ibqp,
826826
attr->cap.max_inline_data = I40IW_MAX_INLINE_DATA_SIZE;
827827
attr->cap.max_send_sge = I40IW_MAX_WQ_FRAGMENT_COUNT;
828828
attr->cap.max_recv_sge = I40IW_MAX_WQ_FRAGMENT_COUNT;
829+
attr->port_num = 1;
829830
init_attr->event_handler = iwqp->ibqp.event_handler;
830831
init_attr->qp_context = iwqp->ibqp.qp_context;
831832
init_attr->send_cq = iwqp->ibqp.send_cq;
832833
init_attr->recv_cq = iwqp->ibqp.recv_cq;
833834
init_attr->srq = iwqp->ibqp.srq;
834835
init_attr->cap = attr->cap;
836+
init_attr->port_num = 1;
835837
return 0;
836838
}
837839

drivers/infiniband/hw/mlx5/main.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4174,9 +4174,9 @@ static void *mlx5_ib_add(struct mlx5_core_dev *mdev)
41744174
err_uar_page:
41754175
mlx5_put_uars_page(dev->mdev, dev->mdev->priv.uar);
41764176

4177-
err_cnt:
4178-
mlx5_ib_cleanup_cong_debugfs(dev);
41794177
err_cong:
4178+
mlx5_ib_cleanup_cong_debugfs(dev);
4179+
err_cnt:
41804180
if (MLX5_CAP_GEN(dev->mdev, max_qp_cnt))
41814181
mlx5_ib_dealloc_counters(dev);
41824182

drivers/infiniband/hw/qedr/qedr.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -387,7 +387,7 @@ struct qedr_qp {
387387
u8 wqe_size;
388388

389389
u8 smac[ETH_ALEN];
390-
u16 vlan_id;
390+
u16 vlan;
391391
int rc;
392392
} *rqe_wr_id;
393393

drivers/infiniband/hw/qedr/qedr_cm.c

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -105,7 +105,7 @@ void qedr_ll2_complete_rx_packet(void *cxt,
105105

106106
qp->rqe_wr_id[qp->rq.gsi_cons].rc = data->u.data_length_error ?
107107
-EINVAL : 0;
108-
qp->rqe_wr_id[qp->rq.gsi_cons].vlan_id = data->vlan;
108+
qp->rqe_wr_id[qp->rq.gsi_cons].vlan = data->vlan;
109109
/* note: length stands for data length i.e. GRH is excluded */
110110
qp->rqe_wr_id[qp->rq.gsi_cons].sg_list[0].length =
111111
data->length.data_length;
@@ -694,6 +694,7 @@ int qedr_gsi_poll_cq(struct ib_cq *ibcq, int num_entries, struct ib_wc *wc)
694694
struct qedr_cq *cq = get_qedr_cq(ibcq);
695695
struct qedr_qp *qp = dev->gsi_qp;
696696
unsigned long flags;
697+
u16 vlan_id;
697698
int i = 0;
698699

699700
spin_lock_irqsave(&cq->cq_lock, flags);
@@ -712,9 +713,14 @@ int qedr_gsi_poll_cq(struct ib_cq *ibcq, int num_entries, struct ib_wc *wc)
712713
wc[i].wc_flags |= IB_WC_GRH | IB_WC_IP_CSUM_OK;
713714
ether_addr_copy(wc[i].smac, qp->rqe_wr_id[qp->rq.cons].smac);
714715
wc[i].wc_flags |= IB_WC_WITH_SMAC;
715-
if (qp->rqe_wr_id[qp->rq.cons].vlan_id) {
716+
717+
vlan_id = qp->rqe_wr_id[qp->rq.cons].vlan &
718+
VLAN_VID_MASK;
719+
if (vlan_id) {
716720
wc[i].wc_flags |= IB_WC_WITH_VLAN;
717-
wc[i].vlan_id = qp->rqe_wr_id[qp->rq.cons].vlan_id;
721+
wc[i].vlan_id = vlan_id;
722+
wc[i].sl = (qp->rqe_wr_id[qp->rq.cons].vlan &
723+
VLAN_PRIO_MASK) >> VLAN_PRIO_SHIFT;
718724
}
719725

720726
qedr_inc_sw_cons(&qp->rq);

0 commit comments

Comments
 (0)