[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


 


Rackspace

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