|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-devel] [PATCH v2 13/20] x86/mem_sharing: ASSERT that p2m_set_entry succeeds
Signed-off-by: Tamas K Lengyel <tamas.lengyel@xxxxxxxxx>
---
xen/arch/x86/mm/mem_sharing.c | 46 +++++++++++++++++------------------
1 file changed, 22 insertions(+), 24 deletions(-)
diff --git a/xen/arch/x86/mm/mem_sharing.c b/xen/arch/x86/mm/mem_sharing.c
index 90b6371e2f..e5c1424f9b 100644
--- a/xen/arch/x86/mm/mem_sharing.c
+++ b/xen/arch/x86/mm/mem_sharing.c
@@ -1113,39 +1113,37 @@ int add_to_physmap(struct domain *sd, unsigned long
sgfn, shr_handle_t sh,
goto err_unlock;
}
+ /*
+ * Must succeed, we just read the entry and hold the p2m lock
+ * via get_two_gfns.
+ */
ret = p2m_set_entry(p2m, _gfn(cgfn), smfn, PAGE_ORDER_4K,
p2m_ram_shared, a);
+ ASSERT(!ret);
- /* Tempted to turn this into an assert */
- if ( ret )
+ /*
+ * There is a chance we're plugging a hole where a paged out
+ * page was.
+ */
+ if ( p2m_is_paging(cmfn_type) && (cmfn_type != p2m_ram_paging_out) )
{
- mem_sharing_gfn_destroy(spage, cd, gfn_info);
- put_page_and_type(spage);
- } else {
+ atomic_dec(&cd->paged_pages);
/*
- * There is a chance we're plugging a hole where a paged out
- * page was.
+ * Further, there is a chance this was a valid page.
+ * Don't leak it.
*/
- if ( p2m_is_paging(cmfn_type) && (cmfn_type != p2m_ram_paging_out) )
+ if ( mfn_valid(cmfn) )
{
- atomic_dec(&cd->paged_pages);
- /*
- * Further, there is a chance this was a valid page.
- * Don't leak it.
- */
- if ( mfn_valid(cmfn) )
- {
- struct page_info *cpage = mfn_to_page(cmfn);
+ struct page_info *cpage = mfn_to_page(cmfn);
- if ( !get_page(cpage, cd) )
- {
- domain_crash(cd);
- ret = -EOVERFLOW;
- goto err_unlock;
- }
- put_page_alloc_ref(cpage);
- put_page(cpage);
+ if ( !get_page(cpage, cd) )
+ {
+ domain_crash(cd);
+ ret = -EOVERFLOW;
+ goto err_unlock;
}
+ put_page_alloc_ref(cpage);
+ put_page(cpage);
}
}
--
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 |