From: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>
To: Bjorn Helgaas <bhelgaas@google.com>
Cc: Yijing Wang <wangyijing@huawei.com>,
linux-pci@vger.kernel.org, David Vrabel <david.vrabel@citrix.com>,
xen-devel@lists.xenproject.org
Subject: Re: [PATCH 1/3] x86/xen: Introduce a global flag to fix the MSI mask bug
Date: Tue, 11 Nov 2014 17:04:20 -0500 [thread overview]
Message-ID: <20141111220420.GA30289@laptop.dumpdata.com> (raw)
In-Reply-To: <20141111202430.GH28161@google.com>
On Tue, Nov 11, 2014 at 01:24:30PM -0700, Bjorn Helgaas wrote:
> On Tue, Nov 11, 2014 at 10:45:38AM -0500, Konrad Rzeszutek Wilk wrote:
> > On Mon, Nov 10, 2014 at 05:04:56PM -0700, Bjorn Helgaas wrote:
> > > On Mon, Oct 27, 2014 at 10:44:36AM +0800, Yijing Wang wrote:
> > > > Commit 0e4ccb1505a9 ("PCI: Add x86_msi.msi_mask_irq() and msix_mask_irq()")
> > > > fixed MSI mask bug which may cause kernel crash. But the commit
> > > > made MSI code complex. Introduce a new global flag "pci_msi_ignore_mask"
> > > > to ignore MSI/MSI-X to fix this issue, it's a cleaner solution.
> > > > And the commit 0e4ccb1505a9 will be reverted in the later patch.
> > >
> > > The 0e4ccb1505a9 changelog says Xen guests can't write to MSI-X BARs.
> > > But it makes mask_irq a no-op for both MSI-X and MSI. The MSI mask bit is
> > > in config space, not in memory space. So why does mask_irq need to be a
> > > no-op for MSI as well? Are Xen guests prohibited from writing to config
> >
> > The PV guests it refers do not do write to config space. They have
> > an PCI frontend and backend driver which communicates to the backend (the
> > trusted domain) to setup the MSI and MSI-X. The 'pci_xen_init' (arch/x86/pci/xen.c)
> > is the one that sets up the overrides. When an MSI or MSI-X is requested
> > it is done via the request_irq which ends up calling 'xen_setup_msi_irqs'.
> > If you look there you can see:
> >
> > 173 if (type == PCI_CAP_ID_MSIX)
> > 174 ret = xen_pci_frontend_enable_msix(dev, v, nvec);
> > 175 else
> > 176 ret = xen_pci_frontend_enable_msi(dev, v);
> > 177 if (ret)
> > 178 goto error;
> >
> > Which are the calls to the Xen PCI driver to communicate with the
> > backend to setup the MSI.
> >
> > > space, too? (It's fine if they are; it's just that the changelog
> > > specifically mentioned MSI-X memory space tables, and it didn't mention
> > > config space at all.)
> >
> > Correct. The config space is accessible to the guest but if it writes
> > to it - all of those values are ignored by the hypervisor - and that
> > is because the backend is suppose to communicate to the hypervisor
> > whether the guest can indeed setup MSI or MSI-X.
> >
> > >
> > > And I *assume* there's some Xen mechanism that accomplishes the mask_irq in
> > > a different way, since the actual mask_irq interface does nothing? (This
> > > is really a question for 0e4ccb1505a9, since I don't think this particular
> > > patch changes anything in that respect.)
> >
> > Correct. 'request_irq' ends up doing that. Or rather it ends up
> > calling xen_setup_msi_irqs which takes care of that.
> >
> > The Xen PV guests (not to be confused with Xen HVM guests) run without
> > any emulated devices. That means most of the x86 platform things - ioports,
> > VGA, etc - are removed. Instead that functionality is provided via
> > frontend drivers that communicate to the backend via a ring.
> >
> > Hopefully this clarifies it?
>
> I think so. I propose the following changelog. Let me know if it's still
> inaccurate:
>
> PCI/MSI: Add pci_msi_ignore_mask to prevent MSI/MSI-X BAR writes
>
> MSI-X vector Mask Bits are in MSI-X Tables in PCI memory space. Xen guests
Xen PV
> can't write to those tables. MSI vector Mask Bits are in PCI configuration
> space. Xen guests can write to config space, but those writes are ignored.
>
> Commit 0e4ccb1505a9 ("PCI: Add x86_msi.msi_mask_irq() and
> msix_mask_irq()") added a way to override default_mask_msi_irqs() and
> default_mask_msix_irqs() so they can be no-ops in Xen guests, but this is
Xen PV guests
> more complicated than necessary.
>
> Add "pci_msi_ignore_mask" in the core PCI MSI code. If set,
> default_mask_msi_irqs() and default_mask_msix_irqs() return without doing
> anything. This is less flexible, but much simpler.
>
> I guess you mentioned PV and HVM guests, and it sounds like all this only
> applies to HVM guests.
No, PV guests :-)
HVM guests will do the normal x86 type machinery.
>
> Bjorn
next prev parent reply other threads:[~2014-11-11 22:04 UTC|newest]
Thread overview: 31+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-10-27 2:44 [PATCH 0/3] xen MSI code clean up Yijing Wang
2014-10-27 2:44 ` [PATCH 1/3] x86/xen: Introduce a global flag to fix the MSI mask bug Yijing Wang
2014-10-27 2:44 ` Yijing Wang
2014-10-27 11:09 ` [Xen-devel] " David Vrabel
2014-10-27 19:45 ` Konrad Rzeszutek Wilk
2014-10-28 16:44 ` David Vrabel
2014-10-28 16:44 ` [Xen-devel] " David Vrabel
2014-10-28 16:57 ` Konrad Rzeszutek Wilk
2014-10-28 16:57 ` [Xen-devel] " Konrad Rzeszutek Wilk
2014-10-27 19:45 ` Konrad Rzeszutek Wilk
2014-10-27 11:09 ` David Vrabel
2014-11-11 0:04 ` Bjorn Helgaas
2014-11-11 1:49 ` Yijing Wang
2014-11-11 1:49 ` Yijing Wang
2014-11-11 15:45 ` Konrad Rzeszutek Wilk
2014-11-11 15:45 ` Konrad Rzeszutek Wilk
2014-11-11 20:24 ` Bjorn Helgaas
2014-11-11 20:24 ` Bjorn Helgaas
2014-11-11 22:04 ` Konrad Rzeszutek Wilk
2014-11-11 22:04 ` Konrad Rzeszutek Wilk [this message]
2014-11-11 0:04 ` Bjorn Helgaas
2014-10-27 2:44 ` [PATCH 2/3] x86/xen: Revert "PCI: Add x86_msi.msi_mask_irq() and msix_mask_irq()" Yijing Wang
2014-10-27 2:44 ` Yijing Wang
2014-10-27 11:10 ` David Vrabel
2014-10-27 11:10 ` David Vrabel
2014-10-27 2:44 ` [PATCH 3/3] s390/MSI: Use __msi_mask_irq() instead of default_msi_mask_irq() Yijing Wang
2014-10-27 2:44 ` Yijing Wang
2014-11-11 21:23 ` [PATCH 0/3] xen MSI code clean up Bjorn Helgaas
2014-11-11 21:23 ` Bjorn Helgaas
2014-11-12 9:24 ` Sebastian Ott
2014-11-12 9:24 ` Sebastian Ott
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=20141111220420.GA30289@laptop.dumpdata.com \
--to=konrad.wilk@oracle.com \
--cc=bhelgaas@google.com \
--cc=david.vrabel@citrix.com \
--cc=linux-pci@vger.kernel.org \
--cc=wangyijing@huawei.com \
--cc=xen-devel@lists.xenproject.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.