]> git.openfabrics.org - ~aditr/compat-rdma.git/commitdiff
qedr: fix BZ 2642 - parse VLAN ID and priority correctly
authorRam Amrani <Ram.Amrani@cavium.com>
Mon, 16 Oct 2017 11:31:24 +0000 (14:31 +0300)
committerVladimir Sokolovsky <vlad@mellanox.com>
Mon, 16 Oct 2017 20:43:11 +0000 (23:43 +0300)
Parse VLAN ID correctly i.e. mask off the priority field.
Parse the VLAN priority to the sl field.

Signed-off-by: Ram Amrani <Ram.Amrani@cavium.com>
linux-next-cherry-picks/0200-vlan.patch [new file with mode: 0644]

diff --git a/linux-next-cherry-picks/0200-vlan.patch b/linux-next-cherry-picks/0200-vlan.patch
new file mode 100644 (file)
index 0000000..cc8a1d6
--- /dev/null
@@ -0,0 +1,52 @@
+diff -uar a/drivers/infiniband/hw/qedr/qedr_cm.c b/drivers/infiniband/hw/qedr/qedr_cm.c
+--- a/drivers/infiniband/hw/qedr/qedr_cm.c     2017-10-15 15:37:57.524635325 +0300
++++ b/drivers/infiniband/hw/qedr/qedr_cm.c     2017-10-15 15:36:57.428064990 +0300
+@@ -99,7 +99,7 @@
+       spin_lock_irqsave(&qp->q_lock, flags);
+       qp->rqe_wr_id[qp->rq.gsi_cons].rc = params->rc;
+-      qp->rqe_wr_id[qp->rq.gsi_cons].vlan_id = params->vlan_id;
++      qp->rqe_wr_id[qp->rq.gsi_cons].vlan = params->vlan_id;
+       qp->rqe_wr_id[qp->rq.gsi_cons].sg_list[0].length = pkt->payload[0].len;
+       ether_addr_copy(qp->rqe_wr_id[qp->rq.gsi_cons].smac, params->smac);
+@@ -563,6 +563,7 @@
+       struct qedr_cq *cq = get_qedr_cq(ibcq);
+       struct qedr_qp *qp = dev->gsi_qp;
+       unsigned long flags;
++      u16 vlan_id;
+       int i = 0;
+       spin_lock_irqsave(&cq->cq_lock, flags);
+@@ -581,10 +582,15 @@
+               wc[i].wc_flags |= IB_WC_GRH | IB_WC_IP_CSUM_OK;
+               ether_addr_copy(wc[i].smac, qp->rqe_wr_id[qp->rq.cons].smac);
+               wc[i].wc_flags |= IB_WC_WITH_SMAC;
+-              if (qp->rqe_wr_id[qp->rq.cons].vlan_id) {
+-                      wc[i].wc_flags |= IB_WC_WITH_VLAN;
+-                      wc[i].vlan_id = qp->rqe_wr_id[qp->rq.cons].vlan_id;
+-              }
++
++              vlan_id = qp->rqe_wr_id[qp->rq.cons].vlan &
++                        VLAN_VID_MASK;
++              if (vlan_id) {
++                      wc[i].wc_flags |= IB_WC_WITH_VLAN;
++                      wc[i].vlan_id = vlan_id;
++                      wc[i].sl = (qp->rqe_wr_id[qp->rq.cons].vlan &
++                                  VLAN_PRIO_MASK) >> VLAN_PRIO_SHIFT;
++              }
+               qedr_inc_sw_cons(&qp->rq);
+               i++;
+diff -uar a/drivers/infiniband/hw/qedr/qedr.h b/drivers/infiniband/hw/qedr/qedr.h
+--- a/drivers/infiniband/hw/qedr/qedr.h        2017-10-15 15:37:57.522635340 +0300
++++ b/drivers/infiniband/hw/qedr/qedr.h        2017-10-15 15:38:40.438328509 +0300
+@@ -379,7 +379,7 @@
+               u8 wqe_size;
+               u8 smac[ETH_ALEN];
+-              u16 vlan_id;
++              u16 vlan;
+               int rc;
+       } *rqe_wr_id;