i40e: Close client on suspend and restore client MSIx on resume
During suspend client MSIx vectors are freed while they are still
in use causing a crash on entering S3.
Fix this calling client close before freeing up its MSIx vectors.
Also update the client MSIx vectors on resume before client
open is called.
Fixes commit b980c0634f ("i40e: shutdown all IRQs and disable MSI-X
when suspended")
Reported-by: Stefan Assmann <sassmann@redhat.com>
Signed-off-by: Shiraz Saleem <shiraz.saleem@intel.com>
Tested-by: Andrew Bowers <andrewx.bowers@intel.com>
Signed-off-by: Jeff Kirsher <jeffrey.t.kirsher@intel.com>
This commit is contained in:
committed by
Jeff Kirsher
parent
88244a48d2
commit
ddbb8d5dd9
@@ -287,6 +287,17 @@ out:
|
||||
return capable;
|
||||
}
|
||||
|
||||
void i40e_client_update_msix_info(struct i40e_pf *pf)
|
||||
{
|
||||
struct i40e_client_instance *cdev = pf->cinst;
|
||||
|
||||
if (!cdev || !cdev->client)
|
||||
return;
|
||||
|
||||
cdev->lan_info.msix_count = pf->num_iwarp_msix;
|
||||
cdev->lan_info.msix_entries = &pf->msix_entries[pf->iwarp_base_vector];
|
||||
}
|
||||
|
||||
/**
|
||||
* i40e_client_add_instance - add a client instance struct to the instance list
|
||||
* @pf: pointer to the board struct
|
||||
@@ -328,9 +339,6 @@ static void i40e_client_add_instance(struct i40e_pf *pf)
|
||||
return;
|
||||
}
|
||||
|
||||
cdev->lan_info.msix_count = pf->num_iwarp_msix;
|
||||
cdev->lan_info.msix_entries = &pf->msix_entries[pf->iwarp_base_vector];
|
||||
|
||||
mac = list_first_entry(&cdev->lan_info.netdev->dev_addrs.list,
|
||||
struct netdev_hw_addr, list);
|
||||
if (mac)
|
||||
@@ -340,6 +348,8 @@ static void i40e_client_add_instance(struct i40e_pf *pf)
|
||||
|
||||
cdev->client = registered_client;
|
||||
pf->cinst = cdev;
|
||||
|
||||
i40e_client_update_msix_info(pf);
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
Reference in New Issue
Block a user