[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Xen-changelog] [xen staging] tools/libxc: Construct 32bit PV guests with L3 A/D bits set



commit ad0b3df0f58451c9df26e455148b2d33957bc347
Author:     Andrew Cooper <andrew.cooper3@xxxxxxxxxx>
AuthorDate: Tue Jan 14 12:17:45 2020 +0000
Commit:     Andrew Cooper <andrew.cooper3@xxxxxxxxxx>
CommitDate: Thu Jan 16 19:26:09 2020 +0000

    tools/libxc: Construct 32bit PV guests with L3 A/D bits set
    
    With the 32 PAE build of Xen gone, 32bit PV guests' top level pagetables no
    longer behave exactly like PAE in hardware.
    
    They should have A/D bits set, for the same performance reasons as apply to
    other levels.  This brings the domain builder in line with how Xen 
constructs
    a 32bit dom0.
    
    As a purely code improvement, make use of range notation to initialise
    identical values in adjacent array elements.
    
    Signed-off-by: Andrew Cooper <andrew.cooper3@xxxxxxxxxx>
    Reviewed-by: Jan Beulich <jbeulich@xxxxxxxx>
    Acked-by: Wei Liu <wl@xxxxxxx>
---
 tools/libxc/xc_dom_x86.c | 13 ++++++++-----
 1 file changed, 8 insertions(+), 5 deletions(-)

diff --git a/tools/libxc/xc_dom_x86.c b/tools/libxc/xc_dom_x86.c
index 1897decedb..155ef69037 100644
--- a/tools/libxc/xc_dom_x86.c
+++ b/tools/libxc/xc_dom_x86.c
@@ -277,8 +277,12 @@ static int alloc_pgtables_x86_32_pae(struct xc_dom_image 
*dom)
         .levels = PGTBL_LEVELS_I386,
         .vaddr_mask = bits_to_mask(VIRT_BITS_I386),
         .lvl_prot[0] = _PAGE_PRESENT|_PAGE_RW|_PAGE_ACCESSED,
-        .lvl_prot[1] = 
_PAGE_PRESENT|_PAGE_RW|_PAGE_ACCESSED|_PAGE_DIRTY|_PAGE_USER,
-        .lvl_prot[2] = _PAGE_PRESENT,
+        /*
+         * 64bit Xen runs 32bit PV guests with the PAE entries in an L3
+         * pagetable.  They don't behave exactly like native PAE paging.
+         */
+        .lvl_prot[1 ... 2] =
+            _PAGE_PRESENT|_PAGE_RW|_PAGE_ACCESSED|_PAGE_DIRTY|_PAGE_USER,
     };
     struct xc_dom_image_x86 *domx86 = dom->arch_private;
 
@@ -488,9 +492,8 @@ static int alloc_pgtables_x86_64(struct xc_dom_image *dom)
         .levels = PGTBL_LEVELS_X86_64,
         .vaddr_mask = bits_to_mask(VIRT_BITS_X86_64),
         .lvl_prot[0] = _PAGE_PRESENT|_PAGE_RW|_PAGE_ACCESSED,
-        .lvl_prot[1] = 
_PAGE_PRESENT|_PAGE_RW|_PAGE_ACCESSED|_PAGE_DIRTY|_PAGE_USER,
-        .lvl_prot[2] = 
_PAGE_PRESENT|_PAGE_RW|_PAGE_ACCESSED|_PAGE_DIRTY|_PAGE_USER,
-        .lvl_prot[3] = 
_PAGE_PRESENT|_PAGE_RW|_PAGE_ACCESSED|_PAGE_DIRTY|_PAGE_USER,
+        .lvl_prot[1 ... 3] =
+            _PAGE_PRESENT|_PAGE_RW|_PAGE_ACCESSED|_PAGE_DIRTY|_PAGE_USER,
     };
     struct xc_dom_image_x86 *domx86 = dom->arch_private;
 
--
generated by git-patchbot for /home/xen/git/xen.git#staging

_______________________________________________
Xen-changelog mailing list
Xen-changelog@xxxxxxxxxxxxxxxxxxxx
https://lists.xenproject.org/xen-changelog

 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.