From: "Radim Krčmář" <rkrcmar@redhat.com>
To: Peter Xu <peterx@redhat.com>
Cc: qemu-devel@nongnu.org, Jan Kiszka <jan.kiszka@web.de>,
Paolo Bonzini <pbonzini@redhat.com>,
Richard Henderson <rth@twiddle.net>,
Eduardo Habkost <ehabkost@redhat.com>,
"Michael S. Tsirkin" <mst@redhat.com>
Subject: Re: [Qemu-devel] [PATCH 2/2] intel-iommu: restrict EIM to quirkless KVM
Date: Wed, 10 Aug 2016 18:59:14 +0200 [thread overview]
Message-ID: <20160810165912.GC1574@potion> (raw)
In-Reply-To: <20160810032946.GG4201@pxdev.xzpeter.org>
2016-08-10 11:29+0800, Peter Xu:
> On Tue, Aug 09, 2016 at 05:03:33PM +0200, Radim Krčmář wrote:
>> APIC in QEMU doesn't support x2APIC so exposing EIM is pointless and KVM
>> has a quirk that needs to be disabled unless we want x2APIC message with
>> destination 0xff to be misinterpreted as a broadcast.
>>
>> Signed-off-by: Radim Krčmář <rkrcmar@redhat.com>
>> ---
>> diff --git a/hw/i386/intel_iommu.c b/hw/i386/intel_iommu.c
>> @@ -31,6 +31,7 @@
>> #include "hw/i386/x86-iommu.h"
>> #include "hw/pci-host/q35.h"
>> #include "sysemu/kvm.h"
>> +#include "kvm_i386.h"
>>
>> /*#define DEBUG_INTEL_IOMMU*/
>> #ifdef DEBUG_INTEL_IOMMU
>> @@ -2364,7 +2365,14 @@ static void vtd_init(IntelIOMMUState *s)
>> s->ecap = VTD_ECAP_QI | VTD_ECAP_IRO;
>>
>> if (x86_iommu->intr_supported) {
>> - s->ecap |= VTD_ECAP_IR | VTD_ECAP_EIM | VTD_ECAP_MHMV;
>> + s->ecap |= VTD_ECAP_IR | VTD_ECAP_MHMV;
>> + /* QEMU APIC does not support x2APIC and KVM does not work well without
>> + * disabling a quirk. IOMMU is unmigratable so we unconditionally use
>> + * optional KVM features.
>> + */
>> + if (kvm_irqchip_in_kernel() && kvm_disable_x2apic_broadcast_quirk()) {
>> + s->ecap |= VTD_ECAP_EIM;
>> + }
>
> Good to me if this patch is only going to disable x2apic when we
> failed to disable the x2apic broadcast quirk in KVM.
Do you mean to also allow QEMU's APIC?
if (!kvm_irqchip_in_kernel() || kvm_disable_x2apic_broadcast_quirk())
Thanks.
> Question: still not too clear about how KVM treats the case when
> x2apic and xapic are used in a single VM. E.g., if dest_id of an
> interrupt is 0xff from a peripheral device, how should I know this is
> a x2apic broadcast to 0-7 cpu in cluster 0, or an apic broadcast to
> all?
If a KVM guest has LAPICs in both x and x2 modes, then every interrupt
arrives to all LAPICs and is accepted according to ID/LDR/DFR where
every LAPIC assumes that the sender matches LAPIC's mode => all xLAPICs
would accept 0xff and x2LAPICs with ID 0-7 would as well.
kvm_apic_match_dest() is the function that decides and kvm_apic_mda()
does most of the magic. The quirk disables a case that translated 0xff
to 0xffffffff for x2LAPICs.
I don't know how real hardware does it and the behavior might even
differ between FSB and QPI. I think KVM differs from both of them, but
it's not that any behavior makes a difference in practice, so running a
test kernel to figure it out has never been a priority ...
next prev parent reply other threads:[~2016-08-10 16:59 UTC|newest]
Thread overview: 17+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-08-09 15:03 [Qemu-devel] [PATCH for-2.7 0/2] intel-iommu: restrict EIM to quirkless KVM Radim Krčmář
2016-08-09 15:03 ` [Qemu-devel] [PATCH 1/2] linux-headers: update to v4.8-rc1 Radim Krčmář
2016-08-09 16:11 ` Radim Krčmář
2016-08-09 15:03 ` [Qemu-devel] [PATCH 2/2] intel-iommu: restrict EIM to quirkless KVM Radim Krčmář
2016-08-10 3:29 ` Peter Xu
2016-08-10 16:59 ` Radim Krčmář [this message]
2016-08-11 3:33 ` Peter Xu
2016-08-09 15:31 ` [Qemu-devel] [PATCH for-2.7 0/2] " no-reply
2016-08-09 16:07 ` [Qemu-devel] [PATCH] checkpatch: allow tabs in linux-headers Radim Krčmář
2016-08-09 16:14 ` Paolo Bonzini
2016-08-09 16:37 ` Radim Krčmář
2016-08-09 16:39 ` Paolo Bonzini
2016-08-09 16:57 ` Radim Krčmář
2016-08-10 7:09 ` Cornelia Huck
2016-08-10 13:55 ` Radim Krčmář
2016-08-10 14:01 ` Cornelia Huck
2016-08-09 17:32 ` no-reply
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=20160810165912.GC1574@potion \
--to=rkrcmar@redhat.com \
--cc=ehabkost@redhat.com \
--cc=jan.kiszka@web.de \
--cc=mst@redhat.com \
--cc=pbonzini@redhat.com \
--cc=peterx@redhat.com \
--cc=qemu-devel@nongnu.org \
--cc=rth@twiddle.net \
/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.