On 04.07.2012, at 17:37, Caraman Mihai Claudiu-B02008 wrote: >> -----Original Message----- >> From: kvm-ppc-owner@xxxxxxxxxxxxxxx [mailto:kvm-ppc- >> owner@xxxxxxxxxxxxxxx] On Behalf Of Alexander Graf >> Sent: Wednesday, July 04, 2012 6:14 PM >> To: Caraman Mihai Claudiu-B02008 >> Cc: kvm-ppc@xxxxxxxxxxxxxxx; kvm@xxxxxxxxxxxxxxx; linuxppc- >> dev@xxxxxxxxxxxxxxxx; qemu-ppc@xxxxxxxxxx >> 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@xxxxxxxxxxxxx> >>> --- >>> 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@xxxxxxxxxxxxx> >>> * Author: Scott Wood <scotwood@xxxxxxxxxxxxx> >>> + * Author: Mihai Caraman <mihai.caraman@xxxxxxxxxxxxx> >>> * >>> * 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. What a shame :(. A lot of it looks very very similar. Alex -- 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