[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [xen staging] x86/shadow: the guess_wrmap() hook is needed for HVM only
commit 8b8d011ad868df38afae6282103087556beaa1f9 Author: Jan Beulich <jbeulich@xxxxxxxx> AuthorDate: Tue Apr 21 10:58:45 2020 +0200 Commit: Jan Beulich <jbeulich@xxxxxxxx> CommitDate: Tue Apr 21 10:58:45 2020 +0200 x86/shadow: the guess_wrmap() hook is needed for HVM only sh_remove_write_access() bails early for !external guests, and hence its building and thus the need for the hook can be suppressed altogether in !HVM configs. Signed-off-by: Jan Beulich <jbeulich@xxxxxxxx> Acked-by: Andrew Cooper <andrew.cooper3@xxxxxxxxxx> Acked-by: Tim Deegan <tim@xxxxxxx> --- xen/arch/x86/mm/shadow/common.c | 2 ++ xen/arch/x86/mm/shadow/multi.c | 4 ++-- xen/arch/x86/mm/shadow/private.h | 10 ++++++++++ xen/include/asm-x86/paging.h | 2 +- 4 files changed, 15 insertions(+), 3 deletions(-) diff --git a/xen/arch/x86/mm/shadow/common.c b/xen/arch/x86/mm/shadow/common.c index 33f3ad521a..d899675ebd 100644 --- a/xen/arch/x86/mm/shadow/common.c +++ b/xen/arch/x86/mm/shadow/common.c @@ -1769,6 +1769,7 @@ static inline void trace_shadow_wrmap_bf(mfn_t gmfn) } } +#ifdef CONFIG_HVM /**************************************************************************/ /* Remove all writeable mappings of a guest frame from the shadow tables * Returns non-zero if we need to flush TLBs. @@ -2000,6 +2001,7 @@ int sh_remove_write_access(struct domain *d, mfn_t gmfn, /* We killed at least one writeable mapping, so must flush TLBs. */ return 1; } +#endif /* CONFIG_HVM */ #if (SHADOW_OPTIMIZATIONS & SHOPT_OUT_OF_SYNC) static int sh_remove_write_access_from_sl1p(struct domain *d, mfn_t gmfn, diff --git a/xen/arch/x86/mm/shadow/multi.c b/xen/arch/x86/mm/shadow/multi.c index 5377754282..ffb2b87740 100644 --- a/xen/arch/x86/mm/shadow/multi.c +++ b/xen/arch/x86/mm/shadow/multi.c @@ -4212,7 +4212,7 @@ int sh_rm_write_access_from_sl1p(struct domain *d, mfn_t gmfn, } #endif /* OOS */ -#if SHADOW_OPTIMIZATIONS & SHOPT_WRITABLE_HEURISTIC +#if defined(CONFIG_HVM) && (SHADOW_OPTIMIZATIONS & SHOPT_WRITABLE_HEURISTIC) static int sh_guess_wrmap(struct vcpu *v, unsigned long vaddr, mfn_t gmfn) /* Look up this vaddr in the current shadow and see if it's a writeable * mapping of this gmfn. If so, remove it. Returns 1 if it worked. */ @@ -4884,10 +4884,10 @@ const struct paging_mode sh_paging_mode = { #ifdef CONFIG_HVM .shadow.make_monitor_table = sh_make_monitor_table, .shadow.destroy_monitor_table = sh_destroy_monitor_table, -#endif #if SHADOW_OPTIMIZATIONS & SHOPT_WRITABLE_HEURISTIC .shadow.guess_wrmap = sh_guess_wrmap, #endif +#endif /* CONFIG_HVM */ .shadow.pagetable_dying = sh_pagetable_dying, .shadow.trace_emul_write_val = trace_emulate_write_val, .shadow.shadow_levels = SHADOW_PAGING_LEVELS, diff --git a/xen/arch/x86/mm/shadow/private.h b/xen/arch/x86/mm/shadow/private.h index 6eb7920d47..0044450999 100644 --- a/xen/arch/x86/mm/shadow/private.h +++ b/xen/arch/x86/mm/shadow/private.h @@ -359,6 +359,7 @@ void sh_install_xen_entries_in_l4(struct domain *, mfn_t gl4mfn, mfn_t sl4mfn); /* Update the shadows in response to a pagetable write from Xen */ int sh_validate_guest_entry(struct vcpu *v, mfn_t gmfn, void *entry, u32 size); +#ifdef CONFIG_HVM /* Remove all writeable mappings of a guest frame from the shadows. * Returns non-zero if we need to flush TLBs. * level and fault_addr desribe how we found this to be a pagetable; @@ -366,6 +367,15 @@ int sh_validate_guest_entry(struct vcpu *v, mfn_t gmfn, void *entry, u32 size); extern int sh_remove_write_access(struct domain *d, mfn_t readonly_mfn, unsigned int level, unsigned long fault_addr); +#else +static inline int sh_remove_write_access(struct domain *d, mfn_t readonly_mfn, + unsigned int level, + unsigned long fault_addr) +{ + ASSERT(!shadow_mode_refcounts(d)); + return 0; +} +#endif /* Functions that atomically write PT/P2M entries and update state */ int shadow_write_p2m_entry(struct p2m_domain *p2m, unsigned long gfn, diff --git a/xen/include/asm-x86/paging.h b/xen/include/asm-x86/paging.h index c99ce3e136..4fb3f09e1a 100644 --- a/xen/include/asm-x86/paging.h +++ b/xen/include/asm-x86/paging.h @@ -105,9 +105,9 @@ struct shadow_paging_mode { #ifdef CONFIG_HVM mfn_t (*make_monitor_table )(struct vcpu *v); void (*destroy_monitor_table )(struct vcpu *v, mfn_t mmfn); -#endif int (*guess_wrmap )(struct vcpu *v, unsigned long vaddr, mfn_t gmfn); +#endif void (*pagetable_dying )(paddr_t gpa); void (*trace_emul_write_val )(const void *ptr, unsigned long vaddr, const void *src, unsigned int bytes); -- generated by git-patchbot for /home/xen/git/xen.git#staging
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |