RDMA/bnxt_re: Check if the vlan is valid before reporting
[linux-2.6-microblaze.git] / drivers / infiniband / hw / bnxt_re / ib_verbs.c
index 938088f..67ca794 100644 (file)
@@ -3365,8 +3365,11 @@ static void bnxt_re_process_res_ud_wc(struct bnxt_re_qp *qp,
                                      struct ib_wc *wc,
                                      struct bnxt_qplib_cqe *cqe)
 {
+       struct bnxt_re_dev *rdev;
+       u16 vlan_id = 0;
        u8 nw_type;
 
+       rdev = qp->rdev;
        wc->opcode = IB_WC_RECV;
        wc->status = __rc_to_ib_wc_status(cqe->status);
 
@@ -3378,9 +3381,12 @@ static void bnxt_re_process_res_ud_wc(struct bnxt_re_qp *qp,
                memcpy(wc->smac, cqe->smac, ETH_ALEN);
                wc->wc_flags |= IB_WC_WITH_SMAC;
                if (cqe->flags & CQ_RES_UD_FLAGS_META_FORMAT_VLAN) {
-                       wc->vlan_id = (cqe->cfa_meta & 0xFFF);
-                       if (wc->vlan_id < 0x1000)
-                               wc->wc_flags |= IB_WC_WITH_VLAN;
+                       vlan_id = (cqe->cfa_meta & 0xFFF);
+               }
+               /* Mark only if vlan_id is non zero */
+               if (vlan_id && bnxt_re_check_if_vlan_valid(rdev, vlan_id)) {
+                       wc->vlan_id = vlan_id;
+                       wc->wc_flags |= IB_WC_WITH_VLAN;
                }
                nw_type = (cqe->flags & CQ_RES_UD_FLAGS_ROCE_IP_VER_MASK) >>
                           CQ_RES_UD_FLAGS_ROCE_IP_VER_SFT;