qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Qemu-devel] [PATCH V2] target-ppc: ppc64 target's virtio can be eit


From: Alexander Graf
Subject: Re: [Qemu-devel] [PATCH V2] target-ppc: ppc64 target's virtio can be either endian.
Date: Wed, 11 Dec 2013 17:11:49 +0100

On 11.12.2013, at 16:59, Greg Kurz <address@hidden> wrote:

> We base it on the OS endian, as reflected by the endianness of the
> interrupt vectors (handled through the ILE bit in the LPCR register).
> 
> This patch does two things:
> - make LPCR a KVM register
> - implement virtio_get_byteswap() over LPCR
> 
> Using first_cpu to fetch the registers from KVM may look arbitrary
> and awkward, but it is okay because KVM sets/unsets the ILE bit on
> all CPUs.
> 
> Changes in v2:
> - call cpu_synchronize_state() instead of kvm_arch_get_registers().
> 
> Suggested-by: Benjamin Herrenschmidt <address@hidden>
> Signed-off-by: Rusty Russell <address@hidden>
> Signed-off-by: Greg Kurz <address@hidden>
> ---
> 
> Alex,
> 
> If you are interested, I can resend the whole virtio+endian serie or
> setup a git tree for you to pull from.

I think this patch should really go in after / with the virtio-endian series, 
since as it is it would be dead code. So I'll just give you my ack here and 
hope whoever gets the virtio-endianness bits in also includes that with my 
reviewed-by line.

Reviewed-by: Alexander Graf <address@hidden>


Alex

> 
> --
> Greg
> 
> target-ppc/kvm.c         |    4 ++++
> target-ppc/misc_helper.c |   12 ++++++++++++
> 2 files changed, 16 insertions(+)
> 
> diff --git a/target-ppc/kvm.c b/target-ppc/kvm.c
> index 10d0cd9..b450a22 100644
> --- a/target-ppc/kvm.c
> +++ b/target-ppc/kvm.c
> @@ -869,6 +869,8 @@ int kvm_arch_put_registers(CPUState *cs, int level)
>                 DPRINTF("Warning: Unable to set VPA information to KVM\n");
>             }
>         }
> +
> +        kvm_put_one_spr(cs, KVM_REG_PPC_LPCR, SPR_LPCR);
> #endif /* TARGET_PPC64 */
>     }
> 
> @@ -1091,6 +1093,8 @@ int kvm_arch_get_registers(CPUState *cs)
>                 DPRINTF("Warning: Unable to get VPA information from KVM\n");
>             }
>         }
> +
> +        kvm_get_one_spr(cs, KVM_REG_PPC_LPCR, SPR_LPCR);
> #endif
>     }
> 
> diff --git a/target-ppc/misc_helper.c b/target-ppc/misc_helper.c
> index 616aab6..e8fc8a3 100644
> --- a/target-ppc/misc_helper.c
> +++ b/target-ppc/misc_helper.c
> @@ -20,6 +20,8 @@
> #include "helper.h"
> 
> #include "helper_regs.h"
> +#include "hw/virtio/virtio.h"
> +#include "sysemu/kvm.h"
> 
> /*****************************************************************************/
> /* SPR accesses */
> @@ -116,3 +118,13 @@ void ppc_store_msr(CPUPPCState *env, target_ulong value)
> {
>     hreg_store_msr(env, value, 0);
> }
> +
> +bool virtio_get_byteswap(void)
> +{
> +    PowerPCCPU *cp = POWERPC_CPU(first_cpu);
> +    CPUPPCState *env = &cp->env;
> +
> +    cpu_synchronize_state(first_cpu);
> +
> +    return env->spr[SPR_LPCR] & LPCR_ILE;
> +}
> 




reply via email to

[Prev in Thread] Current Thread [Next in Thread]