fm10k: prevent RCU issues during AER events
During an AER action response, we were calling fm10k_close without holding the rtnl_lock() which could lead to possible RCU warnings being produced due to 64bit stat updates among other causes. Similarly, we need rtnl_lock() around fm10k_open during fm10k_io_resume. Follow the same pattern elsewhere in the driver and protect the entire open/close sequence. Signed-off-by: Jacob Keller <jacob.e.keller@intel.com> Tested-by: Krishneil Singh <Krishneil.k.singh@intel.com> Signed-off-by: Jeff Kirsher <jeffrey.t.kirsher@intel.com>
This commit is contained in:
parent
2d0f76bedb
commit
1e4c32f3ed
@ -2271,6 +2271,8 @@ static pci_ers_result_t fm10k_io_error_detected(struct pci_dev *pdev,
|
||||
if (state == pci_channel_io_perm_failure)
|
||||
return PCI_ERS_RESULT_DISCONNECT;
|
||||
|
||||
rtnl_lock();
|
||||
|
||||
if (netif_running(netdev))
|
||||
fm10k_close(netdev);
|
||||
|
||||
@ -2279,6 +2281,8 @@ static pci_ers_result_t fm10k_io_error_detected(struct pci_dev *pdev,
|
||||
/* free interrupts */
|
||||
fm10k_clear_queueing_scheme(interface);
|
||||
|
||||
rtnl_unlock();
|
||||
|
||||
pci_disable_device(pdev);
|
||||
|
||||
/* Request a slot reset. */
|
||||
@ -2349,11 +2353,13 @@ static void fm10k_io_resume(struct pci_dev *pdev)
|
||||
/* reset statistics starting values */
|
||||
hw->mac.ops.rebind_hw_stats(hw, &interface->stats);
|
||||
|
||||
rtnl_lock();
|
||||
|
||||
err = fm10k_init_queueing_scheme(interface);
|
||||
if (err) {
|
||||
dev_err(&interface->pdev->dev,
|
||||
"init_queueing_scheme failed: %d\n", err);
|
||||
return;
|
||||
goto unlock;
|
||||
}
|
||||
|
||||
/* reassociate interrupts */
|
||||
@ -2370,6 +2376,9 @@ static void fm10k_io_resume(struct pci_dev *pdev)
|
||||
|
||||
if (!err)
|
||||
netif_device_attach(netdev);
|
||||
|
||||
unlock:
|
||||
rtnl_unlock();
|
||||
}
|
||||
|
||||
static const struct pci_error_handlers fm10k_err_handler = {
|
||||
|
Loading…
Reference in New Issue
Block a user