[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-changelog] [xen master] x86/mm: warn if we ever run out of shadow/hap pool for p2m/lgd ops.
commit 97724f16028522c07f8251d94b6cca4552391fe4 Author: Tim Deegan <tim@xxxxxxx> AuthorDate: Thu Mar 7 12:49:52 2013 +0000 Commit: Tim Deegan <tim@xxxxxxx> CommitDate: Thu Mar 14 10:33:46 2013 +0000 x86/mm: warn if we ever run out of shadow/hap pool for p2m/lgd ops. Even if the error propagates up through the p2m ops to the caller, it'll look like ENOMEM, which won't be obviously a shadow-pool problem. Warn on the console, once per domain. Reported-by: Jan Beulich <jbeulich@xxxxxxxx> Signed-off-by: Tim Deegan <tim@xxxxxxx> Acked-by: Jan Beulich <jbeulich@xxxxxxxx> --- xen/arch/x86/mm/hap/hap.c | 6 ++++++ xen/arch/x86/mm/shadow/common.c | 8 +++++++- xen/include/asm-x86/domain.h | 2 ++ 3 files changed, 15 insertions(+), 1 deletions(-) diff --git a/xen/arch/x86/mm/hap/hap.c b/xen/arch/x86/mm/hap/hap.c index 055833d..bff05d9 100644 --- a/xen/arch/x86/mm/hap/hap.c +++ b/xen/arch/x86/mm/hap/hap.c @@ -258,6 +258,12 @@ static struct page_info *hap_alloc_p2m_page(struct domain *d) page_set_owner(pg, d); pg->count_info |= 1; } + else if ( !d->arch.paging.p2m_alloc_failed ) + { + d->arch.paging.p2m_alloc_failed = 1; + dprintk(XENLOG_ERR, "d%i failed to allocate from HAP pool", + d->domain_id); + } paging_unlock(d); return pg; diff --git a/xen/arch/x86/mm/shadow/common.c b/xen/arch/x86/mm/shadow/common.c index 691776c..4b576ac 100644 --- a/xen/arch/x86/mm/shadow/common.c +++ b/xen/arch/x86/mm/shadow/common.c @@ -1591,10 +1591,16 @@ shadow_alloc_p2m_page(struct domain *d) if ( d->arch.paging.shadow.total_pages < shadow_min_acceptable_pages(d) + 1 ) { + if ( !d->arch.paging.p2m_alloc_failed ) + { + d->arch.paging.p2m_alloc_failed = 1; + dprintk(XENLOG_ERR, "d%i failed to allocate from shadow pool", + d->domain_id); + } paging_unlock(d); return NULL; } - + shadow_prealloc(d, SH_type_p2m_table, 1); pg = mfn_to_page(shadow_alloc(d, SH_type_p2m_table, 0)); d->arch.paging.shadow.p2m_pages++; diff --git a/xen/include/asm-x86/domain.h b/xen/include/asm-x86/domain.h index fd9fa0f..6f9744a 100644 --- a/xen/include/asm-x86/domain.h +++ b/xen/include/asm-x86/domain.h @@ -190,6 +190,8 @@ struct paging_domain { * (used by p2m and log-dirty code for their tries) */ struct page_info * (*alloc_page)(struct domain *d); void (*free_page)(struct domain *d, struct page_info *pg); + /* Has that pool ever run out of memory? */ + bool_t p2m_alloc_failed; }; struct paging_vcpu { -- generated by git-patchbot for /home/xen/git/xen.git#master _______________________________________________ Xen-changelog mailing list Xen-changelog@xxxxxxxxxxxxx http://lists.xensource.com/xen-changelog
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |