File 57dc109a-change-modify-destroy-xen-mappings-to-return-error.patch of Package xen.5576
# Commit 3eb51dda7106cbee5ff52a976c1ed842744e09a4
# Date 2016-09-16 11:32:42 -0400
# Author Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>
# Committer Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>
arm/x86: change [modify,destroy]_xen_mappings to return error
The implementation on x86 always returns zero, but
other platforms may return error values.
Reviewed-by: Julien Grall <julien.grall@arm.com> [arm bits]
Reviewed-by: Andrew Cooper <andrew.cooper3@citrix.com> [x86 bits]
Suggested-by: Julien Grall <julien.grall@arm.com>
Signed-off-by: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>
--- a/xen/arch/arm/mm.c
+++ b/xen/arch/arm/mm.c
@@ -930,9 +930,9 @@ int populate_pt_range(unsigned long virt
return create_xen_entries(RESERVE, virt, mfn, nr_mfns, 0);
}
-void destroy_xen_mappings(unsigned long v, unsigned long e)
+int destroy_xen_mappings(unsigned long v, unsigned long e)
{
- create_xen_entries(REMOVE, v, 0, (e - v) >> PAGE_SHIFT, 0);
+ return create_xen_entries(REMOVE, v, 0, (e - v) >> PAGE_SHIFT, 0);
}
enum mg { mg_clear, mg_ro, mg_rw, mg_rx };
--- a/xen/arch/x86/livepatch.c
+++ b/xen/arch/x86/livepatch.c
@@ -222,9 +222,7 @@ int arch_livepatch_secure(const void *va
else
flag = PAGE_HYPERVISOR_RO;
- modify_xen_mappings(start, start + pages * PAGE_SIZE, flag);
-
- return 0;
+ return modify_xen_mappings(start, start + pages * PAGE_SIZE, flag);
}
void __init arch_livepatch_init(void)
--- a/xen/arch/x86/mm.c
+++ b/xen/arch/x86/mm.c
@@ -5994,7 +5994,7 @@ int populate_pt_range(unsigned long virt
*
* It is an error to call with present flags over an unpopulated range.
*/
-void modify_xen_mappings(unsigned long s, unsigned long e, unsigned int nf)
+int modify_xen_mappings(unsigned long s, unsigned long e, unsigned int nf)
{
bool_t locking = system_state > SYS_STATE_boot;
l2_pgentry_t *pl2e;
@@ -6169,13 +6169,14 @@ void modify_xen_mappings(unsigned long s
flush_area(NULL, FLUSH_TLB_GLOBAL);
#undef FLAGS_MASK
+ return 0;
}
#undef flush_area
-void destroy_xen_mappings(unsigned long s, unsigned long e)
+int destroy_xen_mappings(unsigned long s, unsigned long e)
{
- modify_xen_mappings(s, e, _PAGE_NONE);
+ return modify_xen_mappings(s, e, _PAGE_NONE);
}
void __set_fixmap(
--- a/xen/include/xen/mm.h
+++ b/xen/include/xen/mm.h
@@ -105,8 +105,8 @@ int map_pages_to_xen(
unsigned long nr_mfns,
unsigned int flags);
/* Alter the permissions of a range of Xen virtual address space. */
-void modify_xen_mappings(unsigned long s, unsigned long e, unsigned int flags);
-void destroy_xen_mappings(unsigned long v, unsigned long e);
+int modify_xen_mappings(unsigned long s, unsigned long e, unsigned int flags);
+int destroy_xen_mappings(unsigned long v, unsigned long e);
/*
* Create only non-leaf page table entries for the
* page range in Xen virtual address space.