All of lore.kernel.org
 help / color / mirror / Atom feed
From: Fam Zheng <famz@redhat.com>
To: Bjorn Helgaas <bhelgaas@google.com>
Cc: "Eric W. Biederman" <ebiederm@xmission.com>,
	"Michael S. Tsirkin" <mst@redhat.com>,
	"linux-pci@vger.kernel.org" <linux-pci@vger.kernel.org>,
	Rusty Russell <rusty@rustcorp.com.au>,
	Ulrich Obergfell <uobergfe@redhat.com>,
	Yinghai Lu <yhlu.kernel.send@gmail.com>,
	Yijing Wang <wangyijing@huawei.com>,
	Yinghai Lu <yinghai@kernel.org>
Subject: Re: [PATCH v6 04/10] PCI/MSI: Don't disable MSI/MSI-X at shutdown
Date: Fri, 17 Apr 2015 09:05:25 +0800	[thread overview]
Message-ID: <20150417010525.GD28705@ad.nay.redhat.com> (raw)
In-Reply-To: <20150416194245.GB20701@google.com>

On Thu, 04/16 14:42, Bjorn Helgaas wrote:
> On Mon, Apr 13, 2015 at 11:45:31AM -0500, Eric W. Biederman wrote:
> > ...
> > The thing is not disabling msi interrupts for the case described in the
> > buzilla report is the wrong fix.
> > 
> > The report is about a buggy driver doing the wrong thing.  Until someone
> > ships a system that is msi native (aka no intx support) disabling msi
> > interrupts as shutdown is the right thing to do.  If there is something
> > that handles intx interrupts it is not an msi native system.
> > 
> > The real bug is probably disabling bugging interrupt detection on the
> > kernel command line.
> > 
> > Beyond that to handle kexec cleanly something needs to stop the
> > interrupts and stop the the DMA transfers.   Which in the short term
> > means someone probably needs to write a shutdown method for the buggy
> > driver.
> > 
> > An interrupt coming in almost always implies a DMA having completed,
> > and if that DMA completed in the wrong spot the kexec'd kernel will be
> > toast.
> > 
> > We disable interrupts at boot so that a kernel started with
> > kexec-on-panic (which doesn't shut anything down) can boot.  There are
> > probably other valid use cases (like native msi interrupts) but I am not
> > aware of them.  But according to the pci spec shutting down msi
> > interrupts at boot should be a noop.
> > 
> > So in summary not disabling MSI/MSI-X at shutdown is the wrong fix,
> > and someone needs to fix a buggy driver.
> 
> Are you saying that:
> 
>   - pci_device_shutdown() should continue to call pci_msi_shutdown() and
>     pci_msix_shutdown() as it does today, and
> 
>   - virtio_pci_driver should implement a .shutdown method?
> 
> I'm missing a lot of the context, and this is really outside my normal
> sphere, so I'm trying to figure out the scenario we're talking about.
> Here's my pitiful guess (Michael/Fam, please correct me where I'm wrong):
> 
>   qemu emulates machine with virtio device X, e.g., [1af4:1001]
> 
>   guest Linux startup
>     guest virtio-pci driver claims device X
>       virtio_pci_probe
> 	register_virtio_device		# adds new device Y on virtio_bus
> 
>   guest Linux virtblk_probe		# virtio_driver.probe for device Y
>     init_vq
>       ...
> 	vp_find_vqs
> 	  vp_try_to_find_vqs
> 	    vp_request_msix_vectors
> 	      pci_enable_msix_exact	# enables MSI-X for qemu virtio device X
> 	      request_irq(..., vp_config_changed, ...)
> 
>   guest Linux shutdown
>     kernel_halt
>       ...
> 	pci_device_shutdown		# device X
> 	  drv->shutdown
> 	  pci_msi_shutdown
> 	  pci_msix_shutdown
> 	    clear PCI_MSIX_FLAGS_ENABLE
> 
>   qemu virtio device X generates interrupt
>     virtio_pci_notify
>       if (!msix_enabled)		# qemu reads MSIX_ENABLE_MASK
> 	pci_set_irq
> 	  pci_irq_handler		# assert INTx in guest
> 
>   guest Linux virtio-pci has no ISR for INTx
> 
> So now the guest Linux has INTx asserted, but it has no ISR for it, so the
> CPU receiving the IRQ is stuck calling do_IRQ() endlessly.

