[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-changelog] [xen-unstable] x86/mem_sharing: Fix test for "empty" physmap entry in sharing_add_to_physmap
# HG changeset patch # User Tim Deegan <tim@xxxxxxx> # Date 1337247429 -3600 # Node ID 25bdef4493aefa0b52d9e94271aaf20c17654b87 # Parent 9edad3d37fe2d40ee49c706f621e7fcf546a5ffd x86/mem_sharing: Fix test for "empty" physmap entry in sharing_add_to_physmap Signed-off-by: Andres Lagar-Cavilla <andres@xxxxxxxxxxxxxxxx> Signed-off-by: Tim Deegan <tim@xxxxxxx> Committed-by: Tim Deegan <tim@xxxxxxx> --- diff -r 9edad3d37fe2 -r 25bdef4493ae xen/arch/x86/mm/mem_sharing.c --- a/xen/arch/x86/mm/mem_sharing.c Thu May 17 10:24:54 2012 +0100 +++ b/xen/arch/x86/mm/mem_sharing.c Thu May 17 10:37:09 2012 +0100 @@ -1073,9 +1073,10 @@ int mem_sharing_add_to_physmap(struct do if ( spage->sharing->handle != sh ) goto err_unlock; - /* Make sure the target page is a hole in the physmap */ - if ( mfn_valid(cmfn) || - (!(p2m_is_ram(cmfn_type))) ) + /* Make sure the target page is a hole in the physmap. These are typically + * p2m_mmio_dm, but also accept p2m_invalid and paged out pages. See the + * definition of p2m_is_hole in p2m.h. */ + if ( !p2m_is_hole(cmfn_type) ) { ret = XENMEM_SHARING_OP_C_HANDLE_INVALID; goto err_unlock; diff -r 9edad3d37fe2 -r 25bdef4493ae xen/include/asm-x86/p2m.h --- a/xen/include/asm-x86/p2m.h Thu May 17 10:24:54 2012 +0100 +++ b/xen/include/asm-x86/p2m.h Thu May 17 10:37:09 2012 +0100 @@ -133,6 +133,12 @@ typedef unsigned int p2m_query_t; | p2m_to_mask(p2m_ram_paging_in) \ | p2m_to_mask(p2m_ram_shared)) +/* Types that represent a physmap hole that is ok to replace with a shared + * entry */ +#define P2M_HOLE_TYPES (p2m_to_mask(p2m_mmio_dm) \ + | p2m_to_mask(p2m_invalid) \ + | p2m_to_mask(p2m_ram_paged)) + /* Grant mapping types, which map to a real machine frame in another * VM */ #define P2M_GRANT_TYPES (p2m_to_mask(p2m_grant_map_rw) \ @@ -173,6 +179,7 @@ typedef unsigned int p2m_query_t; /* Useful predicates */ #define p2m_is_ram(_t) (p2m_to_mask(_t) & P2M_RAM_TYPES) +#define p2m_is_hole(_t) (p2m_to_mask(_t) & P2M_HOLE_TYPES) #define p2m_is_mmio(_t) (p2m_to_mask(_t) & P2M_MMIO_TYPES) #define p2m_is_readonly(_t) (p2m_to_mask(_t) & P2M_RO_TYPES) #define p2m_is_magic(_t) (p2m_to_mask(_t) & P2M_MAGIC_TYPES) _______________________________________________ Xen-changelog mailing list Xen-changelog@xxxxxxxxxxxxx http://lists.xensource.com/xen-changelog
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |