|
@@ -1207,12 +1207,20 @@ asmlinkage __visible void __init xen_start_kernel(void)
|
|
|
|
|
|
xen_setup_features();
|
|
|
|
|
|
- xen_setup_machphys_mapping();
|
|
|
-
|
|
|
/* Install Xen paravirt ops */
|
|
|
pv_info = xen_info;
|
|
|
pv_init_ops.patch = paravirt_patch_default;
|
|
|
pv_cpu_ops = xen_cpu_ops;
|
|
|
+ xen_init_irq_ops();
|
|
|
+
|
|
|
+ /*
|
|
|
+ * Setup xen_vcpu early because it is needed for
|
|
|
+ * local_irq_disable(), irqs_disabled(), e.g. in printk().
|
|
|
+ *
|
|
|
+ * Don't do the full vcpu_info placement stuff until we have
|
|
|
+ * the cpu_possible_mask and a non-dummy shared_info.
|
|
|
+ */
|
|
|
+ xen_vcpu_info_reset(0);
|
|
|
|
|
|
x86_platform.get_nmi_reason = xen_get_nmi_reason;
|
|
|
|
|
@@ -1225,6 +1233,7 @@ asmlinkage __visible void __init xen_start_kernel(void)
|
|
|
* Set up some pagetable state before starting to set any ptes.
|
|
|
*/
|
|
|
|
|
|
+ xen_setup_machphys_mapping();
|
|
|
xen_init_mmu_ops();
|
|
|
|
|
|
/* Prevent unwanted bits from being set in PTEs. */
|
|
@@ -1250,20 +1259,9 @@ asmlinkage __visible void __init xen_start_kernel(void)
|
|
|
get_cpu_cap(&boot_cpu_data);
|
|
|
x86_configure_nx();
|
|
|
|
|
|
- xen_init_irq_ops();
|
|
|
-
|
|
|
/* Let's presume PV guests always boot on vCPU with id 0. */
|
|
|
per_cpu(xen_vcpu_id, 0) = 0;
|
|
|
|
|
|
- /*
|
|
|
- * Setup xen_vcpu early because idt_setup_early_handler needs it for
|
|
|
- * local_irq_disable(), irqs_disabled().
|
|
|
- *
|
|
|
- * Don't do the full vcpu_info placement stuff until we have
|
|
|
- * the cpu_possible_mask and a non-dummy shared_info.
|
|
|
- */
|
|
|
- xen_vcpu_info_reset(0);
|
|
|
-
|
|
|
idt_setup_early_handler();
|
|
|
|
|
|
xen_init_capabilities();
|