[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH RFC] xen/balloon: check whether a page is pointed to scratch page MFN
On Thu, 5 Sep 2013, Wei Liu wrote: > 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)) Even though it is true that this function doesn't need to be very fast, we might as well try to write in an efficient way. For example it might be worth calculating pfn_to_mfn(pfn) just once outside the loop? > + 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 |