xen: vcpu_info reinit error after hold/release if VM has multi-cpu
Subsystems (2)
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
@@ -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)) {
Quoted 2 lines · Ouyang Zhaowei (Charles)
If the VM has multi-cpu the
vcpu_infoof cpu0 is the member of the structureHYPERVISOR_shared_info, and the others is not, but after hold/release the VM, thevcpu_infowill be reinitialized,
What is 'hold/release' ? Pause and suspend? or do you mean suspend was cancelled?
Quoted 4 lines
the
vcpu_infoof all the vcpus will be considered as the member ofHYPERVISOR_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 thevcpu_infoif it's doing hold/release.
s/"hold/release"/suspend cancelled/ ?
Quoted 21 lines
Signed-off-by Charles Ouyang <[email protected]>--- arch/x86/xen/suspend.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-)arch/x86/xen/suspend.c +2
-1@@ -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)) {