|
@@ -1095,6 +1095,8 @@ static void __init xen_setup_stackprotector(void)
|
|
|
/* First C function to be called on Xen boot */
|
|
|
asmlinkage void __init xen_start_kernel(void)
|
|
|
{
|
|
|
+ struct physdev_set_iopl set_iopl;
|
|
|
+ int rc;
|
|
|
pgd_t *pgd;
|
|
|
|
|
|
if (!xen_start_info)
|
|
@@ -1209,10 +1211,18 @@ asmlinkage void __init xen_start_kernel(void)
|
|
|
#else
|
|
|
pv_info.kernel_rpl = 0;
|
|
|
#endif
|
|
|
-
|
|
|
/* set the limit of our address space */
|
|
|
xen_reserve_top();
|
|
|
|
|
|
+ /* We used to do this in xen_arch_setup, but that is too late on AMD
|
|
|
+ * were early_cpu_init (run before ->arch_setup()) calls early_amd_init
|
|
|
+ * which pokes 0xcf8 port.
|
|
|
+ */
|
|
|
+ set_iopl.iopl = 1;
|
|
|
+ rc = HYPERVISOR_physdev_op(PHYSDEVOP_set_iopl, &set_iopl);
|
|
|
+ if (rc != 0)
|
|
|
+ xen_raw_printk("physdev_op failed %d\n", rc);
|
|
|
+
|
|
|
#ifdef CONFIG_X86_32
|
|
|
/* set up basic CPUID stuff */
|
|
|
cpu_detect(&new_cpu_data);
|