Patch "xen/x86: add extra pages to unpopulated-alloc if available" has been added to the 6.6-stable tree

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

 



This is a note to let you know that I've just added the patch titled

    xen/x86: add extra pages to unpopulated-alloc if available

to the 6.6-stable tree which can be found at:
    http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary

The filename of the patch is:
     xen-x86-add-extra-pages-to-unpopulated-alloc-if-avai.patch
and it can be found in the queue-6.6 subdirectory.

If you, or anyone else, feels it should not be added to the stable tree,
please let <stable@xxxxxxxxxxxxxxx> know about it.



commit 2c24c5102e90607457c51fc6a5a5f98f1f143b14
Author: Roger Pau Monne <roger.pau@xxxxxxxxxx>
Date:   Mon Apr 29 17:50:53 2024 +0200

    xen/x86: add extra pages to unpopulated-alloc if available
    
    [ Upstream commit a6aa4eb994ee9ced905743817c5de8451d26b911 ]
    
    Commit 262fc47ac174 ('xen/balloon: don't use PV mode extra memory for zone
    device allocations') removed the addition of the extra memory ranges to the
    unpopulated range allocator, using those only for the balloon driver.
    
    This forces the unpopulated allocator to attach hotplug ranges even when spare
    memory (as part of the extra memory ranges) is available.  Furthermore, on PVH
    domains it defeats the purpose of commit 38620fc4e893 ('x86/xen: attempt to
    inflate the memory balloon on PVH'), as extra memory ranges would only be
    used to map foreign memory if the kernel is built without XEN_UNPOPULATED_ALLOC
    support.
    
    Fix this by adding a helpers that adds the extra memory ranges to the list of
    unpopulated pages, and zeroes the ranges so they are not also consumed by the
    balloon driver.
    
    This should have been part of 38620fc4e893, hence the fixes tag.
    
    Note the current logic relies on unpopulated_init() (and hence
    arch_xen_unpopulated_init()) always being called ahead of balloon_init(), so
    that the extra memory regions are consumed by arch_xen_unpopulated_init().
    
    Fixes: 38620fc4e893 ('x86/xen: attempt to inflate the memory balloon on PVH')
    Signed-off-by: Roger Pau Monné <roger.pau@xxxxxxxxxx>
    Reviewed-by: Juergen Gross <jgross@xxxxxxxx>
    Link: https://lore.kernel.org/r/20240429155053.72509-1-roger.pau@xxxxxxxxxx
    Signed-off-by: Juergen Gross <jgross@xxxxxxxx>
    Signed-off-by: Sasha Levin <sashal@xxxxxxxxxx>

diff --git a/arch/x86/xen/enlighten.c b/arch/x86/xen/enlighten.c
index a01ca255b0c64..b88722dfc4f86 100644
--- a/arch/x86/xen/enlighten.c
+++ b/arch/x86/xen/enlighten.c
@@ -382,3 +382,36 @@ void __init xen_add_extra_mem(unsigned long start_pfn, unsigned long n_pfns)
 
 	memblock_reserve(PFN_PHYS(start_pfn), PFN_PHYS(n_pfns));
 }
+
+#ifdef CONFIG_XEN_UNPOPULATED_ALLOC
+int __init arch_xen_unpopulated_init(struct resource **res)
+{
+	unsigned int i;
+
+	if (!xen_domain())
+		return -ENODEV;
+
+	/* Must be set strictly before calling xen_free_unpopulated_pages(). */
+	*res = &iomem_resource;
+
+	/*
+	 * Initialize with pages from the extra memory regions (see
+	 * arch/x86/xen/setup.c).
+	 */
+	for (i = 0; i < XEN_EXTRA_MEM_MAX_REGIONS; i++) {
+		unsigned int j;
+
+		for (j = 0; j < xen_extra_mem[i].n_pfns; j++) {
+			struct page *pg =
+				pfn_to_page(xen_extra_mem[i].start_pfn + j);
+
+			xen_free_unpopulated_pages(1, &pg);
+		}
+
+		/* Zero so region is not also added to the balloon driver. */
+		xen_extra_mem[i].n_pfns = 0;
+	}
+
+	return 0;
+}
+#endif




[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Index of Archives]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux