]> xenbits.xensource.com Git - xen.git/commitdiff
xen/page_alloc: Cover memory unreserved after boot in first_valid_mfn
authorJulien Grall <julien.grall@arm.com>
Fri, 6 Oct 2017 13:22:08 +0000 (15:22 +0200)
committerJan Beulich <jbeulich@suse.com>
Fri, 6 Oct 2017 13:22:08 +0000 (15:22 +0200)
On Arm, some regions (e.g Initramfs, Dom0 Kernel...) are marked as
reserved until the hardware domain is built and they are copied into its
memory. Therefore, they will not be added in the boot allocator via
init_boot_pages.

Instead, init_xenheap_pages will be called once the region are not used
anymore.

Update first_valid_mfn in both init_heap_pages and init_boot_pages
(already exist) to cover all the cases.

This is XSA-245.

Signed-off-by: Julien Grall <julien.grall@arm.com>
[Adjust comment, added locking around first_valid_mfn update]
Signed-off-by: Boris Ostrovsky <boris.ostrovsky@oracle.com>
Acked-by: Stefano Stabellini <sstabellini@kernel.org>
Reported-and-Tested-by: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>
master commit: ec6d9023e1f54cdccbf2e4c63cf947f1be2b1e8e
master date: 2017-09-29 13:22:52 -0700

xen/common/page_alloc.c

index 7d6d20c00a2ba062dba587d4a64efd35a831f882..92d9c14f0615358461a88e23707709b37fae2ecc 100644 (file)
@@ -1190,6 +1190,16 @@ static void init_heap_pages(
 {
     unsigned long i;
 
+    /*
+     * Some pages may not go through the boot allocator (e.g reserved
+     * memory at boot but released just after --- kernel, initramfs,
+     * etc.).
+     * Update first_valid_mfn to ensure those regions are covered.
+     */
+    spin_lock(&heap_lock);
+    first_valid_mfn = min_t(unsigned long, page_to_mfn(pg), first_valid_mfn);
+    spin_unlock(&heap_lock);
+
     for ( i = 0; i < nr_pages; i++ )
     {
         unsigned int nid = phys_to_nid(page_to_maddr(pg+i));