[IA64] pvops: add an early setup hook for pv_ops.
This patch adds a setup hook in the very early boot sequence before start_kernel() to initialize paravirtualization stuff. The hook will be set by each pv loader code or by using multi entry point. Signed-off-by: Qing He <qing.he@intel.com> Signed-off-by: Isaku Yamahata <yamahata@valinux.co.jp> Signed-off-by: Tony Luck <tony.luck@intel.com>
This commit is contained in:
parent
90aeb169c0
commit
3e0879deb7
|
@ -26,11 +26,14 @@
|
||||||
#include <asm/mmu_context.h>
|
#include <asm/mmu_context.h>
|
||||||
#include <asm/asm-offsets.h>
|
#include <asm/asm-offsets.h>
|
||||||
#include <asm/pal.h>
|
#include <asm/pal.h>
|
||||||
|
#include <asm/paravirt.h>
|
||||||
#include <asm/pgtable.h>
|
#include <asm/pgtable.h>
|
||||||
#include <asm/processor.h>
|
#include <asm/processor.h>
|
||||||
#include <asm/ptrace.h>
|
#include <asm/ptrace.h>
|
||||||
#include <asm/system.h>
|
#include <asm/system.h>
|
||||||
#include <asm/mca_asm.h>
|
#include <asm/mca_asm.h>
|
||||||
|
#include <linux/init.h>
|
||||||
|
#include <linux/linkage.h>
|
||||||
|
|
||||||
#ifdef CONFIG_HOTPLUG_CPU
|
#ifdef CONFIG_HOTPLUG_CPU
|
||||||
#define SAL_PSR_BITS_TO_SET \
|
#define SAL_PSR_BITS_TO_SET \
|
||||||
|
@ -367,6 +370,44 @@ start_ap:
|
||||||
;;
|
;;
|
||||||
(isBP) st8 [r2]=r28 // save the address of the boot param area passed by the bootloader
|
(isBP) st8 [r2]=r28 // save the address of the boot param area passed by the bootloader
|
||||||
|
|
||||||
|
#ifdef CONFIG_PARAVIRT
|
||||||
|
|
||||||
|
movl r14=hypervisor_setup_hooks
|
||||||
|
movl r15=hypervisor_type
|
||||||
|
mov r16=num_hypervisor_hooks
|
||||||
|
;;
|
||||||
|
ld8 r2=[r15]
|
||||||
|
;;
|
||||||
|
cmp.ltu p7,p0=r2,r16 // array size check
|
||||||
|
shladd r8=r2,3,r14
|
||||||
|
;;
|
||||||
|
(p7) ld8 r9=[r8]
|
||||||
|
;;
|
||||||
|
(p7) mov b1=r9
|
||||||
|
(p7) cmp.ne.unc p7,p0=r9,r0 // no actual branch to NULL
|
||||||
|
;;
|
||||||
|
(p7) br.call.sptk.many rp=b1
|
||||||
|
|
||||||
|
__INITDATA
|
||||||
|
|
||||||
|
default_setup_hook = 0 // Currently nothing needs to be done.
|
||||||
|
|
||||||
|
.weak xen_setup_hook
|
||||||
|
|
||||||
|
.global hypervisor_type
|
||||||
|
hypervisor_type:
|
||||||
|
data8 PARAVIRT_HYPERVISOR_TYPE_DEFAULT
|
||||||
|
|
||||||
|
// must have the same order with PARAVIRT_HYPERVISOR_TYPE_xxx
|
||||||
|
|
||||||
|
hypervisor_setup_hooks:
|
||||||
|
data8 default_setup_hook
|
||||||
|
data8 xen_setup_hook
|
||||||
|
num_hypervisor_hooks = (. - hypervisor_setup_hooks) / 8
|
||||||
|
.previous
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
#ifdef CONFIG_SMP
|
#ifdef CONFIG_SMP
|
||||||
(isAP) br.call.sptk.many rp=start_secondary
|
(isAP) br.call.sptk.many rp=start_secondary
|
||||||
.ret0:
|
.ret0:
|
||||||
|
|
|
@ -26,6 +26,9 @@
|
||||||
|
|
||||||
#ifdef CONFIG_PARAVIRT_GUEST
|
#ifdef CONFIG_PARAVIRT_GUEST
|
||||||
|
|
||||||
|
#define PARAVIRT_HYPERVISOR_TYPE_DEFAULT 0
|
||||||
|
#define PARAVIRT_HYPERVISOR_TYPE_XEN 1
|
||||||
|
|
||||||
#ifndef __ASSEMBLY__
|
#ifndef __ASSEMBLY__
|
||||||
|
|
||||||
#include <asm/hw_irq.h>
|
#include <asm/hw_irq.h>
|
||||||
|
|
Loading…
Reference in New Issue