[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [xen master] x86: don't override INVALID_M2P_ENTRY with SHARED_M2P_ENTRY
commit c9476c4ad72e8a1842d713c74843034c7ec6eb51 Author: Jan Beulich <jbeulich@xxxxxxxx> AuthorDate: Fri Sep 11 14:14:43 2020 +0200 Commit: Jan Beulich <jbeulich@xxxxxxxx> CommitDate: Fri Sep 11 14:14:43 2020 +0200 x86: don't override INVALID_M2P_ENTRY with SHARED_M2P_ENTRY While in most cases code ahead of the invocation of set_gpfn_from_mfn() deals with shared pages, at least in set_typed_p2m_entry() I can't spot such handling (it's entirely possible there's code missing there). Let's try to play safe and add an extra check. Signed-off-by: Jan Beulich <jbeulich@xxxxxxxx> Acked-by: Andrew Cooper <andrew.cooper3@xxxxxxxxxx> --- xen/arch/x86/x86_64/mm.c | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/xen/arch/x86/x86_64/mm.c b/xen/arch/x86/x86_64/mm.c index 1f32062c15..0d1aadbfce 100644 --- a/xen/arch/x86/x86_64/mm.c +++ b/xen/arch/x86/x86_64/mm.c @@ -1327,12 +1327,19 @@ destroy_frametable: void set_gpfn_from_mfn(unsigned long mfn, unsigned long pfn) { - const struct domain *d = page_get_owner(mfn_to_page(_mfn(mfn))); - unsigned long entry = (d && (d == dom_cow)) ? SHARED_M2P_ENTRY : pfn; + unsigned long entry = pfn; if ( unlikely(!machine_to_phys_mapping_valid) ) return; + if ( entry != INVALID_M2P_ENTRY ) + { + const struct domain *d = page_get_owner(mfn_to_page(_mfn(mfn))); + + if ( d && (d == dom_cow) ) + entry = SHARED_M2P_ENTRY; + } + if ( opt_pv32 && mfn < (RDWR_COMPAT_MPT_VIRT_END - RDWR_COMPAT_MPT_VIRT_START) / 4 ) compat_machine_to_phys_mapping[mfn] = entry; -- generated by git-patchbot for /home/xen/git/xen.git#master
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |