|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-devel] [PATCH v7 1/7] x86/p2m: Allow p2m_get_page_from_gfn to return shared entries
The owner domain of shared pages is dom_cow, use that for get_page
otherwise the function fails to return the correct page under some
situations. The check if dom_cow should be used was only performed in
a subset of use-cases. Fixing the error and simplifying the existing check
since we can't have any shared entries with dom_cow being NULL.
Signed-off-by: Tamas K Lengyel <tamas.lengyel@xxxxxxxxx>
---
v7: update commit message
---
xen/arch/x86/mm/p2m.c | 14 ++++++++------
1 file changed, 8 insertions(+), 6 deletions(-)
diff --git a/xen/arch/x86/mm/p2m.c b/xen/arch/x86/mm/p2m.c
index def13f657b..007fef720d 100644
--- a/xen/arch/x86/mm/p2m.c
+++ b/xen/arch/x86/mm/p2m.c
@@ -575,11 +575,12 @@ struct page_info *p2m_get_page_from_gfn(
if ( fdom == NULL )
page = NULL;
}
- else if ( !get_page(page, p2m->domain) &&
- /* Page could be shared */
- (!dom_cow || !p2m_is_shared(*t) ||
- !get_page(page, dom_cow)) )
- page = NULL;
+ else
+ {
+ struct domain *d = !p2m_is_shared(*t) ? p2m->domain : dom_cow;
+ if ( !get_page(page, d) )
+ page = NULL;
+ }
}
p2m_read_unlock(p2m);
@@ -595,8 +596,9 @@ struct page_info *p2m_get_page_from_gfn(
mfn = get_gfn_type_access(p2m, gfn_x(gfn), t, a, q, NULL);
if ( p2m_is_ram(*t) && mfn_valid(mfn) )
{
+ struct domain *d = !p2m_is_shared(*t) ? p2m->domain : dom_cow;
page = mfn_to_page(mfn);
- if ( !get_page(page, p2m->domain) )
+ if ( !get_page(page, d) )
page = NULL;
}
put_gfn(p2m->domain, gfn_x(gfn));
--
2.20.1
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxxx
https://lists.xenproject.org/mailman/listinfo/xen-devel
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |