diff options
Diffstat (limited to 'arch/x86/xen')
-rw-r--r-- | arch/x86/xen/enlighten.c | 15 |
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 | ||
1297 | static void __init xen_reserve_top(void) | 1297 | static 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 | } |