[Qemu-ppc] [RFC PATCH 15/17] KVM: PPC64: bookehv: Add support for interrupt handling
Caraman Mihai Claudiu-B02008
B02008 at freescale.com
Thu Jul 5 01:37:26 EST 2012
> -----Original Message-----
> From: kvm-ppc-owner at vger.kernel.org [mailto:kvm-ppc-
> owner at vger.kernel.org] On Behalf Of Alexander Graf
> Sent: Wednesday, July 04, 2012 6:14 PM
> To: Caraman Mihai Claudiu-B02008
> Cc: kvm-ppc at vger.kernel.org; kvm at vger.kernel.org; linuxppc-
> dev at lists.ozlabs.org; qemu-ppc at nongnu.org
> Subject: Re: [Qemu-ppc] [RFC PATCH 15/17] KVM: PPC64: bookehv: Add
> support for interrupt handling
>
>
> On 25.06.2012, at 14:26, Mihai Caraman wrote:
>
> > Add bookehv interrupt handling support for 64-bit hosts. Change common
> stack
> > layout to refer PPC_LR_STKOFF kernel constant. Dispatch the 64-bit
> execution
> > flow to the existing kvm_handler_common asm macro. Update input
> register
> > values documentation.
> > Only the bolted version of TLB miss exception handlers is supported
> now.
> >
> > Signed-off-by: Mihai Caraman <mihai.caraman at freescale.com>
> > ---
> > arch/powerpc/include/asm/kvm_booke_hv_asm.h | 12 +++-
> > arch/powerpc/kvm/bookehv_interrupts.S | 120
> +++++++++++++++++++++++++--
> > 2 files changed, 122 insertions(+), 10 deletions(-)
> >
> > diff --git a/arch/powerpc/include/asm/kvm_booke_hv_asm.h
> b/arch/powerpc/include/asm/kvm_booke_hv_asm.h
> > index 30a600f..8be6f87 100644
> > --- a/arch/powerpc/include/asm/kvm_booke_hv_asm.h
> > +++ b/arch/powerpc/include/asm/kvm_booke_hv_asm.h
> > @@ -1,5 +1,5 @@
> > /*
> > - * Copyright 2010-2011 Freescale Semiconductor, Inc.
> > + * Copyright 2010-2012 Freescale Semiconductor, Inc.
> > *
> > * This program is free software; you can redistribute it and/or modify
> > * it under the terms of the GNU General Public License, version 2, as
> > @@ -17,6 +17,7 @@
> > * there are no exceptions for which we fall through directly to
> > * the normal host handler.
> > *
> > + * 32-bit host
> > * Expected inputs (normal exceptions):
> > * SCRATCH0 = saved r10
> > * r10 = thread struct
> > @@ -33,6 +34,15 @@
> > * *(r8 + GPR9) = saved r9
> > * *(r8 + GPR10) = saved r10 (r10 not yet clobbered)
> > * *(r8 + GPR11) = saved r11
> > + *
> > + * 64-bit host
> > + * Expected inputs (exception types GEN/DBG/CRIT/MC):
> > + * r13 = PACA_POINTER
> > + * r10 = saved CR
> > + * SPRN_SPRG_##type##_SCRATCH = saved r13
> > + * *(r13 + PACA_EX##type + EX_R10) = saved r10
> > + * *(r13 + PACA_EX##type + EX_R11) = saved r11
> > + * Only the bolted version of TLB miss exception handlers is supported
> now.
> > */
> > .macro DO_KVM intno srr1
> > #ifdef CONFIG_KVM_BOOKE_HV
> > diff --git a/arch/powerpc/kvm/bookehv_interrupts.S
> b/arch/powerpc/kvm/bookehv_interrupts.S
> > index dff8ed4..04097de 100644
> > --- a/arch/powerpc/kvm/bookehv_interrupts.S
> > +++ b/arch/powerpc/kvm/bookehv_interrupts.S
> > @@ -12,10 +12,11 @@
> > * along with this program; if not, write to the Free Software
> > * Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
> USA.
> > *
> > - * Copyright (C) 2010-2011 Freescale Semiconductor, Inc.
> > + * Copyright (C) 2010-2012 Freescale Semiconductor, Inc.
> > *
> > * Author: Varun Sethi <varun.sethi at freescale.com>
> > * Author: Scott Wood <scotwood at freescale.com>
> > + * Author: Mihai Caraman <mihai.caraman at freescale.com>
> > *
> > * This file is derived from arch/powerpc/kvm/booke_interrupts.S
> > */
> > @@ -30,7 +31,11 @@
> > #include <asm/bitsperlong.h>
> > #include <asm/thread_info.h>
> >
> > +#ifdef CONFIG_64BIT
> > +#include <asm/exception-64e.h>
> > +#else
> > #include "../kernel/head_booke.h" /* for THREAD_NORMSAVE() */
> > +#endif
> >
> >
> > +#ifdef CONFIG_64BIT
> > +/*
> > + * For input register values, see
> arch/powerpc/include/asm/kvm_booke_hv_asm.h
> > + */
> > +.macro kvm_handler intno scratch, paca_ex, ex_r10, ex_r11, srr0, srr1,
> flags
> > + _GLOBAL(kvmppc_handler_\intno\()_\srr1)
>
> Is this code so vastly different from the 32bit variant that they can't
> be the same with a few simple ifdef's here and there?
As you can see from input register values things are quite different. I strived
to keep the code common, the only divergence is in the kvm_handler definitions.
-Mike
More information about the Linuxppc-dev
mailing list