WARNING - OLD ARCHIVES

This is an archived copy of the Xen.org mailing list, which we have preserved to ensure that existing links to archives are not broken. The live archive, which contains the latest emails, can be found at http://lists.xen.org/
   
 
 
Xen 
 
Home Products Support Community News
 
   
 

xen-devel

[Xen-devel] Re: [PATCH R4 7/7] xen/balloon: Memory hotplug support for X

On Tue, Mar 08, 2011 at 04:02:19PM -0800, Dave Hansen wrote:
> On Tue, 2011-03-08 at 22:50 +0100, Daniel Kiper wrote:
> > +static int xen_online_page_notifier(struct notifier_block *nb, unsigned 
> > long val, void *v)
> > +{
> > +   struct page *page = v;
> > +   unsigned long pfn = page_to_pfn(page);
> > +
> > +   if (pfn >= num_physpages)
> > +           num_physpages = pfn + 1;
> > +
> > +   inc_totalhigh_pages();
> > +
> > +#ifdef CONFIG_FLATMEM
> > +   max_mapnr = max(pfn, max_mapnr);
> > +#endif
>
> I really don't like that this is a direct copy of online_page() up to
> this point.  They're already subtly different.  I'm also curious if this
> breaks on 32-bit kernels because of the unconditional
> inc_totalhigh_pages().
>
> If it's done this way, I'd almost guarantee that the first time someone
> fixes a bug or adds a generic feature in online_page() that Xen gets
> missed.

OK, I rewrite this part of code.

> > +   mutex_lock(&balloon_mutex);
> > +
> > +   __balloon_append(page);
> > +
> > +   if (balloon_stats.hotplug_pages)
> > +           --balloon_stats.hotplug_pages;
> > +   else
> > +           --balloon_stats.balloon_hotplug;
> > +
> > +   mutex_unlock(&balloon_mutex);
> > +
> > +   return NOTIFY_STOP;
> > +}
>
> I'm not a _huge_ fan of these notifier chains, but I guess it works.

Could you tell me why ??? I think that in that case new
(faster, simpler, etc.) mechanism is an overkill. I prefer
to use something which is writen, tested and ready for usage.

> However, if you're going to use these notifier chains, then we probably
> should use them to full effect.  Have a notifier list like this:
>
>       1. generic online_page()
>       2. xen_online_page_notifier() (returns NOTIFY_STOP)
>       3. free_online_page()
>
> Where finish_online_page() does something like this:
>
> finish_online_page(...)
> {
>         ClearPageReserved(page);
>         init_page_count(page);
>         __free_page(page);
> }

OK.

Daniel

_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-devel