mirror of https://gitee.com/openkylin/linux.git
i40evf: fix panic on PF driver fail
Fix a panic that would occur in the VF if the PF driver failed or was removed from the host kernel. In this case, the VF driver calls i40evf_close(), but this function does nothing because the driver is in the resetting state. Because of this, the driver doesn't free its irqs and causes a kernel panic when it tries to disable MSI-X. Change-ID: If95644a89e554b4d7be0dca1b6add26f63047129 Signed-off-by: Mitch Williams <mitch.a.williams@intel.com> Signed-off-by: Catherine Sullivan <catherine.sullivan@intel.com> Tested-by: Sibai Li <sibai.li@intel.com> Signed-off-by: Jeff Kirsher <jeffrey.t.kirsher@intel.com>
This commit is contained in:
parent
014269ff37
commit
169f40760e
|
@ -25,6 +25,8 @@
|
||||||
#include "i40e_prototype.h"
|
#include "i40e_prototype.h"
|
||||||
static int i40evf_setup_all_tx_resources(struct i40evf_adapter *adapter);
|
static int i40evf_setup_all_tx_resources(struct i40evf_adapter *adapter);
|
||||||
static int i40evf_setup_all_rx_resources(struct i40evf_adapter *adapter);
|
static int i40evf_setup_all_rx_resources(struct i40evf_adapter *adapter);
|
||||||
|
static void i40evf_free_all_tx_resources(struct i40evf_adapter *adapter);
|
||||||
|
static void i40evf_free_all_rx_resources(struct i40evf_adapter *adapter);
|
||||||
static int i40evf_close(struct net_device *netdev);
|
static int i40evf_close(struct net_device *netdev);
|
||||||
|
|
||||||
char i40evf_driver_name[] = "i40evf";
|
char i40evf_driver_name[] = "i40evf";
|
||||||
|
@ -1534,9 +1536,13 @@ static void i40evf_reset_task(struct work_struct *work)
|
||||||
rstat_val);
|
rstat_val);
|
||||||
adapter->flags |= I40EVF_FLAG_PF_COMMS_FAILED;
|
adapter->flags |= I40EVF_FLAG_PF_COMMS_FAILED;
|
||||||
|
|
||||||
if (netif_running(adapter->netdev))
|
if (netif_running(adapter->netdev)) {
|
||||||
i40evf_close(adapter->netdev);
|
set_bit(__I40E_DOWN, &adapter->vsi.state);
|
||||||
|
i40evf_down(adapter);
|
||||||
|
i40evf_free_traffic_irqs(adapter);
|
||||||
|
i40evf_free_all_tx_resources(adapter);
|
||||||
|
i40evf_free_all_rx_resources(adapter);
|
||||||
|
}
|
||||||
i40evf_free_misc_irq(adapter);
|
i40evf_free_misc_irq(adapter);
|
||||||
i40evf_reset_interrupt_capability(adapter);
|
i40evf_reset_interrupt_capability(adapter);
|
||||||
i40evf_free_queues(adapter);
|
i40evf_free_queues(adapter);
|
||||||
|
|
Loading…
Reference in New Issue