On Tue, 29 Apr 2014 11:14:12 +0200
Alexander Graf <ag...@suse.de> wrote:
> 
> On 28.04.14 14:47, Andreas Färber wrote:
> > [fixing Bharata's address]
> >
> > Am 28.04.2014 13:29, schrieb Greg Kurz:
> >> POWER7, POWER7+ and POWER8 families use the ILE bit of the LPCR
> >> special purpose register to decide the endianness to use when
> >> entering interrupt handlers. When running a linux guest, this
> >> provides a hint on the endianness used by the kernel. From a
> >> qemu point of view, the information is needed for legacy virtio
> > "QEMU" :) - and "Linux" while at it?
> >
> >> support and crash dump support as well.
> >>
> >> Suggested-by: Benjamin Herrenschmidt <b...@kernel.crashing.org>
> >> Suggested-by: Alexander Graf <ag...@suse.de>
> >> Signed-off-by: Greg Kurz <gk...@linux.vnet.ibm.com>
> >> ---
> >>   target-ppc/cpu-qom.h        |    2 ++
> >>   target-ppc/misc_helper.c    |    7 +++++++
> >>   target-ppc/translate_init.c |   16 ++++++++++++++++
> >>   3 files changed, 25 insertions(+)
> >>
> >> diff --git a/target-ppc/cpu-qom.h b/target-ppc/cpu-qom.h
> >> index 47dc8e6..c20473a 100644
> >> --- a/target-ppc/cpu-qom.h
> >> +++ b/target-ppc/cpu-qom.h
> >> @@ -76,6 +76,7 @@ typedef struct PowerPCCPUClass {
> >>       int (*handle_mmu_fault)(PowerPCCPU *cpu, target_ulong eaddr, int rwx,
> >>                               int mmu_idx);
> >>   #endif
> >> +    bool (*interrupts_big_endian)(CPUPPCState *env);
> > Please do not add *any* new functions with a CPUPPCState argument,
> > especially not in my shiny new PowerPCCPUClass. ;)
> >
> >>   } PowerPCCPUClass;
> >>   
> >>   /**
> >> @@ -118,6 +119,7 @@ int 
> >> ppc64_cpu_write_elf64_qemunote(WriteCoreDumpFunction f,
> >>                                      CPUState *cpu, void *opaque);
> >>   int ppc64_cpu_write_elf64_note(WriteCoreDumpFunction f, CPUState *cs,
> >>                                  int cpuid, void *opaque);
> >> +bool ppc_cpu_interrupts_big_endian(CPUState *cs);
> >>   #ifndef CONFIG_USER_ONLY
> >>   extern const struct VMStateDescription vmstate_ppc_cpu;
> >>   #endif
> >> diff --git a/target-ppc/misc_helper.c b/target-ppc/misc_helper.c
> >> index 2eb2fa6..0e548ff 100644
> >> --- a/target-ppc/misc_helper.c
> >> +++ b/target-ppc/misc_helper.c
> >> @@ -120,3 +120,10 @@ void ppc_store_msr(CPUPPCState *env, target_ulong 
> >> value)
> >>   {
> >>       hreg_store_msr(env, value, 0);
> >>   }
> >> +
> >> +bool ppc_cpu_interrupts_big_endian(CPUState *cs)
> >> +{
> >> +    PowerPCCPU *cpu = POWERPC_CPU(cs);
> >> +    PowerPCCPUClass *pcc = POWERPC_CPU_GET_CLASS(cpu);
> > White line after variable declaration block, please.
> >
> >> +    return pcc->interrupts_big_endian(&cpu->env);
> >> +}
> >> diff --git a/target-ppc/translate_init.c b/target-ppc/translate_init.c
> >> index 823c63c..0d5492f 100644
> >> --- a/target-ppc/translate_init.c
> >> +++ b/target-ppc/translate_init.c
> >> @@ -3102,6 +3102,18 @@ static int check_pow_hid0_74xx (CPUPPCState *env)
> >>       return 0;
> >>   }
> >>   
> >> +static bool interrupts_big_endian_always(CPUPPCState *env)
> > ppc_cpu_... as a convention for a function accepting PowerPCCPU *cpu as
> > main argument.
> >
> > Further, note that we are working towards compiling multiple targets
> > into one binary, so at least ppc_... for non-static ones please.
> >
> >> +{
> >> +    return true;
> >> +}
> >> +
> >> +#ifdef TARGET_PPC64
> >> +static bool interrupts_big_endian_POWER7(CPUPPCState *env)
> > Alex, do we prefer lowercase for new code?
> 
> If this was a POWER7 only function I think the naming would make sense. 
> But it isn't - it works on POWER8 just as well. Why not call it 
> interrupts_big_endian_lpcr()?
> 

Sure, I'll do this right now.

> 
> Alex
> 



-- 
Gregory Kurz                                     kurzg...@fr.ibm.com
                                                 gk...@linux.vnet.ibm.com
Software Engineer @ IBM/Meiosys                  http://www.ibm.com
Tel +33 (0)562 165 496

"Anarchy is about taking complete responsibility for yourself."
        Alan Moore.


Reply via email to