[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-changelog] [xen master] x86/domain: provide pv_{create, destroy}_gdt_ldt_l1tab and use them
commit ba61ebe1da452c5887c54b6fbd96e6ee116570c2 Author: Wei Liu <wei.liu2@xxxxxxxxxx> AuthorDate: Mon Apr 24 13:05:19 2017 +0100 Commit: Wei Liu <wei.liu2@xxxxxxxxxx> CommitDate: Wed Jun 7 12:15:56 2017 +0100 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> Reviewed-by: Jan Beulich <jbeulich@xxxxxxxx> --- xen/arch/x86/domain.c | 25 ++++++++++++++++++++++--- 1 file changed, 22 insertions(+), 3 deletions(-) diff --git a/xen/arch/x86/domain.c b/xen/arch/x86/domain.c index d9f3cfa..f2847cf 100644 --- a/xen/arch/x86/domain.c +++ b/xen/arch/x86/domain.c @@ -387,6 +387,20 @@ int switch_compat(struct domain *d) return rc; } +static int pv_create_gdt_ldt_l1tab(struct vcpu *v) +{ + return create_perdomain_mapping(v->domain, GDT_VIRT_START(v), + 1U << GDT_LDT_VCPU_SHIFT, + v->domain->arch.pv_domain.gdt_ldt_l1tab, + NULL); +} + +static void pv_destroy_gdt_ldt_l1tab(struct vcpu *v) +{ + destroy_perdomain_mapping(v->domain, GDT_VIRT_START(v), + 1U << GDT_LDT_VCPU_SHIFT); +} + int vcpu_initialise(struct vcpu *v) { struct domain *d = v->domain; @@ -423,9 +437,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(v); if ( rc ) goto done; @@ -435,6 +447,7 @@ int vcpu_initialise(struct vcpu *v) NR_VECTORS); if ( !v->arch.pv_vcpu.trap_ctxt ) { + pv_destroy_gdt_ldt_l1tab(v); rc = -ENOMEM; goto done; } @@ -464,7 +477,10 @@ int vcpu_initialise(struct vcpu *v) vcpu_destroy_fpu(v); if ( is_pv_domain(d) ) + { + pv_destroy_gdt_ldt_l1tab(v); xfree(v->arch.pv_vcpu.trap_ctxt); + } } else if ( !is_idle_domain(v->domain) ) vpmu_initialise(v); @@ -491,7 +507,10 @@ void vcpu_destroy(struct vcpu *v) if ( is_hvm_vcpu(v) ) hvm_vcpu_destroy(v); else + { + pv_destroy_gdt_ldt_l1tab(v); xfree(v->arch.pv_vcpu.trap_ctxt); + } } static bool emulation_flags_ok(const struct domain *d, uint32_t emflags) -- generated by git-patchbot for /home/xen/git/xen.git#master _______________________________________________ Xen-changelog mailing list Xen-changelog@xxxxxxxxxxxxx https://lists.xenproject.org/xen-changelog
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |