[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [PATCH 02/11] xen/page_alloc: Remove `claim` from domain_set_outstanding_pages()
With a single global count for the claims it's easy to substract domain_tot_pages() from the claim so the number given in the hypercall is the real reservation of the domain. This is the current behaviour. However, a later patch introduces exact-node claims and those interact very poorly with such a scheme. Since accounting domain_tot_pages() in one case but not the other seems strictly worse than not accounting them at all (which is at least consistent), this patch stops substracting tot_pages from the claim and instead checks that claimed memory + allocated memory don't exceed max_mem. Arguably it's also clearer for the caller to align the amount of claimed memory with that of the requested claim. Signed-off-by: Alejandro Vallejo <alejandro.vallejo@xxxxxxxxx> --- xen/common/page_alloc.c | 19 ++++++------------- 1 file changed, 6 insertions(+), 13 deletions(-) diff --git a/xen/common/page_alloc.c b/xen/common/page_alloc.c index bd4538c28d82..49c3258169db 100644 --- a/xen/common/page_alloc.c +++ b/xen/common/page_alloc.c @@ -523,7 +523,7 @@ out: int domain_set_outstanding_pages(struct domain *d, unsigned long pages) { int ret = -ENOMEM; - unsigned long claim, avail_pages; + unsigned long avail_pages; /* * take the domain's page_alloc_lock, else all d->tot_page adjustments @@ -549,28 +549,21 @@ int domain_set_outstanding_pages(struct domain *d, unsigned long pages) goto out; } - /* disallow a claim not exceeding domain_tot_pages() or above max_pages */ - if ( (pages <= domain_tot_pages(d)) || (pages > d->max_pages) ) + /* Don't claim past max_pages */ + if ( (domain_tot_pages(d) + pages) > d->max_pages ) { ret = -EINVAL; goto out; } /* how much memory is available? */ - avail_pages = total_avail_pages; + avail_pages = total_avail_pages - outstanding_claims; - avail_pages -= outstanding_claims; - - /* - * Note, if domain has already allocated memory before making a claim - * then the claim must take domain_tot_pages() into account - */ - claim = pages - domain_tot_pages(d); - if ( claim > avail_pages ) + if ( pages > avail_pages ) goto out; /* yay, claim fits in available memory, stake the claim, success! */ - d->outstanding_pages = claim; + d->outstanding_pages = pages; outstanding_claims += d->outstanding_pages; ret = 0; -- 2.48.1
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |