|
@@ -925,10 +925,6 @@ asmlinkage void __init xen_start_kernel(void)
|
|
|
|
|
|
xen_domain_type = XEN_PV_DOMAIN;
|
|
|
|
|
|
- BUG_ON(memcmp(xen_start_info->magic, "xen-3", 5) != 0);
|
|
|
-
|
|
|
- xen_setup_features();
|
|
|
-
|
|
|
/* Install Xen paravirt ops */
|
|
|
pv_info = xen_info;
|
|
|
pv_init_ops = xen_init_ops;
|
|
@@ -937,8 +933,15 @@ asmlinkage void __init xen_start_kernel(void)
|
|
|
pv_apic_ops = xen_apic_ops;
|
|
|
pv_mmu_ops = xen_mmu_ops;
|
|
|
|
|
|
- xen_init_irq_ops();
|
|
|
+#ifdef CONFIG_X86_64
|
|
|
+ /*
|
|
|
+ * Setup percpu state. We only need to do this for 64-bit
|
|
|
+ * because 32-bit already has %fs set properly.
|
|
|
+ */
|
|
|
+ load_percpu_segment(0);
|
|
|
+#endif
|
|
|
|
|
|
+ xen_init_irq_ops();
|
|
|
xen_init_cpuid_mask();
|
|
|
|
|
|
#ifdef CONFIG_X86_LOCAL_APIC
|
|
@@ -948,6 +951,8 @@ asmlinkage void __init xen_start_kernel(void)
|
|
|
set_xen_basic_apic_ops();
|
|
|
#endif
|
|
|
|
|
|
+ xen_setup_features();
|
|
|
+
|
|
|
if (xen_feature(XENFEAT_mmu_pt_update_preserve_ad)) {
|
|
|
pv_mmu_ops.ptep_modify_prot_start = xen_ptep_modify_prot_start;
|
|
|
pv_mmu_ops.ptep_modify_prot_commit = xen_ptep_modify_prot_commit;
|
|
@@ -955,13 +960,6 @@ asmlinkage void __init xen_start_kernel(void)
|
|
|
|
|
|
machine_ops = xen_machine_ops;
|
|
|
|
|
|
-#ifdef CONFIG_X86_64
|
|
|
- /*
|
|
|
- * Setup percpu state. We only need to do this for 64-bit
|
|
|
- * because 32-bit already has %fs set properly.
|
|
|
- */
|
|
|
- load_percpu_segment(0);
|
|
|
-#endif
|
|
|
/*
|
|
|
* The only reliable way to retain the initial address of the
|
|
|
* percpu gdt_page is to remember it here, so we can go and
|