|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-changelog] [xen stable-4.6] x86: fix domain cleanup
commit 6042efc19f479d3e999e0aab4010d493cb9a29e8
Author: Jan Beulich <jbeulich@xxxxxxxx>
AuthorDate: Mon May 9 12:58:56 2016 +0200
Commit: Jan Beulich <jbeulich@xxxxxxxx>
CommitDate: Mon May 9 12:58:56 2016 +0200
x86: fix domain cleanup
Free d->arch.cpuids on both the creation error path and during
destruction.
Don't bypass iommu_domain_destroy().
Move psr_domain_init() up so that hvm_domain_initialise() again is the
last thing which can fail, and hence doesn't require undoing later on.
Move psr_domain_free() up on the creation error path, so that cleanup
once again gets done in reverse order of setup.
Signed-off-by: Jan Beulich <jbeulich@xxxxxxxx>
Reviewed-by: Andrew Cooper <andrew.cooper3@xxxxxxxxxx>
master commit: a29e895b2bde17ab239da3bff76ec00c8d9b2e77
master date: 2016-04-29 18:30:22 +0200
---
xen/arch/x86/domain.c | 14 +++++++-------
1 file changed, 7 insertions(+), 7 deletions(-)
diff --git a/xen/arch/x86/domain.c b/xen/arch/x86/domain.c
index e018c58..67b9418 100644
--- a/xen/arch/x86/domain.c
+++ b/xen/arch/x86/domain.c
@@ -639,21 +639,18 @@ int arch_domain_create(struct domain *d, unsigned int
domcr_flags,
}
spin_lock_init(&d->arch.e820_lock);
+ if ( (rc = psr_domain_init(d)) != 0 )
+ goto fail;
+
if ( has_hvm_container_domain(d) )
{
if ( (rc = hvm_domain_initialise(d)) != 0 )
- {
- iommu_domain_destroy(d);
goto fail;
- }
}
else
/* 64-bit PV guest by default. */
d->arch.is_32bit_pv = d->arch.has_32bit_shinfo = 0;
- if ( (rc = psr_domain_init(d)) != 0 )
- goto fail;
-
/* initialize default tsc behavior in case tools don't */
tsc_set_info(d, TSC_MODE_DEFAULT, 0UL, 0, 0);
spin_lock_init(&d->arch.vtsc_lock);
@@ -671,14 +668,16 @@ int arch_domain_create(struct domain *d, unsigned int
domcr_flags,
fail:
d->is_dying = DOMDYING_dead;
+ psr_domain_free(d);
+ iommu_domain_destroy(d);
cleanup_domain_irq_mapping(d);
free_xenheap_page(d->shared_info);
+ xfree(d->arch.cpuids);
if ( paging_initialised )
paging_final_teardown(d);
free_perdomain_mappings(d);
if ( is_pv_domain(d) )
free_xenheap_page(d->arch.pv_domain.gdt_ldt_l1tab);
- psr_domain_free(d);
return rc;
}
@@ -691,6 +690,7 @@ void arch_domain_destroy(struct domain *d)
hvm_domain_destroy(d);
xfree(d->arch.e820);
+ xfree(d->arch.cpuids);
free_domain_pirqs(d);
if ( !is_idle_domain(d) )
--
generated by git-patchbot for /home/xen/git/xen.git#stable-4.6
_______________________________________________
Xen-changelog mailing list
Xen-changelog@xxxxxxxxxxxxx
http://lists.xensource.com/xen-changelog
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |