|
@@ -157,6 +157,21 @@ static void xen_vcpu_setup(int cpu)
|
|
|
|
|
|
BUG_ON(HYPERVISOR_shared_info == &xen_dummy_shared_info);
|
|
|
|
|
|
+ /*
|
|
|
+ * This path is called twice on PVHVM - first during bootup via
|
|
|
+ * smp_init -> xen_hvm_cpu_notify, and then if the VCPU is being
|
|
|
+ * hotplugged: cpu_up -> xen_hvm_cpu_notify.
|
|
|
+ * As we can only do the VCPUOP_register_vcpu_info once lets
|
|
|
+ * not over-write its result.
|
|
|
+ *
|
|
|
+ * For PV it is called during restore (xen_vcpu_restore) and bootup
|
|
|
+ * (xen_setup_vcpu_info_placement). The hotplug mechanism does not
|
|
|
+ * use this function.
|
|
|
+ */
|
|
|
+ if (xen_hvm_domain()) {
|
|
|
+ if (per_cpu(xen_vcpu, cpu) == &per_cpu(xen_vcpu_info, cpu))
|
|
|
+ return;
|
|
|
+ }
|
|
|
if (cpu < MAX_VIRT_CPUS)
|
|
|
per_cpu(xen_vcpu,cpu) = &HYPERVISOR_shared_info->vcpu_info[cpu];
|
|
|
|