diff mbox series

x86/mm: avoid playing with directmap when self-snoop can be relied upon

Message ID 33f7168c-b177-eed5-14e8-5e7a38dee853@suse.com (mailing list archive)
State New, archived
Headers show
Series x86/mm: avoid playing with directmap when self-snoop can be relied upon | expand

Commit Message

Jan Beulich Oct. 20, 2020, 1:51 p.m. UTC
The set of systems affected by XSA-345 would have been smaller is we had
this in place already: When the processor is capable of dealing with
mismatched cacheability, there's no extra work we need to carry out.

Signed-off-by: Jan Beulich <jbeulich@suse.com>

Comments

Roger Pau Monné Oct. 21, 2020, 3:23 p.m. UTC | #1
On Tue, Oct 20, 2020 at 03:51:18PM +0200, Jan Beulich wrote:
> The set of systems affected by XSA-345 would have been smaller is we had
> this in place already: When the processor is capable of dealing with
> mismatched cacheability, there's no extra work we need to carry out.
> 
> Signed-off-by: Jan Beulich <jbeulich@suse.com>

Acked-by: Roger Pau Monné <roger.pau@citrix.com>

I guess it's not worth using the alternative framework to patch this
up at boot in order to avoid the call in the first place?

Thanks, Roger.
Jan Beulich Oct. 22, 2020, 7:29 a.m. UTC | #2
On 21.10.2020 17:23, Roger Pau Monné wrote:
> On Tue, Oct 20, 2020 at 03:51:18PM +0200, Jan Beulich wrote:
>> The set of systems affected by XSA-345 would have been smaller is we had
>> this in place already: When the processor is capable of dealing with
>> mismatched cacheability, there's no extra work we need to carry out.
>>
>> Signed-off-by: Jan Beulich <jbeulich@suse.com>
> 
> Acked-by: Roger Pau Monné <roger.pau@citrix.com>

Thanks.

> I guess it's not worth using the alternative framework to patch this
> up at boot in order to avoid the call in the first place?

It being non-trivial (afaict) in cases like this one makes me
think that the price to do so would be higher than the gain
to be had. But I might be wrong ...

Jan
diff mbox series

Patch

--- a/xen/arch/x86/mm.c
+++ b/xen/arch/x86/mm.c
@@ -795,6 +795,9 @@  static int update_xen_mappings(unsigned
     unsigned long xen_va =
         XEN_VIRT_START + ((mfn - PFN_DOWN(xen_phys_start)) << PAGE_SHIFT);
 
+    if ( boot_cpu_has(X86_FEATURE_XEN_SELFSNOOP) )
+        return 0;
+
     if ( unlikely(alias) && cacheattr )
         err = map_pages_to_xen(xen_va, _mfn(mfn), 1, 0);
     if ( !err )
@@ -802,6 +805,7 @@  static int update_xen_mappings(unsigned
                      PAGE_HYPERVISOR | cacheattr_to_pte_flags(cacheattr));
     if ( unlikely(alias) && !cacheattr && !err )
         err = map_pages_to_xen(xen_va, _mfn(mfn), 1, PAGE_HYPERVISOR);
+
     return err;
 }