aboutsummaryrefslogtreecommitdiffstats
path: root/arch/x86/xen
diff options
context:
space:
mode:
Diffstat (limited to 'arch/x86/xen')
-rw-r--r--arch/x86/xen/enlighten.c15
1 files changed, 15 insertions, 0 deletions
diff --git a/arch/x86/xen/enlighten.c b/arch/x86/xen/enlighten.c
index afb047e30bdc..ada2e1a141df 100644
--- a/arch/x86/xen/enlighten.c
+++ b/arch/x86/xen/enlighten.c
@@ -1296,6 +1296,7 @@ static const struct machine_ops __initdata xen_machine_ops = {
1296 1296
1297static void __init xen_reserve_top(void) 1297static void __init xen_reserve_top(void)
1298{ 1298{
1299#ifdef CONFIG_X86_32
1299 unsigned long top = HYPERVISOR_VIRT_START; 1300 unsigned long top = HYPERVISOR_VIRT_START;
1300 struct xen_platform_parameters pp; 1301 struct xen_platform_parameters pp;
1301 1302
@@ -1303,6 +1304,7 @@ static void __init xen_reserve_top(void)
1303 top = pp.virt_start; 1304 top = pp.virt_start;
1304 1305
1305 reserve_top_address(-top + 2 * PAGE_SIZE); 1306 reserve_top_address(-top + 2 * PAGE_SIZE);
1307#endif /* CONFIG_X86_32 */
1306} 1308}
1307 1309
1308/* First C function to be called on Xen boot */ 1310/* First C function to be called on Xen boot */
@@ -1333,6 +1335,11 @@ asmlinkage void __init xen_start_kernel(void)
1333 1335
1334 machine_ops = xen_machine_ops; 1336 machine_ops = xen_machine_ops;
1335 1337
1338#ifdef CONFIG_X86_64
1339 /* Disable until direct per-cpu data access. */
1340 have_vcpu_info_placement = 0;
1341#endif
1342
1336#ifdef CONFIG_SMP 1343#ifdef CONFIG_SMP
1337 smp_ops = xen_smp_ops; 1344 smp_ops = xen_smp_ops;
1338#endif 1345#endif
@@ -1343,9 +1350,11 @@ asmlinkage void __init xen_start_kernel(void)
1343 1350
1344 pgd = (pgd_t *)xen_start_info->pt_base; 1351 pgd = (pgd_t *)xen_start_info->pt_base;
1345 1352
1353#ifdef CONFIG_X86_32
1346 init_pg_tables_start = __pa(pgd); 1354 init_pg_tables_start = __pa(pgd);
1347 init_pg_tables_end = __pa(pgd) + xen_start_info->nr_pt_frames*PAGE_SIZE; 1355 init_pg_tables_end = __pa(pgd) + xen_start_info->nr_pt_frames*PAGE_SIZE;
1348 max_pfn_mapped = (init_pg_tables_end + 512*1024) >> PAGE_SHIFT; 1356 max_pfn_mapped = (init_pg_tables_end + 512*1024) >> PAGE_SHIFT;
1357#endif
1349 1358
1350 init_mm.pgd = pgd; /* use the Xen pagetables to start */ 1359 init_mm.pgd = pgd; /* use the Xen pagetables to start */
1351 1360
@@ -1372,7 +1381,9 @@ asmlinkage void __init xen_start_kernel(void)
1372 1381
1373 /* set up basic CPUID stuff */ 1382 /* set up basic CPUID stuff */
1374 cpu_detect(&new_cpu_data); 1383 cpu_detect(&new_cpu_data);
1384#ifdef CONFIG_X86_32
1375 new_cpu_data.hard_math = 1; 1385 new_cpu_data.hard_math = 1;
1386#endif
1376 new_cpu_data.x86_capability[0] = cpuid_edx(1); 1387 new_cpu_data.x86_capability[0] = cpuid_edx(1);
1377 1388
1378 /* Poke various useful things into boot_params */ 1389 /* Poke various useful things into boot_params */
@@ -1388,5 +1399,9 @@ asmlinkage void __init xen_start_kernel(void)
1388 } 1399 }
1389 1400
1390 /* Start the world */ 1401 /* Start the world */
1402#ifdef CONFIG_X86_32
1391 i386_start_kernel(); 1403 i386_start_kernel();
1404#else
1405 x86_64_start_kernel((char *)&boot_params);
1406#endif
1392} 1407}