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

[Xen-devel] [PATCH RFC] xen/balloon: check whether a page is pointed to scratch page MFN



Now that balloon pages might have two kind of P2M entries, a)
INVALID_P2M_ENTRY when that page is never used, b) mfn of one of the
many ballooned scratch pages. Refelct this in increase_reservation to
avoid hitting BUG_ON.

Signed-off-by: Wei Liu <wei.liu2@xxxxxxxxxx>
---
 drivers/xen/balloon.c |   21 ++++++++++++++++++++-
 1 file changed, 20 insertions(+), 1 deletion(-)

diff --git a/drivers/xen/balloon.c b/drivers/xen/balloon.c
index 3101cf6..63a7e5e 100644
--- a/drivers/xen/balloon.c
+++ b/drivers/xen/balloon.c
@@ -305,6 +305,24 @@ static enum bp_state reserve_additional_memory(long credit)
 }
 #endif /* CONFIG_XEN_BALLOON_MEMORY_HOTPLUG */
 
+static bool p2m_is_ballooned_scratch_page(unsigned long pfn)
+{
+       int cpu;
+       unsigned long bpfn;
+       struct page *bpage;
+
+       for_each_possible_cpu(cpu) {
+               bpage = per_cpu(balloon_scratch_page, cpu);
+               if (!bpage)
+                       continue;
+               bpfn = page_to_pfn(bpage);
+               if (pfn_to_mfn(pfn) == pfn_to_mfn(bpfn))
+                       return true;
+       }
+
+       return false;
+}
+
 static enum bp_state increase_reservation(unsigned long nr_pages)
 {
        int rc;
@@ -350,7 +368,8 @@ static enum bp_state increase_reservation(unsigned long 
nr_pages)
 
                pfn = page_to_pfn(page);
                BUG_ON(!xen_feature(XENFEAT_auto_translated_physmap) &&
-                      phys_to_machine_mapping_valid(pfn));
+                      phys_to_machine_mapping_valid(pfn) &&
+                      !p2m_is_ballooned_scratch_page(pfn));
 
                set_phys_to_machine(pfn, frame_list[i]);
 
-- 
1.7.10.4


_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
http://lists.xen.org/xen-devel


 


Rackspace

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