mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-11-26 05:34:13 +08: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;
|
||||
|
||||
tcs = netdev_get_num_tc(dev);
|
||||
if (tcs > 1) {
|
||||
if (tcs) {
|
||||
int i, off, count;
|
||||
|
||||
for (i = 0; i < tcs; i++) {
|
||||
@ -9241,6 +9241,17 @@ void bnxt_half_close_nic(struct bnxt *bp)
|
||||
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)
|
||||
{
|
||||
struct bnxt *bp = netdev_priv(dev);
|
||||
@ -9259,15 +9270,10 @@ static int bnxt_open(struct net_device *dev)
|
||||
bnxt_hwrm_if_change(bp, false);
|
||||
} else {
|
||||
if (test_and_clear_bit(BNXT_STATE_FW_RESET_DET, &bp->state)) {
|
||||
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);
|
||||
}
|
||||
if (!test_bit(BNXT_STATE_IN_FW_RESET, &bp->state))
|
||||
if (!test_bit(BNXT_STATE_IN_FW_RESET, &bp->state)) {
|
||||
bnxt_ulp_start(bp, 0);
|
||||
bnxt_reenable_sriov(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_disable_napi(bp);
|
||||
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);
|
||||
|
||||
/* 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)
|
||||
{
|
||||
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_clear_int_mode(bp);
|
||||
bnxt_hwrm_func_drv_unrgtr(bp);
|
||||
if (pci_is_enabled(bp->pdev))
|
||||
pci_disable_device(bp->pdev);
|
||||
bnxt_free_ctx_mem(bp);
|
||||
kfree(bp->ctx);
|
||||
bp->ctx = NULL;
|
||||
@ -10831,6 +10840,8 @@ static void bnxt_fw_reset_task(struct work_struct *work)
|
||||
smp_mb__before_atomic();
|
||||
clear_bit(BNXT_STATE_IN_FW_RESET, &bp->state);
|
||||
bnxt_ulp_start(bp, rc);
|
||||
if (!rc)
|
||||
bnxt_reenable_sriov(bp);
|
||||
bnxt_dl_health_recovery_done(bp);
|
||||
bnxt_dl_health_status_update(bp, true);
|
||||
rtnl_unlock();
|
||||
|
Loading…
Reference in New Issue
Block a user