diff mbox

[v6,04/10] PCI/MSI: Don't disable MSI/MSI-X at shutdown

Message ID 20150414104505.GA32015@ad.nay.redhat.com (mailing list archive)
State New, archived
Delegated to: Bjorn Helgaas
Headers show

Commit Message

Fam Zheng April 14, 2015, 10:45 a.m. UTC
On Tue, 04/14 11:47, Michael S. Tsirkin wrote:
> I have investigated this, and I at this point I think the hang is basically
> a non issue. So the commit log should say
> 
> 	if the driver hasn't registered an interrupt handler for it, the interrupt
> 	is never deasserted and causes spurious interrupts, typically
> 	followed by kernel disabling the irq.

Or, how about disabling intx immediately too?


> 
> 
> > >> [bhelgaas: changelog]
> > >> Reported-by: Fam Zheng <famz@redhat.com>
> > >> Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
> > >> Signed-off-by: Bjorn Helgaas <bhelgaas@google.com>
> > >> CC: Yinghai Lu <yhlu.kernel.send@gmail.com>
> > >> CC: Ulrich Obergfell <uobergfe@redhat.com>
> > >> CC: Rusty Russell <rusty@rustcorp.com.au>
> > >> ---
> > >>  drivers/pci/pci-driver.c |    2 --
> > >>  1 file changed, 2 deletions(-)
> > >>
> > >> diff --git a/drivers/pci/pci-driver.c b/drivers/pci/pci-driver.c
> > >> index 3cb2210de553..38a602cb9fb7 100644
> > >> --- a/drivers/pci/pci-driver.c
> > >> +++ b/drivers/pci/pci-driver.c
> > >> @@ -450,8 +450,6 @@ static void pci_device_shutdown(struct device *dev)
> > >>
> > >>       if (drv && drv->shutdown)
> > >>               drv->shutdown(pci_dev);
> > >> -     pci_msi_shutdown(pci_dev);
> > >> -     pci_msix_shutdown(pci_dev);
> > >>
> > >>  #ifdef CONFIG_KEXEC
> > >>       /*
> > >>
--
To unsubscribe from this list: send the line "unsubscribe linux-pci" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Comments

Michael S. Tsirkin April 14, 2015, 10:49 a.m. UTC | #1
On Tue, Apr 14, 2015 at 06:45:05PM +0800, Fam Zheng wrote:
> On Tue, 04/14 11:47, Michael S. Tsirkin wrote:
> > I have investigated this, and I at this point I think the hang is basically
> > a non issue. So the commit log should say
> > 
> > 	if the driver hasn't registered an interrupt handler for it, the interrupt
> > 	is never deasserted and causes spurious interrupts, typically
> > 	followed by kernel disabling the irq.
> 
> Or, how about disabling intx immediately too?
> 
> diff --git a/drivers/pci/pci-driver.c b/drivers/pci/pci-driver.c
> index 3cb2210..dd7dcc1 100644
> --- a/drivers/pci/pci-driver.c
> +++ b/drivers/pci/pci-driver.c
> @@ -452,6 +452,7 @@ static void pci_device_shutdown(struct device *dev)
>                 drv->shutdown(pci_dev);
>         pci_msi_shutdown(pci_dev);
>         pci_msix_shutdown(pci_dev);
> +       pci_intx(pci_dev, 0);
> 
>  #ifdef CONFIG_KEXEC
>         /*

Needs to happen before msi shutdown then.
There are also drivers which call pci_intx from interrupt
handler, which will conflict.

> > 
> > 
> > > >> [bhelgaas: changelog]
> > > >> Reported-by: Fam Zheng <famz@redhat.com>
> > > >> Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
> > > >> Signed-off-by: Bjorn Helgaas <bhelgaas@google.com>
> > > >> CC: Yinghai Lu <yhlu.kernel.send@gmail.com>
> > > >> CC: Ulrich Obergfell <uobergfe@redhat.com>
> > > >> CC: Rusty Russell <rusty@rustcorp.com.au>
> > > >> ---
> > > >>  drivers/pci/pci-driver.c |    2 --
> > > >>  1 file changed, 2 deletions(-)
> > > >>
> > > >> diff --git a/drivers/pci/pci-driver.c b/drivers/pci/pci-driver.c
> > > >> index 3cb2210de553..38a602cb9fb7 100644
> > > >> --- a/drivers/pci/pci-driver.c
> > > >> +++ b/drivers/pci/pci-driver.c
> > > >> @@ -450,8 +450,6 @@ static void pci_device_shutdown(struct device *dev)
> > > >>
> > > >>       if (drv && drv->shutdown)
> > > >>               drv->shutdown(pci_dev);
> > > >> -     pci_msi_shutdown(pci_dev);
> > > >> -     pci_msix_shutdown(pci_dev);
> > > >>
> > > >>  #ifdef CONFIG_KEXEC
> > > >>       /*
> > > >>
--
To unsubscribe from this list: send the line "unsubscribe linux-pci" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
diff mbox

Patch

diff --git a/drivers/pci/pci-driver.c b/drivers/pci/pci-driver.c
index 3cb2210..dd7dcc1 100644
--- a/drivers/pci/pci-driver.c
+++ b/drivers/pci/pci-driver.c
@@ -452,6 +452,7 @@  static void pci_device_shutdown(struct device *dev)
                drv->shutdown(pci_dev);
        pci_msi_shutdown(pci_dev);
        pci_msix_shutdown(pci_dev);
+       pci_intx(pci_dev, 0);

 #ifdef CONFIG_KEXEC
        /*