[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-devel] [PATCH v4 3/7] x86/mm: put nested p2m code under CONFIG_HVM
These functions are only useful for nested hvm, which isn't enabled when CONFIG_HVM is false. Enclose relevant code and fields in CONFIG_HVM. Signed-off-by: Wei Liu <wei.liu2@xxxxxxxxxx> --- v4: 1. Introduce p2m_nestedp2m_init --- xen/arch/x86/domain.c | 4 ++++ xen/arch/x86/mm/p2m.c | 25 +++++++++++++++++++++---- xen/include/asm-x86/domain.h | 2 ++ xen/include/asm-x86/p2m.h | 2 ++ 4 files changed, 29 insertions(+), 4 deletions(-) diff --git a/xen/arch/x86/domain.c b/xen/arch/x86/domain.c index 313ebb3..3da5df6 100644 --- a/xen/arch/x86/domain.c +++ b/xen/arch/x86/domain.c @@ -1691,7 +1691,9 @@ void context_switch(struct vcpu *prev, struct vcpu *next) { _update_runstate_area(prev); vpmu_switch_from(prev); +#ifdef CONFIG_HVM np2m_schedule(NP2M_SCHEDLE_OUT); +#endif } if ( is_hvm_domain(prevd) && !list_empty(&prev->arch.hvm.tm_list) ) @@ -1758,7 +1760,9 @@ void context_switch(struct vcpu *prev, struct vcpu *next) /* Must be done with interrupts enabled */ vpmu_switch_to(next); +#ifdef CONFIG_HVM np2m_schedule(NP2M_SCHEDLE_IN); +#endif } /* Ensure that the vcpu has an up-to-date time base. */ diff --git a/xen/arch/x86/mm/p2m.c b/xen/arch/x86/mm/p2m.c index 80b7293..4169084 100644 --- a/xen/arch/x86/mm/p2m.c +++ b/xen/arch/x86/mm/p2m.c @@ -63,23 +63,30 @@ static void p2m_pod_init(struct p2m_domain *p2m) #endif } +static void p2m_nestedp2m_init(struct p2m_domain *p2m) +{ +#ifdef CONFIG_HVM + INIT_LIST_HEAD(&p2m->np2m_list); + + p2m->np2m_base = P2M_BASE_EADDR; + p2m->np2m_generation = 0; +#endif +} + /* Init the datastructures for later use by the p2m code */ static int p2m_initialise(struct domain *d, struct p2m_domain *p2m) { int ret = 0; mm_rwlock_init(&p2m->lock); - INIT_LIST_HEAD(&p2m->np2m_list); INIT_PAGE_LIST_HEAD(&p2m->pages); p2m->domain = d; p2m->default_access = p2m_access_rwx; p2m->p2m_class = p2m_host; - p2m->np2m_base = P2M_BASE_EADDR; - p2m->np2m_generation = 0; - p2m_pod_init(p2m); + p2m_nestedp2m_init(p2m); if ( hap_enabled(d) && cpu_has_vmx ) ret = ept_p2m_init(p2m); @@ -151,6 +158,7 @@ static void p2m_teardown_hostp2m(struct domain *d) } } +#ifdef CONFIG_HVM static void p2m_teardown_nestedp2m(struct domain *d) { unsigned int i; @@ -188,6 +196,7 @@ static int p2m_init_nestedp2m(struct domain *d) return 0; } +#endif static void p2m_teardown_altp2m(struct domain *d) { @@ -235,6 +244,7 @@ int p2m_init(struct domain *d) if ( rc ) return rc; +#ifdef CONFIG_HVM /* Must initialise nestedp2m unconditionally * since nestedhvm_enabled(d) returns false here. * (p2m_init runs too early for HVM_PARAM_* options) */ @@ -244,12 +254,15 @@ int p2m_init(struct domain *d) p2m_teardown_hostp2m(d); return rc; } +#endif rc = p2m_init_altp2m(d); if ( rc ) { p2m_teardown_hostp2m(d); +#ifdef CONFIG_HVM p2m_teardown_nestedp2m(d); +#endif } return rc; @@ -701,7 +714,9 @@ void p2m_final_teardown(struct domain *d) * we initialise them unconditionally. */ p2m_teardown_altp2m(d); +#ifdef CONFIG_HVM p2m_teardown_nestedp2m(d); +#endif /* Iterate over all p2m tables per domain */ p2m_teardown_hostp2m(d); @@ -1727,6 +1742,7 @@ void p2m_altp2m_check(struct vcpu *v, uint16_t idx) p2m_switch_vcpu_altp2m_by_id(v, idx); } +#ifdef CONFIG_HVM static struct p2m_domain * p2m_getlru_nestedp2m(struct domain *d, struct p2m_domain *p2m) { @@ -1984,6 +2000,7 @@ void np2m_schedule(int dir) p2m_unlock(p2m); } } +#endif unsigned long paging_gva_to_gfn(struct vcpu *v, unsigned long va, diff --git a/xen/include/asm-x86/domain.h b/xen/include/asm-x86/domain.h index 4da4353..b46cfb0 100644 --- a/xen/include/asm-x86/domain.h +++ b/xen/include/asm-x86/domain.h @@ -333,9 +333,11 @@ struct arch_domain void (*tail)(struct vcpu *); } *ctxt_switch; +#ifdef CONFIG_HVM /* nestedhvm: translate l2 guest physical to host physical */ struct p2m_domain *nested_p2m[MAX_NESTEDP2M]; mm_lock_t nested_p2m_lock; +#endif /* altp2m: allow multiple copies of host p2m */ bool_t altp2m_active; diff --git a/xen/include/asm-x86/p2m.h b/xen/include/asm-x86/p2m.h index 3785598..20cf3f1 100644 --- a/xen/include/asm-x86/p2m.h +++ b/xen/include/asm-x86/p2m.h @@ -204,6 +204,7 @@ struct p2m_domain { p2m_class_t p2m_class; /* host/nested/alternate */ +#ifdef CONFIG_HVM /* Nested p2ms only: nested p2m base value that this p2m shadows. * This can be cleared to P2M_BASE_EADDR under the per-p2m lock but * needs both the per-p2m lock and the per-domain nestedp2m lock @@ -216,6 +217,7 @@ struct p2m_domain { * The host p2m hasolds the head of the list and the np2ms are * threaded on in LRU order. */ struct list_head np2m_list; +#endif /* Host p2m: Log-dirty ranges registered for the domain. */ struct rangeset *logdirty_ranges; -- git-series 0.9.1 _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxxxxxxxxx https://lists.xenproject.org/mailman/listinfo/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |