qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
From: Alexander Graf <agraf@suse.de>
To: David Gibson <david@gibson.dropbear.id.au>
Cc: qemu-devel@nongnu.org
Subject: Re: [Qemu-devel] [PATCH 2/2] pseries: Add device tree properties for VMX/VSX and DFP under kvm
Date: Wed, 12 Oct 2011 16:17:56 +0200	[thread overview]
Message-ID: <4E95A194.5030608@suse.de> (raw)
In-Reply-To: <1318307461-9817-2-git-send-email-david@gibson.dropbear.id.au>

On 10/11/2011 06:31 AM, David Gibson wrote:
> Sufficiently recent PAPR specifications define properties "ibm,vmx"
> and "ibm,dfp" on the CPU node which advertise whether the VMX vector
> extensions (or the later VSX version) and/or the Decimal Floating
> Point operations from IBM's recent POWER CPUs are available.
>
> Currently we do not put these in the guest device tree and the guest
> kernel will consequently assume they are not available.  This is good,
> because they are not supported under TCG.  VMX is similar enough to
> Altivec that it might be trivial to support, but VSX and DFP would
> both require significant work to support in TCG.
>
> However, when running under kvm on a host which supports these
> instructions, there's no reason not to let the guest use them.  This
> patch, therefore, checks for the relevant support on the host CPU
> and, if present, advertises them to the guest as well.
>
> Signed-off-by: David Gibson<david@gibson.dropbear.id.au>
> ---
>   hw/spapr.c           |   17 +++++++++++++++++
>   target-ppc/kvm.c     |   10 ++++++++++
>   target-ppc/kvm_ppc.h |   12 ++++++++++++
>   3 files changed, 39 insertions(+), 0 deletions(-)
>
> diff --git a/hw/spapr.c b/hw/spapr.c
> index 9a3a1ea..00b9c67 100644
> --- a/hw/spapr.c
> +++ b/hw/spapr.c
> @@ -186,6 +186,8 @@ static void *spapr_create_fdt_skel(const char *cpu_model,
>                              0xffffffff, 0xffffffff};
>           uint32_t tbfreq = kvm_enabled() ? kvmppc_get_tbfreq() : TIMEBASE_FREQ;
>           uint32_t cpufreq = kvm_enabled() ? kvmppc_get_clockfreq() : 1000000000;
> +        uint32_t vmx = kvm_enabled() ? kvmppc_get_vmx() : 0;
> +        uint32_t dfp = kvm_enabled() ? kvmppc_get_dfp() : 0;

This should only happen when the CPU type selected by -cpu also supports 
VMX or DFP. For now, this is moot as we can't run any non-host CPU in 
KVM for HV PPC. But looking forward, it certainly makes sense to split it.

This is not a nack, but please make sure to implement -cpu host in the 
near future and default to that for -M pseries. Then we can change this 
piece here to check for vcpu capabilities and AND them with the host caps.

The rest looks good.

Alex

>
>           if ((index % smt) != 0) {
>               continue;
> @@ -233,6 +235,21 @@ static void *spapr_create_fdt_skel(const char *cpu_model,
>                                  segs, sizeof(segs))));
>           }
>
> +        /* Advertise VMX/VSX (vector extensions) if available
> +         *   0 / no property == no vector extensions
> +         *   1               == VMX / Altivec available
> +         *   2               == VSX available */
> +        if (vmx) {
> +            _FDT((fdt_property_cell(fdt, "ibm,vmx", vmx)));
> +        }
> +
> +        /* Advertise DFP (Decimal Floating Point) if available
> +         *   0 / no property == no DFP
> +         *   1               == DFP available */
> +        if (dfp) {
> +            _FDT((fdt_property_cell(fdt, "ibm,dfp", dfp)));
> +        }
> +
>           _FDT((fdt_end_node(fdt)));
>       }
>
> diff --git a/target-ppc/kvm.c b/target-ppc/kvm.c
> index 6667b61..6a48eb4 100644
> --- a/target-ppc/kvm.c
> +++ b/target-ppc/kvm.c
> @@ -694,6 +694,16 @@ uint64_t kvmppc_get_clockfreq(void)
>       return kvmppc_read_int_cpu_dt("clock-frequency");
>   }
>
> +uint32_t kvmppc_get_vmx(void)
> +{
> +    return kvmppc_read_int_cpu_dt("ibm,vmx");
> +}
> +
> +uint32_t kvmppc_get_dfp(void)
> +{
> +    return kvmppc_read_int_cpu_dt("ibm,dfp");
> +}
> +
>   int kvmppc_get_hypercall(CPUState *env, uint8_t *buf, int buf_len)
>   {
>       uint32_t *hc = (uint32_t*)buf;
> diff --git a/target-ppc/kvm_ppc.h b/target-ppc/kvm_ppc.h
> index 9e8a7b5..fa131bf 100644
> --- a/target-ppc/kvm_ppc.h
> +++ b/target-ppc/kvm_ppc.h
> @@ -15,6 +15,8 @@ void kvmppc_init(void);
>
>   uint32_t kvmppc_get_tbfreq(void);
>   uint64_t kvmppc_get_clockfreq(void);
> +uint32_t kvmppc_get_vmx(void);
> +uint32_t kvmppc_get_dfp(void);
>   int kvmppc_get_hypercall(CPUState *env, uint8_t *buf, int buf_len);
>   int kvmppc_set_interrupt(CPUState *env, int irq, int level);
>   void kvmppc_set_papr(CPUState *env);
> @@ -35,6 +37,16 @@ static inline uint64_t kvmppc_get_clockfreq(void)
>       return 0;
>   }
>
> +static inline uint32_t kvmppc_get_vmx(void)
> +{
> +    return 0;
> +}
> +
> +static inline uint32_t kvmppc_get_dfp(void)
> +{
> +    return 0;
> +}
> +
>   static inline int kvmppc_get_hypercall(CPUState *env, uint8_t *buf, int buf_len)
>   {
>       return -1;

  reply	other threads:[~2011-10-12 14:15 UTC|newest]

Thread overview: 4+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2011-10-11  4:31 [Qemu-devel] [PATCH 1/2] ppc: Generalize the kvmppc_get_clockfreq() function David Gibson
2011-10-11  4:31 ` [Qemu-devel] [PATCH 2/2] pseries: Add device tree properties for VMX/VSX and DFP under kvm David Gibson
2011-10-12 14:17   ` Alexander Graf [this message]
2011-10-12 14:19 ` [Qemu-devel] [PATCH 1/2] ppc: Generalize the kvmppc_get_clockfreq() function Alexander Graf

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=4E95A194.5030608@suse.de \
    --to=agraf@suse.de \
    --cc=david@gibson.dropbear.id.au \
    --cc=qemu-devel@nongnu.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).