RDMA/irdma: Set VLAN in UD work completion correctly
authorMustafa Ismail <mustafa.ismail@intel.com>
Tue, 19 Oct 2021 15:16:53 +0000 (10:16 -0500)
committerJason Gunthorpe <jgg@nvidia.com>
Tue, 19 Oct 2021 23:22:01 +0000 (20:22 -0300)
Currently VLAN is reported in UD work completion when VLAN id is zero,
i.e. no VLAN case.

Report VLAN in UD work completion only when VLAN id is non-zero.

Fixes: b48c24c2d710 ("RDMA/irdma: Implement device supported verb APIs")
Link: https://lore.kernel.org/r/20211019151654.1943-1-shiraz.saleem@intel.com
Signed-off-by: Mustafa Ismail <mustafa.ismail@intel.com>
Signed-off-by: Shiraz Saleem <shiraz.saleem@intel.com>
Signed-off-by: Jason Gunthorpe <jgg@nvidia.com>
drivers/infiniband/hw/irdma/verbs.c

index 7110ebf834f968228f0af163f4037a6927ba5180..102dc9342f2a211e4f108b70222dfb9eaeffd8fa 100644 (file)
@@ -3399,9 +3399,13 @@ static void irdma_process_cqe(struct ib_wc *entry,
                }
 
                if (cq_poll_info->ud_vlan_valid) {
-                       entry->vlan_id = cq_poll_info->ud_vlan & VLAN_VID_MASK;
-                       entry->wc_flags |= IB_WC_WITH_VLAN;
+                       u16 vlan = cq_poll_info->ud_vlan & VLAN_VID_MASK;
+
                        entry->sl = cq_poll_info->ud_vlan >> VLAN_PRIO_SHIFT;
+                       if (vlan) {
+                               entry->vlan_id = vlan;
+                               entry->wc_flags |= IB_WC_WITH_VLAN;
+                       }
                } else {
                        entry->sl = 0;
                }