mirror of
https://github.com/AuxXxilium/linux_dsm_epyc7002.git
synced 2024-12-28 11:18:45 +07:00
Merge branch 'bnxt_en-Bug-fixes'
Michael Chan says: ===================== bnxt_en: Bug fixes 3 patches that fix some issues in the firmware reset logic, starting with a small patch to refactor the code that re-enables SRIOV. The last patch fixes a TC queue mapping issue. ==================== Signed-off-by: Jakub Kicinski <kuba@kernel.org>
This commit is contained in:
commit
2b5ea2947f
@ -7893,7 +7893,7 @@ static void bnxt_setup_msix(struct bnxt *bp)
|
|||||||
int tcs, i;
|
int tcs, i;
|
||||||
|
|
||||||
tcs = netdev_get_num_tc(dev);
|
tcs = netdev_get_num_tc(dev);
|
||||||
if (tcs > 1) {
|
if (tcs) {
|
||||||
int i, off, count;
|
int i, off, count;
|
||||||
|
|
||||||
for (i = 0; i < tcs; i++) {
|
for (i = 0; i < tcs; i++) {
|
||||||
@ -9241,6 +9241,17 @@ void bnxt_half_close_nic(struct bnxt *bp)
|
|||||||
bnxt_free_mem(bp, false);
|
bnxt_free_mem(bp, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void bnxt_reenable_sriov(struct bnxt *bp)
|
||||||
|
{
|
||||||
|
if (BNXT_PF(bp)) {
|
||||||
|
struct bnxt_pf_info *pf = &bp->pf;
|
||||||
|
int n = pf->active_vfs;
|
||||||
|
|
||||||
|
if (n)
|
||||||
|
bnxt_cfg_hw_sriov(bp, &n, true);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
static int bnxt_open(struct net_device *dev)
|
static int bnxt_open(struct net_device *dev)
|
||||||
{
|
{
|
||||||
struct bnxt *bp = netdev_priv(dev);
|
struct bnxt *bp = netdev_priv(dev);
|
||||||
@ -9259,15 +9270,10 @@ static int bnxt_open(struct net_device *dev)
|
|||||||
bnxt_hwrm_if_change(bp, false);
|
bnxt_hwrm_if_change(bp, false);
|
||||||
} else {
|
} else {
|
||||||
if (test_and_clear_bit(BNXT_STATE_FW_RESET_DET, &bp->state)) {
|
if (test_and_clear_bit(BNXT_STATE_FW_RESET_DET, &bp->state)) {
|
||||||
if (BNXT_PF(bp)) {
|
if (!test_bit(BNXT_STATE_IN_FW_RESET, &bp->state)) {
|
||||||
struct bnxt_pf_info *pf = &bp->pf;
|
|
||||||
int n = pf->active_vfs;
|
|
||||||
|
|
||||||
if (n)
|
|
||||||
bnxt_cfg_hw_sriov(bp, &n, true);
|
|
||||||
}
|
|
||||||
if (!test_bit(BNXT_STATE_IN_FW_RESET, &bp->state))
|
|
||||||
bnxt_ulp_start(bp, 0);
|
bnxt_ulp_start(bp, 0);
|
||||||
|
bnxt_reenable_sriov(bp);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
bnxt_hwmon_open(bp);
|
bnxt_hwmon_open(bp);
|
||||||
}
|
}
|
||||||
@ -9307,10 +9313,6 @@ static void __bnxt_close_nic(struct bnxt *bp, bool irq_re_init,
|
|||||||
bnxt_debug_dev_exit(bp);
|
bnxt_debug_dev_exit(bp);
|
||||||
bnxt_disable_napi(bp);
|
bnxt_disable_napi(bp);
|
||||||
del_timer_sync(&bp->timer);
|
del_timer_sync(&bp->timer);
|
||||||
if (test_bit(BNXT_STATE_IN_FW_RESET, &bp->state) &&
|
|
||||||
pci_is_enabled(bp->pdev))
|
|
||||||
pci_disable_device(bp->pdev);
|
|
||||||
|
|
||||||
bnxt_free_skbs(bp);
|
bnxt_free_skbs(bp);
|
||||||
|
|
||||||
/* Save ring stats before shutdown */
|
/* Save ring stats before shutdown */
|
||||||
@ -10096,9 +10098,16 @@ static void bnxt_reset(struct bnxt *bp, bool silent)
|
|||||||
static void bnxt_fw_reset_close(struct bnxt *bp)
|
static void bnxt_fw_reset_close(struct bnxt *bp)
|
||||||
{
|
{
|
||||||
bnxt_ulp_stop(bp);
|
bnxt_ulp_stop(bp);
|
||||||
|
/* When firmware is fatal state, disable PCI device to prevent
|
||||||
|
* any potential bad DMAs before freeing kernel memory.
|
||||||
|
*/
|
||||||
|
if (test_bit(BNXT_STATE_FW_FATAL_COND, &bp->state))
|
||||||
|
pci_disable_device(bp->pdev);
|
||||||
__bnxt_close_nic(bp, true, false);
|
__bnxt_close_nic(bp, true, false);
|
||||||
bnxt_clear_int_mode(bp);
|
bnxt_clear_int_mode(bp);
|
||||||
bnxt_hwrm_func_drv_unrgtr(bp);
|
bnxt_hwrm_func_drv_unrgtr(bp);
|
||||||
|
if (pci_is_enabled(bp->pdev))
|
||||||
|
pci_disable_device(bp->pdev);
|
||||||
bnxt_free_ctx_mem(bp);
|
bnxt_free_ctx_mem(bp);
|
||||||
kfree(bp->ctx);
|
kfree(bp->ctx);
|
||||||
bp->ctx = NULL;
|
bp->ctx = NULL;
|
||||||
@ -10831,6 +10840,8 @@ static void bnxt_fw_reset_task(struct work_struct *work)
|
|||||||
smp_mb__before_atomic();
|
smp_mb__before_atomic();
|
||||||
clear_bit(BNXT_STATE_IN_FW_RESET, &bp->state);
|
clear_bit(BNXT_STATE_IN_FW_RESET, &bp->state);
|
||||||
bnxt_ulp_start(bp, rc);
|
bnxt_ulp_start(bp, rc);
|
||||||
|
if (!rc)
|
||||||
|
bnxt_reenable_sriov(bp);
|
||||||
bnxt_dl_health_recovery_done(bp);
|
bnxt_dl_health_recovery_done(bp);
|
||||||
bnxt_dl_health_status_update(bp, true);
|
bnxt_dl_health_status_update(bp, true);
|
||||||
rtnl_unlock();
|
rtnl_unlock();
|
||||||
|
Loading…
Reference in New Issue
Block a user