|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-changelog] [xen master] x86/p2m: Allow p2m_get_page_from_gfn to return shared entries
commit c1739b8ccdecce663e1c07f21290e3e48c33e699
Author: Tamas K Lengyel <tamas.lengyel@xxxxxxxxx>
AuthorDate: Mon Feb 10 11:21:25 2020 -0800
Commit: Andrew Cooper <andrew.cooper3@xxxxxxxxxx>
CommitDate: Fri Feb 21 13:22:55 2020 +0000
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>
Acked-by: Andrew Cooper <andrew.cooper3@xxxxxxxxxx>
---
xen/arch/x86/mm/p2m.c | 16 ++++++++++------
1 file changed, 10 insertions(+), 6 deletions(-)
diff --git a/xen/arch/x86/mm/p2m.c b/xen/arch/x86/mm/p2m.c
index 9f1c29d7ef..263e6b4db8 100644
--- a/xen/arch/x86/mm/p2m.c
+++ b/xen/arch/x86/mm/p2m.c
@@ -574,11 +574,13 @@ 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);
@@ -594,8 +596,10 @@ 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));
--
generated by git-patchbot for /home/xen/git/xen.git#master
_______________________________________________
Xen-changelog mailing list
Xen-changelog@xxxxxxxxxxxxxxxxxxxx
https://lists.xenproject.org/xen-changelog
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |