On Fri, 2010-04-16 at 00:11 +0200, Alexander Graf wrote: > When an interrupt occurs we don't know yet if we're in guest context or > in host context. When in guest context, KVM needs to handle it. > > So let's pull the same trick we did on Book3S_64: Just add a macro to > determine if we're in guest context or not and if so jump on to KVM code. > Acked-by: Benjamin Herrenschmidt <benh@xxxxxxxxxxxxxxxxxxx> > Signed-off-by: Alexander Graf <agraf@xxxxxxx> > --- > arch/powerpc/kernel/head_32.S | 14 ++++++++++++++ > 1 files changed, 14 insertions(+), 0 deletions(-) > > diff --git a/arch/powerpc/kernel/head_32.S b/arch/powerpc/kernel/head_32.S > index e025e89..98c4b29 100644 > --- a/arch/powerpc/kernel/head_32.S > +++ b/arch/powerpc/kernel/head_32.S > @@ -33,6 +33,7 @@ > #include <asm/asm-offsets.h> > #include <asm/ptrace.h> > #include <asm/bug.h> > +#include <asm/kvm_book3s_asm.h> > > /* 601 only have IBAT; cr0.eq is set on 601 when using this macro */ > #define LOAD_BAT(n, reg, RA, RB) \ > @@ -303,6 +304,7 @@ __secondary_hold_acknowledge: > */ > #define EXCEPTION(n, label, hdlr, xfer) \ > . = n; \ > + DO_KVM n; \ > label: \ > EXCEPTION_PROLOG; \ > addi r3,r1,STACK_FRAME_OVERHEAD; \ > @@ -358,6 +360,7 @@ i##n: \ > * -- paulus. > */ > . = 0x200 > + DO_KVM 0x200 > mtspr SPRN_SPRG_SCRATCH0,r10 > mtspr SPRN_SPRG_SCRATCH1,r11 > mfcr r10 > @@ -381,6 +384,7 @@ i##n: \ > > /* Data access exception. */ > . = 0x300 > + DO_KVM 0x300 > DataAccess: > EXCEPTION_PROLOG > mfspr r10,SPRN_DSISR > @@ -397,6 +401,7 @@ DataAccess: > > /* Instruction access exception. */ > . = 0x400 > + DO_KVM 0x400 > InstructionAccess: > EXCEPTION_PROLOG > andis. r0,r9,0x4000 /* no pte found? */ > @@ -413,6 +418,7 @@ InstructionAccess: > > /* Alignment exception */ > . = 0x600 > + DO_KVM 0x600 > Alignment: > EXCEPTION_PROLOG > mfspr r4,SPRN_DAR > @@ -427,6 +433,7 @@ Alignment: > > /* Floating-point unavailable */ > . = 0x800 > + DO_KVM 0x800 > FPUnavailable: > BEGIN_FTR_SECTION > /* > @@ -450,6 +457,7 @@ END_FTR_SECTION_IFSET(CPU_FTR_FPU_UNAVAILABLE) > > /* System call */ > . = 0xc00 > + DO_KVM 0xc00 > SystemCall: > EXCEPTION_PROLOG > EXC_XFER_EE_LITE(0xc00, DoSyscall) > @@ -467,9 +475,11 @@ SystemCall: > * by executing an altivec instruction. > */ > . = 0xf00 > + DO_KVM 0xf00 > b PerformanceMonitor > > . = 0xf20 > + DO_KVM 0xf20 > b AltiVecUnavailable > > /* > @@ -882,6 +892,10 @@ __secondary_start: > RFI > #endif /* CONFIG_SMP */ > > +#ifdef CONFIG_KVM_BOOK3S_HANDLER > +#include "../kvm/book3s_rmhandlers.S" > +#endif > + > /* > * Those generic dummy functions are kept for CPUs not > * included in CONFIG_6xx -- To unsubscribe from this list: send the line "unsubscribe kvm" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html