Skip to contentSkip to conversation

xen: vcpu_info reinit error after hold/release if VM has multi-cpu

PATCH In review Ouyang Zhaowei (Charles) 2 participants 2 messages Mar 30, 2015

Subsystems (2)
lore
Share & tools
lore
#0 lore raw

PATCH 1/1 xen: vcpu_info reinit error after hold/release if VM has multi-cpu

If the VM has multi-cpu the vcpu_info of cpu0 is the member of the structure HYPERVISOR_shared_info, and the others is not, but after hold/release the VM, the vcpu_info will be reinitialized, the vcpu_info of all the vcpus will be considered as the member of HYPERVISOR_shared_info. This will cause the cpu1 and other cpu keep receiving interrupts, and the cpu0 is waiting them to finish the job.
So we do not reinit the vcpu_info if it's doing hold/release.

---
 arch/x86/xen/suspend.c | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)
arch/x86/xen/suspend.c +2 -1
index c4df9db..832480c 100644
@@ -32,7 +32,8 @@ static void xen_hvm_post_suspend(int suspend_cancelled)
 {
 #ifdef CONFIG_XEN_PVHVM
        int cpu;
-       xen_hvm_init_shared_info();
+       if (!suspend_cancelled)
+               xen_hvm_init_shared_info();
        xen_callback_vector();
        xen_unplug_emulated_devices();
        if (xen_feature(XENFEAT_hvm_safe_pvclock)) {
#1 lore raw
Quoted 2 lines · Ouyang Zhaowei (Charles)

If the VM has multi-cpu the vcpu_info of cpu0 is the member of the structure HYPERVISOR_shared_info, and the others is not, but after hold/release the VM, the vcpu_info will be reinitialized,

What is 'hold/release' ? Pause and suspend? or do you mean suspend was cancelled?

Quoted 4 lines

the vcpu_info of all the vcpus will be considered as the member of HYPERVISOR_shared_info. This will cause the cpu1 and other cpu keep receiving interrupts, and the cpu0 is waiting them to finish the job.
So we do not reinit the vcpu_info if it's doing hold/release.

s/"hold/release"/suspend cancelled/ ?

Quoted 21 lines
---
 arch/x86/xen/suspend.c | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)
arch/x86/xen/suspend.c +2 -1
index c4df9db..832480c 100644
@@ -32,7 +32,8 @@ static void xen_hvm_post_suspend(int suspend_cancelled)
 {
 #ifdef CONFIG_XEN_PVHVM
        int cpu;
-       xen_hvm_init_shared_info();
+       if (!suspend_cancelled)
+               xen_hvm_init_shared_info();
        xen_callback_vector();
        xen_unplug_emulated_devices();
        if (xen_feature(XENFEAT_hvm_safe_pvclock)) {