[xen stable-4.11] x86/dom0: Avoid using 1G superpages if shadowing may be necessary

classic Classic list List threaded Threaded
1 message Options
Reply | Threaded
Open this post in threaded view
|

[xen stable-4.11] x86/dom0: Avoid using 1G superpages if shadowing may be necessary

patchbot
commit 49caabf2584a26d16f73b4bd423329f8d99f7e71
Author:     Andrew Cooper <[hidden email]>
AuthorDate: Tue Nov 20 15:35:48 2018 +0100
Commit:     Jan Beulich <[hidden email]>
CommitDate: Tue Nov 20 15:37:42 2018 +0100

    x86/dom0: Avoid using 1G superpages if shadowing may be necessary
   
    The shadow code doesn't support 1G superpages, and will hand #PF[RSVD] back to
    guests.
   
    For dom0's with 512GB of RAM or more (and subject to the P2M alignment), Xen's
    domain builder might use 1G superpages.
   
    Avoid using 1G superpages (falling back to 2M superpages instead) if there is
    a reasonable chance that we may have to shadow dom0.  This assumes that there
    are no circumstances where we will activate logdirty mode on dom0.
   
    Signed-off-by: Andrew Cooper <[hidden email]>
    Reviewed-by: Jan Beulich <[hidden email]>
    master commit: 96f6ee15ad7ca96472779fc5c083b4149495c584
    master date: 2018-11-12 11:26:04 +0000
---
 xen/arch/x86/pv/dom0_build.c | 9 ++++++++-
 1 file changed, 8 insertions(+), 1 deletion(-)

diff --git a/xen/arch/x86/pv/dom0_build.c b/xen/arch/x86/pv/dom0_build.c
index 34c77bcbe4..a68d53ffaf 100644
--- a/xen/arch/x86/pv/dom0_build.c
+++ b/xen/arch/x86/pv/dom0_build.c
@@ -148,7 +148,14 @@ static __init void setup_pv_physmap(struct domain *d, unsigned long pgtbl_pfn,
         pl3e += l3_table_offset(vphysmap_start);
         if ( !l3e_get_intpte(*pl3e) )
         {
-            if ( cpu_has_page1gb &&
+            /*
+             * 1G superpages aren't supported by the shadow code.  Avoid using
+             * them if we are liable to need to start shadowing dom0.  This
+             * assumes that there are no circumstances where we will activate
+             * logdirty mode on dom0.
+             */
+            if ( (!IS_ENABLED(CONFIG_SHADOW_PAGING) ||
+                  !d->arch.pv_domain.check_l1tf) && cpu_has_page1gb &&
                  !(vphysmap_start & ((1UL << L3_PAGETABLE_SHIFT) - 1)) &&
                  vphysmap_end >= vphysmap_start + (1UL << L3_PAGETABLE_SHIFT) &&
                  (page = alloc_domheap_pages(d,
--
generated by git-patchbot for /home/xen/git/xen.git#stable-4.11

_______________________________________________
Xen-changelog mailing list
[hidden email]
https://lists.xenproject.org/xen-changelog