|
[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 |