x86/VPMU: Set VPMU context pointer to NULL when freeing it
authorBoris Ostrovsky <boris.ostrovsky@oracle.com>
Wed, 9 Sep 2015 13:32:00 +0000 (15:32 +0200)
committerJan Beulich <jbeulich@suse.com>
Wed, 9 Sep 2015 13:32:00 +0000 (15:32 +0200)
Otherwise we may hit assertion in vpmu_initialise() if vcpu is offlined
and then onlined again.

For tidyness, set priv_context to NULL as well.

Signed-off-by: Boris Ostrovsky <boris.ostrovsky@oracle.com>
Reviewed-by: Dietmar Hahn <dietmar.hahn@ts.fujitsu.com>
Release-acked-by: Wei Liu <wei.liu2@citrix.com>
xen/arch/x86/cpu/vpmu_amd.c
xen/arch/x86/cpu/vpmu_intel.c

index 825be7295fcc6c581f5276b70b9ea72458614fbf..04da81aae5d67cda7419fc624a7816bf2963e9e7 100644 (file)
@@ -438,6 +438,8 @@ static void amd_vpmu_destroy(struct vcpu *v)
         amd_vpmu_unset_msr_bitmap(v);
 
     xfree(vpmu->context);
+    vpmu->context = NULL;
+    vpmu->priv_context = NULL;
 
     if ( vpmu_is_set(vpmu, VPMU_RUNNING) )
         release_pmu_ownship(PMU_OWNER_HVM);
index b3750d7de1c3e4666dec826503014cd1ac8578d0..12f80aeb7016efddea332d404f7531c99108f016 100644 (file)
@@ -828,7 +828,9 @@ static void core2_vpmu_destroy(struct vcpu *v)
     struct vpmu_struct *vpmu = vcpu_vpmu(v);
 
     xfree(vpmu->context);
+    vpmu->context = NULL;
     xfree(vpmu->priv_context);
+    vpmu->priv_context = NULL;
     if ( has_hvm_container_vcpu(v) && cpu_has_vmx_msr_bitmap )
         core2_vpmu_unset_msr_bitmap(v->arch.hvm_vmx.msr_bitmap);
     release_pmu_ownship(PMU_OWNER_HVM);