Message ID | 20210119130759.98296-1-roger.pau@citrix.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | [v2] x86/CPUID: unconditionally set XEN_HVM_CPUID_IOMMU_MAPPINGS | expand |
On 19.01.2021 14:07, Roger Pau Monne wrote: > This is a revert of f5cfa0985673 plus a rework of the comment that > accompanies the setting of the flag so we don't forget why it needs to > be unconditionally set: it's indicating whether the version of Xen has > the original issue fixed and IOMMU entries are created for > grant/foreign maps. > > If the flag is only exposed when the IOMMU is enabled the guest could > resort to use bounce buffers when running backends as it would assume > the underlying Xen version still has the bug present and thus > grant/foreign maps cannot be used with devices. > > Signed-off-by: Roger Pau Monné <roger.pau@citrix.com> Acked-by: Jan Beulich <jbeulich@suse.com> This time for real, I suppose. Jan
On Tue, Jan 19, 2021 at 03:26:22PM +0100, Jan Beulich wrote: > On 19.01.2021 14:07, Roger Pau Monne wrote: > > This is a revert of f5cfa0985673 plus a rework of the comment that > > accompanies the setting of the flag so we don't forget why it needs to > > be unconditionally set: it's indicating whether the version of Xen has > > the original issue fixed and IOMMU entries are created for > > grant/foreign maps. > > > > If the flag is only exposed when the IOMMU is enabled the guest could > > resort to use bounce buffers when running backends as it would assume > > the underlying Xen version still has the bug present and thus > > grant/foreign maps cannot be used with devices. > > > > Signed-off-by: Roger Pau Monné <roger.pau@citrix.com> > > Acked-by: Jan Beulich <jbeulich@suse.com> > > This time for real, I suppose. Won't believe it until it hits the repo ;). Thanks, Roger.
On 19.01.2021 15:31, Roger Pau Monné wrote: > On Tue, Jan 19, 2021 at 03:26:22PM +0100, Jan Beulich wrote: >> On 19.01.2021 14:07, Roger Pau Monne wrote: >>> This is a revert of f5cfa0985673 plus a rework of the comment that >>> accompanies the setting of the flag so we don't forget why it needs to >>> be unconditionally set: it's indicating whether the version of Xen has >>> the original issue fixed and IOMMU entries are created for >>> grant/foreign maps. >>> >>> If the flag is only exposed when the IOMMU is enabled the guest could >>> resort to use bounce buffers when running backends as it would assume >>> the underlying Xen version still has the bug present and thus >>> grant/foreign maps cannot be used with devices. >>> >>> Signed-off-by: Roger Pau Monné <roger.pau@citrix.com> >> >> Acked-by: Jan Beulich <jbeulich@suse.com> >> >> This time for real, I suppose. > > Won't believe it until it hits the repo ;). There you go. But well, we can always revert ... ;-) Jan
diff --git a/xen/arch/x86/traps.c b/xen/arch/x86/traps.c index 4bd2cb6a1a..a6f1d45e77 100644 --- a/xen/arch/x86/traps.c +++ b/xen/arch/x86/traps.c @@ -1049,11 +1049,17 @@ void cpuid_hypervisor_leaves(const struct vcpu *v, uint32_t leaf, res->a |= XEN_HVM_CPUID_X2APIC_VIRT; /* - * Indicate that memory mapped from other domains (either grants or - * foreign pages) has valid IOMMU entries. + * 1) Xen 4.10 and older was broken WRT grant maps requesting a DMA + * mapping, and forgot to honour the guest's request. + * 2) 4.11 (and presumably backports) fixed the bug, so the map + * hypercall actually did what the guest asked. + * 3) To work around the bug, guests must bounce buffer all DMA that + * would otherwise use a grant map, because it doesn't know whether the + * DMA is originating from an emulated or a real device. + * 4) This flag tells guests it is safe not to bounce-buffer all DMA to + * work around the bug. */ - if ( is_iommu_enabled(d) ) - res->a |= XEN_HVM_CPUID_IOMMU_MAPPINGS; + res->a |= XEN_HVM_CPUID_IOMMU_MAPPINGS; /* Indicate presence of vcpu id and set it in ebx */ res->a |= XEN_HVM_CPUID_VCPU_ID_PRESENT;
This is a revert of f5cfa0985673 plus a rework of the comment that accompanies the setting of the flag so we don't forget why it needs to be unconditionally set: it's indicating whether the version of Xen has the original issue fixed and IOMMU entries are created for grant/foreign maps. If the flag is only exposed when the IOMMU is enabled the guest could resort to use bounce buffers when running backends as it would assume the underlying Xen version still has the bug present and thus grant/foreign maps cannot be used with devices. Signed-off-by: Roger Pau Monné <roger.pau@citrix.com> --- Changes since v1: - Expand commit message. - Add slightly expanded comment from Andrew into the code. --- xen/arch/x86/traps.c | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-)