mirror of
https://github.com/FEX-Emu/linux.git
synced 2024-12-25 19:07:46 +00:00
i40e: remove irqs only when they are set up
Use an extra state variable to keep track of when the IRQs are fully set up. This keeps us from trying to unhook IRQs that already were left unhooked in a failed reset recovery, e.g. when firmware is broken. Change-ID: I073eb081e4ef8aedcbdf1ee0717c0ed64fa172f2 Signed-off-by: Shannon Nelson <shannon.nelson@intel.com> Signed-off-by: Jeff Kirsher <jeffrey.t.kirsher@intel.com>
This commit is contained in:
parent
60442dea2e
commit
6374184672
@ -414,6 +414,7 @@ struct i40e_vsi {
|
||||
struct i40e_q_vector **q_vectors;
|
||||
int num_q_vectors;
|
||||
int base_vector;
|
||||
bool irqs_ready;
|
||||
|
||||
u16 seid; /* HW index of this VSI (absolute index) */
|
||||
u16 id; /* VSI number */
|
||||
|
@ -2790,6 +2790,7 @@ static int i40e_vsi_request_irq_msix(struct i40e_vsi *vsi, char *basename)
|
||||
&q_vector->affinity_mask);
|
||||
}
|
||||
|
||||
vsi->irqs_ready = true;
|
||||
return 0;
|
||||
|
||||
free_queue_irqs:
|
||||
@ -3349,6 +3350,10 @@ static void i40e_vsi_free_irq(struct i40e_vsi *vsi)
|
||||
if (!vsi->q_vectors)
|
||||
return;
|
||||
|
||||
if (!vsi->irqs_ready)
|
||||
return;
|
||||
|
||||
vsi->irqs_ready = false;
|
||||
for (i = 0; i < vsi->num_q_vectors; i++) {
|
||||
u16 vector = i + base;
|
||||
|
||||
@ -5953,6 +5958,7 @@ static int i40e_vsi_mem_alloc(struct i40e_pf *pf, enum i40e_vsi_type type)
|
||||
vsi->netdev_registered = false;
|
||||
vsi->work_limit = I40E_DEFAULT_IRQ_WORK;
|
||||
INIT_LIST_HEAD(&vsi->mac_filter_list);
|
||||
vsi->irqs_ready = false;
|
||||
|
||||
ret = i40e_set_num_rings_in_vsi(vsi);
|
||||
if (ret)
|
||||
|
Loading…
Reference in New Issue
Block a user