diff options
| -rw-r--r-- | arch/ia64/kernel/head.S | 41 | ||||
| -rw-r--r-- | include/asm-ia64/paravirt.h | 3 |
2 files changed, 44 insertions, 0 deletions
diff --git a/arch/ia64/kernel/head.S b/arch/ia64/kernel/head.S index ddeab4e36fd5..db540e58c783 100644 --- a/arch/ia64/kernel/head.S +++ b/arch/ia64/kernel/head.S | |||
| @@ -26,11 +26,14 @@ | |||
| 26 | #include <asm/mmu_context.h> | 26 | #include <asm/mmu_context.h> |
| 27 | #include <asm/asm-offsets.h> | 27 | #include <asm/asm-offsets.h> |
| 28 | #include <asm/pal.h> | 28 | #include <asm/pal.h> |
| 29 | #include <asm/paravirt.h> | ||
| 29 | #include <asm/pgtable.h> | 30 | #include <asm/pgtable.h> |
| 30 | #include <asm/processor.h> | 31 | #include <asm/processor.h> |
| 31 | #include <asm/ptrace.h> | 32 | #include <asm/ptrace.h> |
| 32 | #include <asm/system.h> | 33 | #include <asm/system.h> |
| 33 | #include <asm/mca_asm.h> | 34 | #include <asm/mca_asm.h> |
| 35 | #include <linux/init.h> | ||
| 36 | #include <linux/linkage.h> | ||
| 34 | 37 | ||
| 35 | #ifdef CONFIG_HOTPLUG_CPU | 38 | #ifdef CONFIG_HOTPLUG_CPU |
| 36 | #define SAL_PSR_BITS_TO_SET \ | 39 | #define SAL_PSR_BITS_TO_SET \ |
| @@ -367,6 +370,44 @@ start_ap: | |||
| 367 | ;; | 370 | ;; |
| 368 | (isBP) st8 [r2]=r28 // save the address of the boot param area passed by the bootloader | 371 | (isBP) st8 [r2]=r28 // save the address of the boot param area passed by the bootloader |
| 369 | 372 | ||
| 373 | #ifdef CONFIG_PARAVIRT | ||
| 374 | |||
| 375 | movl r14=hypervisor_setup_hooks | ||
| 376 | movl r15=hypervisor_type | ||
| 377 | mov r16=num_hypervisor_hooks | ||
| 378 | ;; | ||
| 379 | ld8 r2=[r15] | ||
| 380 | ;; | ||
| 381 | cmp.ltu p7,p0=r2,r16 // array size check | ||
| 382 | shladd r8=r2,3,r14 | ||
| 383 | ;; | ||
| 384 | (p7) ld8 r9=[r8] | ||
| 385 | ;; | ||
| 386 | (p7) mov b1=r9 | ||
| 387 | (p7) cmp.ne.unc p7,p0=r9,r0 // no actual branch to NULL | ||
| 388 | ;; | ||
| 389 | (p7) br.call.sptk.many rp=b1 | ||
| 390 | |||
| 391 | __INITDATA | ||
| 392 | |||
| 393 | default_setup_hook = 0 // Currently nothing needs to be done. | ||
| 394 | |||
| 395 | .weak xen_setup_hook | ||
| 396 | |||
| 397 | .global hypervisor_type | ||
| 398 | hypervisor_type: | ||
| 399 | data8 PARAVIRT_HYPERVISOR_TYPE_DEFAULT | ||
| 400 | |||
| 401 | // must have the same order with PARAVIRT_HYPERVISOR_TYPE_xxx | ||
| 402 | |||
| 403 | hypervisor_setup_hooks: | ||
| 404 | data8 default_setup_hook | ||
| 405 | data8 xen_setup_hook | ||
| 406 | num_hypervisor_hooks = (. - hypervisor_setup_hooks) / 8 | ||
| 407 | .previous | ||
| 408 | |||
| 409 | #endif | ||
| 410 | |||
| 370 | #ifdef CONFIG_SMP | 411 | #ifdef CONFIG_SMP |
| 371 | (isAP) br.call.sptk.many rp=start_secondary | 412 | (isAP) br.call.sptk.many rp=start_secondary |
| 372 | .ret0: | 413 | .ret0: |
diff --git a/include/asm-ia64/paravirt.h b/include/asm-ia64/paravirt.h index 26b43342308e..1032b216aea6 100644 --- a/include/asm-ia64/paravirt.h +++ b/include/asm-ia64/paravirt.h | |||
| @@ -26,6 +26,9 @@ | |||
| 26 | 26 | ||
| 27 | #ifdef CONFIG_PARAVIRT_GUEST | 27 | #ifdef CONFIG_PARAVIRT_GUEST |
| 28 | 28 | ||
| 29 | #define PARAVIRT_HYPERVISOR_TYPE_DEFAULT 0 | ||
| 30 | #define PARAVIRT_HYPERVISOR_TYPE_XEN 1 | ||
| 31 | |||
| 29 | #ifndef __ASSEMBLY__ | 32 | #ifndef __ASSEMBLY__ |
| 30 | 33 | ||
| 31 | #include <asm/hw_irq.h> | 34 | #include <asm/hw_irq.h> |
