mirror of
https://github.com/xen-project/xen.git
synced 2026-10-29 18:50:05 +01:00
x86/shadow: monitor table is HVM-only
Signed-off-by: Jan Beulich <jbeulich@suse.com> Acked-by: Andrew Cooper <andrew.cooper3@citrix.com> Acked-by: Tim Deegan <tim@xen.org>
This commit is contained in:
1 parent
ac7addbeff
commit
452219e246
3 files changed
+14
-8
No files matched your search
@@ -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 */
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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);
|
||||
|
||||