From: "Daniel P. Berrangé" <berrange@redhat.com>
To: David Woodhouse <dwmw2@infradead.org>
Cc: Sandesh Patel <sandesh.patel@nutanix.com>,
"qemu-devel@nongnu.org" <qemu-devel@nongnu.org>,
Rob Scheepens <rob.scheepens@nutanix.com>,
Prerna Saxena <confluence@nutanix.com>,
Alexander Graf <agraf@csgraf.de>
Subject: Re: More than 255 vcpus Windows VM setup without viommu ?
Date: Tue, 1 Oct 2024 14:33:24 +0100 [thread overview]
Message-ID: <Zvv6JOiyyQZp39pI@redhat.com> (raw)
In-Reply-To: <a80c99b0e10e71a5a301c884d699eeaff3893349.camel@infradead.org>
On Sat, Sep 28, 2024 at 03:59:32PM +0100, David Woodhouse wrote:
> On Tue, 2024-07-02 at 05:17 +0000, Sandesh Patel wrote:
> >
> > The error is due to invalid MSIX routing entry passed to KVM.
> >
> > The VM boots fine if we attach a vIOMMU but adding a vIOMMU can
> > potentially result in IO performance loss in guest.
> > I was interested to know if someone could boot a large Windows VM by
> > some other means like kvm-msi-ext-dest-id.
>
> I think I may (with Alex Graf's suggestion) have found the Windows bug
> with Intel IOMMU.
>
> It looks like when interrupt remapping is enabled with an AMD CPU,
> Windows *assumes* it can generate AMD-style MSI messages even if the
> IOMMU is an Intel one. If we put a little hack into the IOMMU interrupt
> remapping to make it interpret an AMD-style message, Windows seems to
> boot at least a little bit further than it did before...
Rather than filling the intel IOMMU impl with hacks to make Windows
boot on AMD virtualized CPUs, shouldn't we steer people to use the
amd-iommu that QEMU already ships [1] ?
Even if we hack the intel iommu, so current Windows boots, can we
have confidence that future Windows releases will correctly boot
on an intel iommu with AMD CPUs virtualized ?
> --- a/hw/i386/intel_iommu.c
> +++ b/hw/i386/intel_iommu.c
> @@ -3550,9 +3550,14 @@ static int vtd_interrupt_remap_msi(IntelIOMMUState *iommu,
>
> /* This is compatible mode. */
> if (addr.addr.int_mode != VTD_IR_INT_FORMAT_REMAP) {
> - memcpy(translated, origin, sizeof(*origin));
> - goto out;
> - }
> + if (0) {
> + memcpy(translated, origin, sizeof(*origin));
> + goto out;
> + }
> + /* Pretend it's an AMD-format remappable MSI (Yay Windows!) */
> + index = origin->data & 0x7ff;
> + printf("Compat mode index 0x%x\n", index);
> + } else
>
> index = addr.addr.index_h << 15 | addr.addr.index_l;
With regards,
Daniel
[1] the AMD IOMMU is not perfect, because currently it has a significant
QEMU impl flaw in that it secretly creates an extra PCI device behind
the scenes. This makes it impossible for libvirt to manage the PCI
resources from the AMD IOMMU. I feel like this ought to be solvable
though, as it is just a QEMU impl decison that can be corrected.
--
|: https://berrange.com -o- https://www.flickr.com/photos/dberrange :|
|: https://libvirt.org -o- https://fstop138.berrange.com :|
|: https://entangle-photo.org -o- https://www.instagram.com/dberrange :|
next prev parent reply other threads:[~2024-10-01 14:07 UTC|newest]
Thread overview: 17+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-07-02 5:17 More than 255 vcpus Windows VM setup without viommu ? Sandesh Patel
2024-07-02 9:04 ` David Woodhouse
2024-07-03 16:01 ` Sandesh Patel
2024-07-08 9:13 ` David Woodhouse
2024-07-11 7:26 ` David Woodhouse
2024-07-11 11:23 ` David Woodhouse
2024-07-11 11:52 ` Sandesh Patel
2024-07-16 5:13 ` Sandesh Patel
2024-07-24 9:22 ` David Woodhouse
2024-08-01 10:28 ` Sandesh Patel
2024-09-28 14:59 ` David Woodhouse
2024-09-30 15:50 ` David Woodhouse
2024-10-02 11:33 ` Igor Mammedov
2024-10-02 15:30 ` David Woodhouse
2024-10-01 13:33 ` Daniel P. Berrangé [this message]
2024-10-01 16:37 ` David Woodhouse
-- strict thread matches above, loose matches on Subject: below --
2024-07-02 7:20 Sandesh Patel
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=Zvv6JOiyyQZp39pI@redhat.com \
--to=berrange@redhat.com \
--cc=agraf@csgraf.de \
--cc=confluence@nutanix.com \
--cc=dwmw2@infradead.org \
--cc=qemu-devel@nongnu.org \
--cc=rob.scheepens@nutanix.com \
--cc=sandesh.patel@nutanix.com \
/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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).