|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [xen master] 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#master
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |