[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
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |