|
@@ -119,6 +119,27 @@ static void __init xen_banner(void)
|
|
|
version >> 16, version & 0xffff, extra.extraversion,
|
|
|
xen_feature(XENFEAT_mmu_pt_update_preserve_ad) ? " (preserve-AD)" : "");
|
|
|
}
|
|
|
+
|
|
|
+static void __init xen_pv_init_platform(void)
|
|
|
+{
|
|
|
+ set_fixmap(FIX_PARAVIRT_BOOTMAP, xen_start_info->shared_info);
|
|
|
+ HYPERVISOR_shared_info = (void *)fix_to_virt(FIX_PARAVIRT_BOOTMAP);
|
|
|
+
|
|
|
+ /* xen clock uses per-cpu vcpu_info, need to init it for boot cpu */
|
|
|
+ xen_vcpu_info_reset(0);
|
|
|
+
|
|
|
+ /* pvclock is in shared info area */
|
|
|
+ xen_init_time_ops();
|
|
|
+}
|
|
|
+
|
|
|
+static void __init xen_pv_guest_late_init(void)
|
|
|
+{
|
|
|
+#ifndef CONFIG_SMP
|
|
|
+ /* Setup shared vcpu info for non-smp configurations */
|
|
|
+ xen_setup_vcpu_info_placement();
|
|
|
+#endif
|
|
|
+}
|
|
|
+
|
|
|
/* Check if running on Xen version (major, minor) or later */
|
|
|
bool
|
|
|
xen_running_on_version_or_later(unsigned int major, unsigned int minor)
|
|
@@ -947,34 +968,8 @@ static void xen_write_msr(unsigned int msr, unsigned low, unsigned high)
|
|
|
xen_write_msr_safe(msr, low, high);
|
|
|
}
|
|
|
|
|
|
-void xen_setup_shared_info(void)
|
|
|
-{
|
|
|
- set_fixmap(FIX_PARAVIRT_BOOTMAP, xen_start_info->shared_info);
|
|
|
-
|
|
|
- HYPERVISOR_shared_info =
|
|
|
- (struct shared_info *)fix_to_virt(FIX_PARAVIRT_BOOTMAP);
|
|
|
-
|
|
|
- xen_setup_mfn_list_list();
|
|
|
-
|
|
|
- if (system_state == SYSTEM_BOOTING) {
|
|
|
-#ifndef CONFIG_SMP
|
|
|
- /*
|
|
|
- * In UP this is as good a place as any to set up shared info.
|
|
|
- * Limit this to boot only, at restore vcpu setup is done via
|
|
|
- * xen_vcpu_restore().
|
|
|
- */
|
|
|
- xen_setup_vcpu_info_placement();
|
|
|
-#endif
|
|
|
- /*
|
|
|
- * Now that shared info is set up we can start using routines
|
|
|
- * that point to pvclock area.
|
|
|
- */
|
|
|
- xen_init_time_ops();
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
/* This is called once we have the cpu_possible_mask */
|
|
|
-void __ref xen_setup_vcpu_info_placement(void)
|
|
|
+void __init xen_setup_vcpu_info_placement(void)
|
|
|
{
|
|
|
int cpu;
|
|
|
|
|
@@ -1228,6 +1223,8 @@ asmlinkage __visible void __init xen_start_kernel(void)
|
|
|
x86_init.irqs.intr_mode_init = x86_init_noop;
|
|
|
x86_init.oem.arch_setup = xen_arch_setup;
|
|
|
x86_init.oem.banner = xen_banner;
|
|
|
+ x86_init.hyper.init_platform = xen_pv_init_platform;
|
|
|
+ x86_init.hyper.guest_late_init = xen_pv_guest_late_init;
|
|
|
|
|
|
/*
|
|
|
* Set up some pagetable state before starting to set any ptes.
|