mirror of
https://github.com/xen-project/xen.git
synced 2026-10-28 10:11:27 +01:00
dom_cow is needed for mem-sharing only
A couple of adjustments are needed to code checking for dom_cow, but since there are pretty few it is probably better to adjust those than to set up and keep around a never used domain. Signed-off-by: Jan Beulich <jbeulich@suse.com> Acked-by: Andrew Cooper <andrew.cooper3@citrix.com> Acked-by: Julien Grall <julien.grall@arm.com>
This commit is contained in:
1 parent
7c5696ad0b
commit
79d91e178a
5 files changed
+17
-6
No files matched your search
+2
-2
@@ -966,8 +966,8 @@ get_page_from_l1e(
|
||||
return flip;
|
||||
}
|
||||
|
||||
if ( unlikely( (real_pg_owner != pg_owner) &&
|
||||
(real_pg_owner != dom_cow) ) )
|
||||
if ( unlikely((real_pg_owner != pg_owner) &&
|
||||
(!dom_cow || (real_pg_owner != dom_cow))) )
|
||||
{
|
||||
/*
|
||||
* Let privileged domains transfer the right to map their target
|
||||
|
||||
@@ -568,7 +568,8 @@ struct page_info *p2m_get_page_from_gfn(
|
||||
}
|
||||
else if ( !get_page(page, p2m->domain) &&
|
||||
/* Page could be shared */
|
||||
(!p2m_is_shared(*t) || !get_page(page, dom_cow)) )
|
||||
(!dom_cow || !p2m_is_shared(*t) ||
|
||||
!get_page(page, dom_cow)) )
|
||||
page = NULL;
|
||||
}
|
||||
p2m_read_unlock(p2m);
|
||||
@@ -941,7 +942,8 @@ guest_physmap_add_entry(struct domain *d, gfn_t gfn, mfn_t mfn,
|
||||
/* Then, look for m->p mappings for this range and deal with them */
|
||||
for ( i = 0; i < (1UL << page_order); i++ )
|
||||
{
|
||||
if ( page_get_owner(mfn_to_page(mfn_add(mfn, i))) == dom_cow )
|
||||
if ( dom_cow &&
|
||||
page_get_owner(mfn_to_page(mfn_add(mfn, i))) == dom_cow )
|
||||
{
|
||||
/* This is no way to add a shared page to your physmap! */
|
||||
gdprintk(XENLOG_ERR, "Adding shared mfn %lx directly to dom%d physmap not allowed.\n",
|
||||
|
||||
@@ -74,7 +74,9 @@ integer_param("hardware_dom", hardware_domid);
|
||||
/* Private domain structs for DOMID_XEN, DOMID_IO, etc. */
|
||||
struct domain *__read_mostly dom_xen;
|
||||
struct domain *__read_mostly dom_io;
|
||||
#ifdef CONFIG_HAS_MEM_SHARING
|
||||
struct domain *__read_mostly dom_cow;
|
||||
#endif
|
||||
|
||||
struct vcpu *idle_vcpu[NR_CPUS] __read_mostly;
|
||||
|
||||
@@ -547,6 +549,7 @@ void __init setup_system_domains(void)
|
||||
if ( IS_ERR(dom_io) )
|
||||
panic("Failed to create d[IO]: %ld\n", PTR_ERR(dom_io));
|
||||
|
||||
#ifdef CONFIG_HAS_MEM_SHARING
|
||||
/*
|
||||
* Initialise our COW domain.
|
||||
* This domain owns sharable pages.
|
||||
@@ -554,6 +557,7 @@ void __init setup_system_domains(void)
|
||||
dom_cow = domain_create(DOMID_COW, NULL, false);
|
||||
if ( IS_ERR(dom_cow) )
|
||||
panic("Failed to create d[COW]: %ld\n", PTR_ERR(dom_cow));
|
||||
#endif
|
||||
}
|
||||
|
||||
void domain_update_node_affinity(struct domain *d)
|
||||
|
||||
@@ -1085,7 +1085,7 @@ map_grant_ref(
|
||||
host_map_created = true;
|
||||
}
|
||||
}
|
||||
else if ( owner == rd || owner == dom_cow )
|
||||
else if ( owner == rd || (dom_cow && owner == dom_cow) )
|
||||
{
|
||||
if ( (op->flags & GNTMAP_device_map) && !(op->flags & GNTMAP_readonly) )
|
||||
{
|
||||
|
||||
@@ -274,7 +274,12 @@ struct npfec {
|
||||
#endif
|
||||
|
||||
/* Private domain structs for DOMID_XEN, DOMID_IO, etc. */
|
||||
extern struct domain *dom_xen, *dom_io, *dom_cow;
|
||||
extern struct domain *dom_xen, *dom_io;
|
||||
#ifdef CONFIG_HAS_MEM_SHARING
|
||||
extern struct domain *dom_cow;
|
||||
#else
|
||||
# define dom_cow NULL
|
||||
#endif
|
||||
|
||||
#define page_list_entry list_head
|
||||
|
||||
|
||||