[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [xen staging] shr_pages field is MEM_SHARING-only
commit 5ca3be305d2a970db1731f5651374d60abdd322f Author: Jan Beulich <jbeulich@xxxxxxxx> AuthorDate: Fri Apr 8 14:47:56 2022 +0200 Commit: Jan Beulich <jbeulich@xxxxxxxx> CommitDate: Fri Apr 8 14:47:56 2022 +0200 shr_pages field is MEM_SHARING-only Conditionalize it and its uses accordingly. The main goal though is to demonstrate that x86's p2m_teardown() is now empty when !HVM, which in particular means the last remaining use of p2m_lock() in this cases goes away. Signed-off-by: Jan Beulich <jbeulich@xxxxxxxx> Reviewed-by: Tamas K Lengyel <tamas@xxxxxxxxxxxxx> Reviewed-by: George Dunlap <george.dunlap@xxxxxxxxxx> --- xen/arch/x86/mm/p2m-basic.c | 6 +++--- xen/common/domctl.c | 2 ++ xen/common/keyhandler.c | 13 ++++++++++--- xen/include/xen/sched.h | 4 ++++ 4 files changed, 19 insertions(+), 6 deletions(-) diff --git a/xen/arch/x86/mm/p2m-basic.c b/xen/arch/x86/mm/p2m-basic.c index be4a08b9cb..89ae041244 100644 --- a/xen/arch/x86/mm/p2m-basic.c +++ b/xen/arch/x86/mm/p2m-basic.c @@ -159,7 +159,6 @@ void p2m_teardown(struct p2m_domain *p2m) { #ifdef CONFIG_HVM struct page_info *pg; -#endif struct domain *d; if ( !p2m ) @@ -169,16 +168,17 @@ void p2m_teardown(struct p2m_domain *p2m) p2m_lock(p2m); +#ifdef CONFIG_MEM_SHARING ASSERT(atomic_read(&d->shr_pages) == 0); +#endif -#ifdef CONFIG_HVM p2m->phys_table = pagetable_null(); while ( (pg = page_list_remove_head(&p2m->pages)) ) d->arch.paging.free_page(d, pg); -#endif p2m_unlock(p2m); +#endif } void p2m_final_teardown(struct domain *d) diff --git a/xen/common/domctl.c b/xen/common/domctl.c index 9606fa4f1a..540a03e075 100644 --- a/xen/common/domctl.c +++ b/xen/common/domctl.c @@ -109,7 +109,9 @@ void getdomaininfo(struct domain *d, struct xen_domctl_getdomaininfo *info) info->tot_pages = domain_tot_pages(d); info->max_pages = d->max_pages; info->outstanding_pages = d->outstanding_pages; +#ifdef CONFIG_MEM_SHARING info->shr_pages = atomic_read(&d->shr_pages); +#endif info->paged_pages = atomic_read(&d->paged_pages); info->shared_info_frame = gfn_x(mfn_to_gfn(d, _mfn(virt_to_mfn(d->shared_info)))); diff --git a/xen/common/keyhandler.c b/xen/common/keyhandler.c index b6e22d8120..256b394057 100644 --- a/xen/common/keyhandler.c +++ b/xen/common/keyhandler.c @@ -277,9 +277,16 @@ static void cf_check dump_domains(unsigned char key) printk(" refcnt=%d dying=%d pause_count=%d\n", atomic_read(&d->refcnt), d->is_dying, atomic_read(&d->pause_count)); - printk(" nr_pages=%d xenheap_pages=%d shared_pages=%u paged_pages=%u " - "dirty_cpus={%*pbl} max_pages=%u\n", - domain_tot_pages(d), d->xenheap_pages, atomic_read(&d->shr_pages), + printk(" nr_pages=%u xenheap_pages=%u" +#ifdef CONFIG_MEM_SHARING + " shared_pages=%u" +#endif + " paged_pages=%u" + " dirty_cpus={%*pbl} max_pages=%u\n", + domain_tot_pages(d), d->xenheap_pages, +#ifdef CONFIG_MEM_SHARING + atomic_read(&d->shr_pages), +#endif atomic_read(&d->paged_pages), CPUMASK_PR(d->dirty_cpumask), d->max_pages); printk(" handle=%02x%02x%02x%02x-%02x%02x-%02x%02x-" diff --git a/xen/include/xen/sched.h b/xen/include/xen/sched.h index 406d9bc610..18404b3c98 100644 --- a/xen/include/xen/sched.h +++ b/xen/include/xen/sched.h @@ -387,7 +387,11 @@ struct domain unsigned int outstanding_pages; /* pages claimed but not possessed */ unsigned int max_pages; /* maximum value for domain_tot_pages() */ unsigned int extra_pages; /* pages not included in domain_tot_pages() */ + +#ifdef CONFIG_MEM_SHARING atomic_t shr_pages; /* shared pages */ +#endif + atomic_t paged_pages; /* paged-out pages */ /* Scheduling. */ -- generated by git-patchbot for /home/xen/git/xen.git#staging
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |