From mboxrd@z Thu Jan 1 00:00:00 1970 From: Benjamin Herrenschmidt Subject: Re: [PATCH 17/27] Make head_64.S aware of KVM real mode code Date: Thu, 29 Oct 2009 13:45:06 +1100 Message-ID: <1256784306.26770.18.camel@pasglop> References: <1256137413-15256-1-git-send-email-agraf@suse.de> <1256137413-15256-2-git-send-email-agraf@suse.de> <1256137413-15256-3-git-send-email-agraf@suse.de> <1256137413-15256-4-git-send-email-agraf@suse.de> <1256137413-15256-5-git-send-email-agraf@suse.de> <1256137413-15256-6-git-send-email-agraf@suse.de> <1256137413-15256-7-git-send-email-agraf@suse.de> <1256137413-15256-8-git-send-email-agraf@suse.de> <1256137413-15256-9-git-send-email-agraf@suse.de> <1256137413-15256-10-git-send-email-agraf@suse.de> <1256137413-15256-11-git-send-email-agraf@suse.de> <1256137413-15256-12-git-send-email-agraf@suse.de> <1256137413-15256-13-git-send-email-agraf@suse.de> <1256137413-15256-14-git-send-email-agraf@suse.de> <1256137413-15256-15-git-send-email-agraf@suse.de> <1256137413-15256-16-git-send-email-agraf@suse.de> <1256137413-15256-17-git-send-email-agraf@suse.de> <1256137413-15256-18-git-send-email-agraf@suse.de> Mime-Version: 1.0 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: 7bit Cc: kvm-u79uwXL29TY76Z2rM5mHXA@public.gmane.org, Avi Kivity , kvm-ppc , Hollis Blanchard , Arnd Bergmann , Kevin Wolf , bphilips-l3A5Bk7waGM@public.gmane.org, Marcelo Tosatti To: Alexander Graf Return-path: In-Reply-To: <1256137413-15256-18-git-send-email-agraf-l3A5Bk7waGM@public.gmane.org> Sender: kvm-ppc-owner-u79uwXL29TY76Z2rM5mHXA@public.gmane.org List-Id: kvm.vger.kernel.org On Wed, 2009-10-21 at 17:03 +0200, Alexander Graf wrote: > We need to run some KVM trampoline code in real mode. Unfortunately, real mode > only covers 8MB on Cell so we need to squeeze ourselves as low as possible. > > Also, we need to trap interrupts to get us back from guest state to host state > without telling Linux about it. > > This patch adds interrupt traps and includes the KVM code that requires real > mode in the real mode parts of Linux. > > Signed-off-by: Alexander Graf Acked-by: Benjamin Herrenschmidt > --- > arch/powerpc/include/asm/exception-64s.h | 2 ++ > arch/powerpc/kernel/exceptions-64s.S | 8 ++++++++ > arch/powerpc/kernel/head_64.S | 7 +++++++ > 3 files changed, 17 insertions(+), 0 deletions(-) > > diff --git a/arch/powerpc/include/asm/exception-64s.h b/arch/powerpc/include/asm/exception-64s.h > index a98653b..57c4000 100644 > --- a/arch/powerpc/include/asm/exception-64s.h > +++ b/arch/powerpc/include/asm/exception-64s.h > @@ -147,6 +147,7 @@ > .globl label##_pSeries; \ > label##_pSeries: \ > HMT_MEDIUM; \ > + DO_KVM n; \ > mtspr SPRN_SPRG_SCRATCH0,r13; /* save r13 */ \ > EXCEPTION_PROLOG_PSERIES(PACA_EXGEN, label##_common) > > @@ -170,6 +171,7 @@ label##_pSeries: \ > .globl label##_pSeries; \ > label##_pSeries: \ > HMT_MEDIUM; \ > + DO_KVM n; \ > mtspr SPRN_SPRG_SCRATCH0,r13; /* save r13 */ \ > mfspr r13,SPRN_SPRG_PACA; /* get paca address into r13 */ \ > std r9,PACA_EXGEN+EX_R9(r13); /* save r9, r10 */ \ > diff --git a/arch/powerpc/kernel/exceptions-64s.S b/arch/powerpc/kernel/exceptions-64s.S > index 1808876..fc3ead0 100644 > --- a/arch/powerpc/kernel/exceptions-64s.S > +++ b/arch/powerpc/kernel/exceptions-64s.S > @@ -41,6 +41,7 @@ __start_interrupts: > . = 0x200 > _machine_check_pSeries: > HMT_MEDIUM > + DO_KVM 0x200 > mtspr SPRN_SPRG_SCRATCH0,r13 /* save r13 */ > EXCEPTION_PROLOG_PSERIES(PACA_EXMC, machine_check_common) > > @@ -48,6 +49,7 @@ _machine_check_pSeries: > .globl data_access_pSeries > data_access_pSeries: > HMT_MEDIUM > + DO_KVM 0x300 > mtspr SPRN_SPRG_SCRATCH0,r13 > BEGIN_FTR_SECTION > mfspr r13,SPRN_SPRG_PACA > @@ -77,6 +79,7 @@ ALT_FTR_SECTION_END_IFCLR(CPU_FTR_SLB) > .globl data_access_slb_pSeries > data_access_slb_pSeries: > HMT_MEDIUM > + DO_KVM 0x380 > mtspr SPRN_SPRG_SCRATCH0,r13 > mfspr r13,SPRN_SPRG_PACA /* get paca address into r13 */ > std r3,PACA_EXSLB+EX_R3(r13) > @@ -115,6 +118,7 @@ data_access_slb_pSeries: > .globl instruction_access_slb_pSeries > instruction_access_slb_pSeries: > HMT_MEDIUM > + DO_KVM 0x480 > mtspr SPRN_SPRG_SCRATCH0,r13 > mfspr r13,SPRN_SPRG_PACA /* get paca address into r13 */ > std r3,PACA_EXSLB+EX_R3(r13) > @@ -154,6 +158,7 @@ instruction_access_slb_pSeries: > .globl system_call_pSeries > system_call_pSeries: > HMT_MEDIUM > + DO_KVM 0xc00 > BEGIN_FTR_SECTION > cmpdi r0,0x1ebe > beq- 1f > @@ -186,12 +191,15 @@ END_FTR_SECTION_IFSET(CPU_FTR_REAL_LE) > * trickery is thus necessary > */ > . = 0xf00 > + DO_KVM 0xf00 > b performance_monitor_pSeries > > . = 0xf20 > + DO_KVM 0xf20 > b altivec_unavailable_pSeries > > . = 0xf40 > + DO_KVM 0xf40 > b vsx_unavailable_pSeries > > #ifdef CONFIG_CBE_RAS > diff --git a/arch/powerpc/kernel/head_64.S b/arch/powerpc/kernel/head_64.S > index c38afdb..9258074 100644 > --- a/arch/powerpc/kernel/head_64.S > +++ b/arch/powerpc/kernel/head_64.S > @@ -37,6 +37,7 @@ > #include > #include > #include > +#include > > /* The physical memory is layed out such that the secondary processor > * spin code sits at 0x0000...0x00ff. On server, the vectors follow > @@ -165,6 +166,12 @@ exception_marker: > #include "exceptions-64s.S" > #endif > > +/* KVM trampoline code needs to be close to the interrupt handlers */ > + > +#ifdef CONFIG_KVM_BOOK3S_64_HANDLER > +#include "../kvm/book3s_64_rmhandlers.S" > +#endif > + > _GLOBAL(generic_secondary_thread_init) > mr r24,r3 >