[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-devel] [PATCH for-next v2 02/10] x86/domain: provide pv_{create, destroy}_gdt_ldt_l1tab and use them
This patch encapsulates the perdomain creation and destruction into helper functions and use them where appropriate. Since destroy_perdomain_mapping is idempotent, it is safe to call the destruction function multiple times. Signed-off-by: Wei Liu <wei.liu2@xxxxxxxxxx> --- Cc: Jan Beulich <jbeulich@xxxxxxxx> Cc: Andrew Cooper <andrew.cooper3@xxxxxxxxxx> --- xen/arch/x86/domain.c | 23 ++++++++++++++++++++--- 1 file changed, 20 insertions(+), 3 deletions(-) diff --git a/xen/arch/x86/domain.c b/xen/arch/x86/domain.c index 90e2b1f82a..1f76d034a7 100644 --- a/xen/arch/x86/domain.c +++ b/xen/arch/x86/domain.c @@ -387,6 +387,18 @@ int switch_compat(struct domain *d) return rc; } +static int pv_create_gdt_ldt_l1tab(struct domain *d, struct vcpu *v) +{ + return create_perdomain_mapping(d, GDT_VIRT_START(v), + 1 << GDT_LDT_VCPU_SHIFT, + d->arch.pv_domain.gdt_ldt_l1tab, NULL); +} + +static void pv_destroy_gdt_ldt_l1tab(struct domain *d, struct vcpu *v) +{ + destroy_perdomain_mapping(d, GDT_VIRT_START(v), 1 << GDT_LDT_VCPU_SHIFT); +} + int vcpu_initialise(struct vcpu *v) { struct domain *d = v->domain; @@ -423,9 +435,7 @@ int vcpu_initialise(struct vcpu *v) if ( !is_idle_domain(d) ) { - rc = create_perdomain_mapping(d, GDT_VIRT_START(v), - 1 << GDT_LDT_VCPU_SHIFT, - d->arch.pv_domain.gdt_ldt_l1tab, NULL); + rc = pv_create_gdt_ldt_l1tab(d, v); if ( rc ) goto done; @@ -435,6 +445,7 @@ int vcpu_initialise(struct vcpu *v) NR_VECTORS); if ( !v->arch.pv_vcpu.trap_ctxt ) { + pv_destroy_gdt_ldt_l1tab(d, v); rc = -ENOMEM; goto done; } @@ -464,7 +475,10 @@ int vcpu_initialise(struct vcpu *v) vcpu_destroy_fpu(v); if ( is_pv_domain(d) ) + { + pv_destroy_gdt_ldt_l1tab(d, v); xfree(v->arch.pv_vcpu.trap_ctxt); + } } else if ( !is_idle_domain(v->domain) ) vpmu_initialise(v); @@ -491,7 +505,10 @@ void vcpu_destroy(struct vcpu *v) if ( is_hvm_vcpu(v) ) hvm_vcpu_destroy(v); else + { + pv_destroy_gdt_ldt_l1tab(v->domain, v); xfree(v->arch.pv_vcpu.trap_ctxt); + } } static bool emulation_flags_ok(const struct domain *d, uint32_t emflags) -- 2.11.0 _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxx https://lists.xen.org/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |