Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 3e0879de authored by Isaku Yamahata's avatar Isaku Yamahata Committed by Tony Luck
Browse files

[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: default avatarQing He <qing.he@intel.com>
Signed-off-by: default avatarIsaku Yamahata <yamahata@valinux.co.jp>
Signed-off-by: default avatarTony Luck <tony.luck@intel.com>
parent 90aeb169
Loading
Loading
Loading
Loading
+41 −0
Original line number Original line Diff line number Diff line
@@ -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:
+3 −0
Original line number Original line Diff line number Diff line
@@ -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>