[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [xen master] x86/shadow: monitor table is HVM-only
commit 452219e246486d35fffb0b418f97db1beb9bc37c Author: Jan Beulich <jbeulich@xxxxxxxx> AuthorDate: Tue Apr 21 10:57:04 2020 +0200 Commit: Jan Beulich <jbeulich@xxxxxxxx> CommitDate: Tue Apr 21 10:57:04 2020 +0200 x86/shadow: monitor table is HVM-only 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 | 14 ++++++++------ xen/arch/x86/mm/shadow/multi.c | 6 ++++-- xen/include/asm-x86/paging.h | 2 ++ 3 files changed, 14 insertions(+), 8 deletions(-) diff --git a/xen/arch/x86/mm/shadow/common.c b/xen/arch/x86/mm/shadow/common.c index 75dd414a6e..d5d0111067 100644 --- a/xen/arch/x86/mm/shadow/common.c +++ b/xen/arch/x86/mm/shadow/common.c @@ -2376,7 +2376,6 @@ void sh_reset_l3_up_pointers(struct vcpu *v) static void sh_update_paging_modes(struct vcpu *v) { struct domain *d = v->domain; - const struct paging_mode *old_mode = v->arch.paging.mode; ASSERT(paging_locked_by_me(d)); @@ -2421,11 +2420,11 @@ static void sh_update_paging_modes(struct vcpu *v) if ( v->arch.paging.mode ) v->arch.paging.mode->shadow.detach_old_tables(v); +#ifdef CONFIG_HVM if ( !is_pv_domain(d) ) { - /// - /// HVM guest - /// + const struct paging_mode *old_mode = v->arch.paging.mode; + ASSERT(shadow_mode_translate(d)); ASSERT(shadow_mode_external(d)); @@ -2523,6 +2522,7 @@ static void sh_update_paging_modes(struct vcpu *v) // different values for CR4.PSE and CR4.PGE at the same time. // This *does* happen, at least for CR4.PGE... } +#endif /* CONFIG_HVM */ #if (SHADOW_OPTIMIZATIONS & SHOPT_OUT_OF_SYNC) /* We need to check that all the vcpus have paging enabled to @@ -2703,7 +2703,6 @@ void shadow_teardown(struct domain *d, bool *preempted) * Should only be called for dying domains. */ { struct vcpu *v; - mfn_t mfn; struct page_info *unpaged_pagetable = NULL; ASSERT(d->is_dying); @@ -2719,13 +2718,16 @@ void shadow_teardown(struct domain *d, bool *preempted) if ( v->arch.paging.mode ) { v->arch.paging.mode->shadow.detach_old_tables(v); +#ifdef CONFIG_HVM if ( shadow_mode_external(d) ) { - mfn = pagetable_get_mfn(v->arch.monitor_table); + mfn_t mfn = pagetable_get_mfn(v->arch.monitor_table); + if ( mfn_valid(mfn) && (mfn_x(mfn) != 0) ) v->arch.paging.mode->shadow.destroy_monitor_table(v, mfn); v->arch.monitor_table = pagetable_null(); } +#endif /* CONFIG_HVM */ } } } diff --git a/xen/arch/x86/mm/shadow/multi.c b/xen/arch/x86/mm/shadow/multi.c index f6b1628742..5377754282 100644 --- a/xen/arch/x86/mm/shadow/multi.c +++ b/xen/arch/x86/mm/shadow/multi.c @@ -1515,7 +1515,7 @@ make_fl1_shadow(struct domain *d, gfn_t gfn) } -#if SHADOW_PAGING_LEVELS == GUEST_PAGING_LEVELS +#if SHADOW_PAGING_LEVELS == GUEST_PAGING_LEVELS && defined(CONFIG_HVM) mfn_t sh_make_monitor_table(struct vcpu *v) { @@ -1965,7 +1965,7 @@ void sh_destroy_l1_shadow(struct domain *d, mfn_t smfn) shadow_free(d, smfn); } -#if SHADOW_PAGING_LEVELS == GUEST_PAGING_LEVELS +#if SHADOW_PAGING_LEVELS == GUEST_PAGING_LEVELS && defined(CONFIG_HVM) void sh_destroy_monitor_table(struct vcpu *v, mfn_t mmfn) { struct domain *d = v->domain; @@ -4881,8 +4881,10 @@ const struct paging_mode sh_paging_mode = { .shadow.write_guest_entry = sh_write_guest_entry, .shadow.cmpxchg_guest_entry = sh_cmpxchg_guest_entry, #endif +#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 diff --git a/xen/include/asm-x86/paging.h b/xen/include/asm-x86/paging.h index a7edca586d..c99ce3e136 100644 --- a/xen/include/asm-x86/paging.h +++ b/xen/include/asm-x86/paging.h @@ -102,8 +102,10 @@ struct shadow_paging_mode { intpte_t *old, intpte_t new, mfn_t gmfn); #endif +#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); void (*pagetable_dying )(paddr_t gpa); -- generated by git-patchbot for /home/xen/git/xen.git#master
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |