--- /dev/null
+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;
+