|
Thomas Bogendoerfer |
7dd844 |
From: Selvin Xavier <selvin.xavier@broadcom.com>
|
|
Thomas Bogendoerfer |
7dd844 |
Date: Wed, 15 Sep 2021 05:32:42 -0700
|
|
Thomas Bogendoerfer |
7dd844 |
Subject: RDMA/bnxt_re: Check if the vlan is valid before reporting
|
|
Thomas Bogendoerfer |
7dd844 |
Patch-mainline: v5.16-rc1
|
|
Thomas Bogendoerfer |
7dd844 |
Git-commit: 6bda39149d4b8920fdb8744090653aca3daa792d
|
|
Thomas Bogendoerfer |
7dd844 |
References: jsc#SLE-18977
|
|
Thomas Bogendoerfer |
7dd844 |
|
|
Thomas Bogendoerfer |
7dd844 |
When VF is configured with default vlan, HW strips the vlan from the
|
|
Thomas Bogendoerfer |
7dd844 |
packet and driver receives it in Rx completion. VLAN needs to be reported
|
|
Thomas Bogendoerfer |
7dd844 |
for UD work completion only if the vlan is configured on the host. Add a
|
|
Thomas Bogendoerfer |
7dd844 |
check for valid vlan in the UD receive path.
|
|
Thomas Bogendoerfer |
7dd844 |
|
|
Thomas Bogendoerfer |
7dd844 |
Link: https://lore.kernel.org/r/1631709163-2287-12-git-send-email-selvin.xavier@broadcom.com
|
|
Thomas Bogendoerfer |
7dd844 |
Signed-off-by: Selvin Xavier <selvin.xavier@broadcom.com>
|
|
Thomas Bogendoerfer |
7dd844 |
Signed-off-by: Jason Gunthorpe <jgg@nvidia.com>
|
|
Thomas Bogendoerfer |
7dd844 |
Acked-by: Thomas Bogendoerfer <tbogendoerfer@suse.de>
|
|
Thomas Bogendoerfer |
7dd844 |
---
|
|
Thomas Bogendoerfer |
7dd844 |
drivers/infiniband/hw/bnxt_re/ib_verbs.c | 12 +++++++++---
|
|
Thomas Bogendoerfer |
7dd844 |
1 file changed, 9 insertions(+), 3 deletions(-)
|
|
Thomas Bogendoerfer |
7dd844 |
|
|
Thomas Bogendoerfer |
7dd844 |
--- a/drivers/infiniband/hw/bnxt_re/ib_verbs.c
|
|
Thomas Bogendoerfer |
7dd844 |
+++ b/drivers/infiniband/hw/bnxt_re/ib_verbs.c
|
|
Thomas Bogendoerfer |
7dd844 |
@@ -3365,8 +3365,11 @@ static void bnxt_re_process_res_ud_wc(st
|
|
Thomas Bogendoerfer |
7dd844 |
struct ib_wc *wc,
|
|
Thomas Bogendoerfer |
7dd844 |
struct bnxt_qplib_cqe *cqe)
|
|
Thomas Bogendoerfer |
7dd844 |
{
|
|
Thomas Bogendoerfer |
7dd844 |
+ struct bnxt_re_dev *rdev;
|
|
Thomas Bogendoerfer |
7dd844 |
+ u16 vlan_id = 0;
|
|
Thomas Bogendoerfer |
7dd844 |
u8 nw_type;
|
|
Thomas Bogendoerfer |
7dd844 |
|
|
Thomas Bogendoerfer |
7dd844 |
+ rdev = qp->rdev;
|
|
Thomas Bogendoerfer |
7dd844 |
wc->opcode = IB_WC_RECV;
|
|
Thomas Bogendoerfer |
7dd844 |
wc->status = __rc_to_ib_wc_status(cqe->status);
|
|
Thomas Bogendoerfer |
7dd844 |
|
|
Thomas Bogendoerfer |
7dd844 |
@@ -3378,9 +3381,12 @@ static void bnxt_re_process_res_ud_wc(st
|
|
Thomas Bogendoerfer |
7dd844 |
memcpy(wc->smac, cqe->smac, ETH_ALEN);
|
|
Thomas Bogendoerfer |
7dd844 |
wc->wc_flags |= IB_WC_WITH_SMAC;
|
|
Thomas Bogendoerfer |
7dd844 |
if (cqe->flags & CQ_RES_UD_FLAGS_META_FORMAT_VLAN) {
|
|
Thomas Bogendoerfer |
7dd844 |
- wc->vlan_id = (cqe->cfa_meta & 0xFFF);
|
|
Thomas Bogendoerfer |
7dd844 |
- if (wc->vlan_id < 0x1000)
|
|
Thomas Bogendoerfer |
7dd844 |
- wc->wc_flags |= IB_WC_WITH_VLAN;
|
|
Thomas Bogendoerfer |
7dd844 |
+ vlan_id = (cqe->cfa_meta & 0xFFF);
|
|
Thomas Bogendoerfer |
7dd844 |
+ }
|
|
Thomas Bogendoerfer |
7dd844 |
+ /* Mark only if vlan_id is non zero */
|
|
Thomas Bogendoerfer |
7dd844 |
+ if (vlan_id && bnxt_re_check_if_vlan_valid(rdev, vlan_id)) {
|
|
Thomas Bogendoerfer |
7dd844 |
+ wc->vlan_id = vlan_id;
|
|
Thomas Bogendoerfer |
7dd844 |
+ wc->wc_flags |= IB_WC_WITH_VLAN;
|
|
Thomas Bogendoerfer |
7dd844 |
}
|
|
Thomas Bogendoerfer |
7dd844 |
nw_type = (cqe->flags & CQ_RES_UD_FLAGS_ROCE_IP_VER_MASK) >>
|
|
Thomas Bogendoerfer |
7dd844 |
CQ_RES_UD_FLAGS_ROCE_IP_VER_SFT;
|