mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2024-10-01 14:44:12 +00:00
PCI: vmd: Free up IRQs on suspend path
commit e2b1820bd5
upstream.
Free up the IRQs we request on the suspend path and reallocate them on the
resume path.
Fixes this error:
CPU 111 disable failed: CPU has 9 vectors assigned and there are only 0 available.
Error taking CPU111 down: -34
Non-boot CPUs are not disabled
Enabling non-boot CPUs ...
Signed-off-by: Scott Bauer <scott.bauer@intel.com>
Signed-off-by: Bjorn Helgaas <bhelgaas@google.com>
Acked-by: Keith Busch <keith.busch@intel.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Reviewed-by: Jon Derrick <jonathan.derrick@intel.com>
Signed-off-by: Sushma Kalakota <sushmax.kalakota@intel.com>
This commit is contained in:
parent
7f3829912e
commit
b6666764b6
1 changed files with 15 additions and 0 deletions
|
@ -731,6 +731,11 @@ static void vmd_remove(struct pci_dev *dev)
|
|||
static int vmd_suspend(struct device *dev)
|
||||
{
|
||||
struct pci_dev *pdev = to_pci_dev(dev);
|
||||
struct vmd_dev *vmd = pci_get_drvdata(pdev);
|
||||
int i;
|
||||
|
||||
for (i = 0; i < vmd->msix_count; i++)
|
||||
devm_free_irq(dev, pci_irq_vector(pdev, i), &vmd->irqs[i]);
|
||||
|
||||
pci_save_state(pdev);
|
||||
return 0;
|
||||
|
@ -739,6 +744,16 @@ static int vmd_suspend(struct device *dev)
|
|||
static int vmd_resume(struct device *dev)
|
||||
{
|
||||
struct pci_dev *pdev = to_pci_dev(dev);
|
||||
struct vmd_dev *vmd = pci_get_drvdata(pdev);
|
||||
int err, i;
|
||||
|
||||
for (i = 0; i < vmd->msix_count; i++) {
|
||||
err = devm_request_irq(dev, pci_irq_vector(pdev, i),
|
||||
vmd_irq, IRQF_NO_THREAD,
|
||||
"vmd", &vmd->irqs[i]);
|
||||
if (err)
|
||||
return err;
|
||||
}
|
||||
|
||||
pci_restore_state(pdev);
|
||||
return 0;
|
||||
|
|
Loading…
Reference in a new issue