Exactly.

Fam

  reply	other threads:[~2015-04-17  1:05 UTC|newest]

Thread overview: 30+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-04-10 22:54 [PATCH v6 00/10] PCI: Fix unhandled interrupt on shutdown Bjorn Helgaas
2015-04-10 22:54 ` [PATCH v6 01/10] PCI/MSI: Rename msi_set_enable(), msix_clear_and_set_ctrl() Bjorn Helgaas
2015-04-11  7:30   ` Greg KH
2015-04-11 16:01     ` Bjorn Helgaas
2015-04-10 22:54 ` [PATCH v6 02/10] PCI/MSI: Export pci_msi_set_enable(), pci_msix_clear_and_set_ctrl() Bjorn Helgaas
2015-04-10 22:54 ` [PATCH v6 03/10] PCI/MSI: Disable MSI at enumeration even if kernel doesn't support MSI Bjorn Helgaas
2015-04-10 22:54 ` [PATCH v6 04/10] PCI/MSI: Don't disable MSI/MSI-X at shutdown Bjorn Helgaas
2015-04-13  9:37   ` Fam Zheng
2015-04-13 15:41     ` Bjorn Helgaas
2015-04-13 16:45       ` Eric W. Biederman
2015-04-14  9:44         ` Michael S. Tsirkin
2015-04-16 19:42         ` Bjorn Helgaas
2015-04-17  1:05           ` Fam Zheng [this message]
2015-04-14  9:47       ` Michael S. Tsirkin
2015-04-14 10:45         ` Fam Zheng
2015-04-14 10:49           ` Michael S. Tsirkin
2015-04-16  7:30   ` Michael S. Tsirkin
2015-04-10 22:54 ` [PATCH v6 05/10] PCI/MSI: Make pci_msi_shutdown(), pci_msix_shutdown() static Bjorn Helgaas
2015-04-10 22:55 ` [PATCH v6 06/10] virtio_pci: drop pci_msi_off() call during probe Bjorn Helgaas
2015-04-10 22:55 ` [PATCH v6 07/10] ntb: Drop " Bjorn Helgaas
2015-04-10 22:55 ` [PATCH v6 08/10] mic: " Bjorn Helgaas
2015-04-10 22:55 ` [PATCH v6 09/10] PCI/MSI: Drop pci_msi_off() calls from quirks Bjorn Helgaas
2015-04-10 22:55 ` [PATCH v6 10/10] PCI/MSI: Remove unused pci_msi_off() Bjorn Helgaas
2015-04-26  6:50 ` [PATCH v6 00/10] PCI: Fix unhandled interrupt on shutdown Michael S. Tsirkin
2015-05-06 21:03   ` Bjorn Helgaas
2015-05-07  0:53     ` Eric W. Biederman
2015-05-07 15:04       ` Bjorn Helgaas
2015-05-10 11:05         ` Michael S. Tsirkin
2015-05-10 11:09     ` Michael S. Tsirkin
2015-05-10 11:42       ` Bjorn Helgaas

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20150417010525.GD28705@ad.nay.redhat.com \
    --to=famz@redhat.com \
    --cc=bhelgaas@google.com \
    --cc=ebiederm@xmission.com \
    --cc=linux-pci@vger.kernel.org \
    --cc=mst@redhat.com \
    --cc=rusty@rustcorp.com.au \
    --cc=uobergfe@redhat.com \
    --cc=wangyijing@huawei.com \
    --cc=yhlu.kernel.send@gmail.com \
    --cc=yinghai@kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.