[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH 2/3] xen-balloon: Add interface to retrieve ballooned pages
On Wed, Mar 09, 2011 at 04:22:04PM -0500, Daniel De Graaf wrote: > On 03/09/2011 04:03 PM, Konrad Rzeszutek Wilk wrote: > > On Mon, Mar 07, 2011 at 01:06:47PM -0500, Daniel De Graaf wrote: > >> Pages that have been ballooned are useful for other Xen drivers doing > >> grant table actions, because these pages have valid struct page/PFNs but > >> have no valid MFN so are available for remapping. > >> > >> Signed-off-by: Daniel De Graaf <dgdegra@xxxxxxxxxxxxx> > >> --- > >> drivers/xen/balloon.c | 54 > >> +++++++++++++++++++++++++++++++++++++++++++++++++ > >> include/xen/balloon.h | 3 ++ > >> 2 files changed, 57 insertions(+), 0 deletions(-) > >> > >> diff --git a/drivers/xen/balloon.c b/drivers/xen/balloon.c > >> index b0a7a92..be53596 100644 > >> --- a/drivers/xen/balloon.c > >> +++ b/drivers/xen/balloon.c > >> @@ -328,6 +328,60 @@ void balloon_set_new_target(unsigned long target) > >> } > >> EXPORT_SYMBOL_GPL(balloon_set_new_target); > >> > >> +/** > >> + * get_ballooned_pages - get pages that have been ballooned out > >> + * @nr_pages: Number of pages to get > >> + * @pages: pages returned > >> + * @force: Try to balloon out more pages if needed > >> + * @return number of pages retrieved > >> + */ > >> +int get_ballooned_pages(int nr_pages, struct page** pages, int force) > >> +{ > >> + int rv = 0; > >> + struct page* page; > >> + mutex_lock(&balloon_mutex); > >> + /* Pages are pulled off the back of the queue to prefer highmem */ > >> + while (rv < nr_pages) { > >> + if (list_empty(&ballooned_pages)) { > >> + if (!force) > >> + break; > >> + if (decrease_reservation(nr_pages - rv)) > > > > I am looking at the implementation of decrease_reservation with > > Daniel's Kipper patches ("xen/balloon: Protect against CPU exhaust by > > event/x process") > > and his code will the functionality of trying to balloon out the amount of > > pages you want. But if it can't balloon out all, it will try the best it > > can. Meaning if nr_pages is 256 and rv is 0, and we only say get 100 of > > them, > > this particular loop would keep on going forever.. until it got the rest > > of those 156 pages which it might not. > > > > Perhaps rebasing on top of Daniel's patch and utilize the BP_EAGAIN logic > > to back-off, or just return -EBUSY with the amount returned? > > > > I think adding a parameter to decrease_reservation specifying what GFP_* flags > will be used in allocation might be useful. The correct rebase of my most > recent > patch on top of Daniel Kiper's patch would be to return -ENOMEM when > decrease_reservation returns BP_EAGAIN. Since GFP_BALLOON does not try very > hard <nods> > in the memory allocation, this might produce memory errors more often than it > should, whereas the alloc_xenballooned_pages call may wish to just use > GFP_HIGHUSER > and risk invoking the OOM killer if required. OK. Looking forward to the patches. > > Would you prefer I submitted all three patches rebased on top of Daniel > Kipper's > R4 patches (or do you have ak git tree with those already included)? #devel/balloon-hotplug (jsut pushed it so it might take 10 minutes for it to show up). _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxxxxxxxx http://lists.xensource.com/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |