PCI: vmd: Free up IRQs on suspend path
PATCH RESEND 1/1 PCI: vmd: Free up IRQs on suspend path
This patch frees up the IRQs we request on the suspend path, and reallocates them on the resume path.
Fixes:
[ 559.964386] CPU 111 disable failed: CPU has 9 vectors assigned and there are only 0 available. [ 559.966824] Error taking CPU111 down: -34 [ 559.966825] Non-boot CPUs are not disabled [ 559.966826] Enabling non-boot CPUs ...
--- drivers/pci/host/vmd.c | 17 +++++++++++++++++ 1 file changed, 17 insertions(+)
drivers/pci/host/vmd.c +17 -0
@@ -763,15 +763,32 @@ 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); +pci_disable_device (pdev);return 0 ; }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; + } +pcim_enable_device (pdev);pci_restore_state (pdev);return 0 ; }
Signature · 1 line
2.11.0
Quoted 10 lines · Scott Bauer
This patch frees up the IRQs we request on the suspend path, and reallocates them on the resume path.
Fixes:
[ 559.964386] CPU 111 disable failed: CPU has 9 vectors assigned and there are only 0 available. [ 559.966824] Error taking CPU111 down: -34 [ 559.966825] Non-boot CPUs are not disabled [ 559.966826] Enabling non-boot CPUs ...From the "RESEND", I assume this is identical to the original posting.
I disposed of the original as "changes requested" because of Jon's comments. Keith subsequently chimed in saying he thought it was OK as-is. Keith, can I convert that to a formal ack from you?
Quoted 45 lines
Signed-off-by Scott Bauer <[email protected]>--- drivers/pci/host/vmd.c | 17 +++++++++++++++++ 1 file changed, 17 insertions(+)drivers/pci/host/vmd.c +17
-0@@ -763,15 +763,32 @@ 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); +pci_disable_device (pdev);return 0 ; }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; + } +pcim_enable_device (pdev);pci_restore_state (pdev);return 0 ; }Signature · 1 line
2.11.0
Keith Busch
Acked-byQuoted 10 lines · Bjorn Helgaas
Quoted 8 lines · Scott Bauer
This patch frees up the IRQs we request on the suspend path, and reallocates them on the resume path.
Fixes:
[ 559.964386] CPU 111 disable failed: CPU has 9 vectors assigned and there are only 0 available. [ 559.966824] Error taking CPU111 down: -34 [ 559.966825] Non-boot CPUs are not disabled [ 559.966826] Enabling non-boot CPUs ...
Quoted 5 lines
From the "RESEND", I assume this is identical to the original posting.
I disposed of the original as "changes requested" because of Jon's comments. Keith subsequently chimed in saying he thought it was OK as-is. Keith, can I convert that to a formal ack from you?
Yes, I'm okay with this patch.
Quoted 45 lines
Quoted 45 lines
Signed-off-by Scott Bauer <[email protected]>--- drivers/pci/host/vmd.c | 17 +++++++++++++++++ 1 file changed, 17 insertions(+)drivers/pci/host/vmd.c +17
-0@@ -763,15 +763,32 @@ 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); +pci_disable_device (pdev);return 0 ; }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; + } +pcim_enable_device (pdev);pci_restore_state (pdev);return 0 ; }Signature · 1 line
2.11.0
Quoted 10 lines · Scott Bauer
This patch frees up the IRQs we request on the suspend path, and reallocates them on the resume path.
Fixes:
[ 559.964386] CPU 111 disable failed: CPU has 9 vectors assigned and there are only 0 available. [ 559.966824] Error taking CPU111 down: -34 [ 559.966825] Non-boot CPUs are not disabled [ 559.966826] Enabling non-boot CPUs ...Signed-off-by Scott Bauer <[email protected]>
Applied with Keith's ack to pci/host-vmd for v4.14, thanks!
Quoted 44 lines
--- drivers/pci/host/vmd.c | 17 +++++++++++++++++ 1 file changed, 17 insertions(+)drivers/pci/host/vmd.c +17
-0@@ -763,15 +763,32 @@ 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); +pci_disable_device (pdev);return 0 ; }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; + } +pcim_enable_device (pdev);pci_restore_state (pdev);return 0 ; }Signature · 1 line
2.11.0