Commit 1263b4d6 authored by Saravanan Vajravel's avatar Saravanan Vajravel Committed by baogen shang
Browse files

bnxt_en: Reserve rings after PCIe AER recovery if NIC interface is down

stable inclusion
from stable-v5.10.231
commit a9615376a999b1909f521849b121bc2eab70dbc6
category: bugfix
bugzilla: https://gitee.com/openeuler/kernel/issues/IBG4YH
CVE: NA
Reference: https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/commit/?h=linux-5.10.y&id=a9615376a999b1909f521849b121bc2eab70dbc6



-------------------------

[ Upstream commit 5311598f7f3293683cdc761df71ae3469327332c ]

After successful PCIe AER recovery, FW will reset all resource
reservations.  If it is IF_UP, the driver will call bnxt_open() and
all resources will be reserved again.  It it is IF_DOWN, we should
call bnxt_reserve_rings() so that we can reserve resources including
RoCE resources to allow RoCE to resume after AER.  Without this
patch, RoCE fails to resume in this IF_DOWN scenario.

Later, if it becomes IF_UP, bnxt_open() will see that resources have
been reserved and will not reserve again.

Fixes: fb1e6e56 ("bnxt_en: Fix AER recovery.")
Reviewed-by: default avatarSomnath Kotur <somnath.kotur@broadcom.com>
Reviewed-by: default avatarPavan Chebbi <pavan.chebbi@broadcom.com>
Reviewed-by: default avatarKashyap Desai <kashyap.desai@broadcom.com>
Signed-off-by: default avatarSaravanan Vajravel <saravanan.vajravel@broadcom.com>
Signed-off-by: default avatarMichael Chan <michael.chan@broadcom.com>
Signed-off-by: default avatarPaolo Abeni <pabeni@redhat.com>
Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
Signed-off-by: default avatarbaogen shang <baogen.shang@windriver.com>
parent 08e54ea5
Loading
Loading
Loading
Loading
+6 −2
Original line number Diff line number Diff line
@@ -13107,8 +13107,12 @@ static void bnxt_io_resume(struct pci_dev *pdev)
	rtnl_lock();

	err = bnxt_hwrm_func_qcaps(bp);
	if (!err && netif_running(netdev))
	if (!err) {
		if (netif_running(netdev))
			err = bnxt_open(netdev);
		else
			err = bnxt_reserve_rings(bp, true);
	}

	bnxt_ulp_start(bp, err);
	if (!err) {