qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
From: Alexander Graf <agraf@suse.de>
To: Michael Mueller <mimu@linux.vnet.ibm.com>,
	qemu-devel@nongnu.org, kvm@vger.kernel.org,
	linux-s390@vger.kernel.org, linux-kernel@vger.kernel.org
Cc: Gleb Natapov <gleb@kernel.org>,
	Christian Borntraeger <borntraeger@de.ibm.com>,
	"Jason J. Herne" <jjherne@linux.vnet.ibm.com>,
	Cornelia Huck <cornelia.huck@de.ibm.com>,
	Paolo Bonzini <pbonzini@redhat.com>,
	Andreas Faerber <afaerber@suse.de>,
	Richard Henderson <rth@twiddle.net>
Subject: Re: [Qemu-devel] [RFC PATCH v2 04/15] cpu-model/s390: Introduce S390 CPU models
Date: Fri, 20 Feb 2015 14:54:23 +0100	[thread overview]
Message-ID: <54E73C8F.7000202@suse.de> (raw)
In-Reply-To: <1424183053-4310-5-git-send-email-mimu@linux.vnet.ibm.com>



On 17.02.15 15:24, Michael Mueller wrote:
> This patch implements the static part of the s390 cpu class definitions.
> It defines s390 cpu models by means of virtual cpu ids (enum) which contain
> information on the cpu generation, the machine class, the GA number and
> the machine type. The cpu id is used to instantiate a cpu class per cpu
> model.
> 
> In addition the patch introduces the QMP enumeration AccelId. It is used
> to index certain cpu model poperties per accelerator.
> 
> Furthermore it extends the existing S390CPUClass by model related properties.
> 
> Signed-off-by: Michael Mueller <mimu@linux.vnet.ibm.com>
> Reviewed-by: Thomas Huth <thuth@linux.vnet.ibm.com>
> ---
>  qapi-schema.json           | 11 +++++++
>  target-s390x/Makefile.objs |  1 +
>  target-s390x/cpu-models.c  | 79 ++++++++++++++++++++++++++++++++++++++++++++++
>  target-s390x/cpu-models.h  | 71 +++++++++++++++++++++++++++++++++++++++++
>  target-s390x/cpu-qom.h     | 22 +++++++++++++
>  target-s390x/cpu.c         |  2 ++
>  6 files changed, 186 insertions(+)
>  create mode 100644 target-s390x/cpu-models.c
>  create mode 100644 target-s390x/cpu-models.h
> 
> diff --git a/qapi-schema.json b/qapi-schema.json
> index e16f8eb..4d237c8 100644
> --- a/qapi-schema.json
> +++ b/qapi-schema.json
> @@ -2473,6 +2473,17 @@
>  ##
>  { 'command': 'query-machines', 'returns': ['MachineInfo'] }
>  
> +
> +##
> +# @AccelId
> +#
> +# Defines accelerator ids
> +#
> +# Since: 2.3.0
> +##
> +{ 'enum': 'AccelId',
> +  'data': ['qtest', 'tcg', 'kvm', 'xen'  ] }
> +
>  ##
>  # @CpuDefinitionInfo:
>  #
> diff --git a/target-s390x/Makefile.objs b/target-s390x/Makefile.objs
> index 2c57494..9f55140 100644
> --- a/target-s390x/Makefile.objs
> +++ b/target-s390x/Makefile.objs
> @@ -1,5 +1,6 @@
>  obj-y += translate.o helper.o cpu.o interrupt.o
>  obj-y += int_helper.o fpu_helper.o cc_helper.o mem_helper.o misc_helper.o
>  obj-y += gdbstub.o
> +obj-y += cpu-models.o
>  obj-$(CONFIG_SOFTMMU) += machine.o ioinst.o arch_dump.o
>  obj-$(CONFIG_KVM) += kvm.o
> diff --git a/target-s390x/cpu-models.c b/target-s390x/cpu-models.c
> new file mode 100644
> index 0000000..4841553
> --- /dev/null
> +++ b/target-s390x/cpu-models.c
> @@ -0,0 +1,79 @@
> +/*
> + * CPU models for s390
> + *
> + * Copyright 2014,2015 IBM Corp.
> + *
> + * Author(s): Michael Mueller <mimu@linux.vnet.ibm.com>
> + *
> + * This work is licensed under the terms of the GNU GPL, version 2 or (at
> + * your option) any later version. See the COPYING file in the top-level
> + * directory.
> + */
> +
> +#include "qemu-common.h"
> +#include "cpu-models.h"
> +
> +#define S390_PROC_DEF(_name, _cpu_id, _desc)                            \
> +    static void                                                         \
> +    glue(_cpu_id, _cpu_class_init)                                      \
> +    (ObjectClass *oc, void *data)                                       \
> +    {                                                                   \
> +        DeviceClass *dc = DEVICE_CLASS(oc);                             \
> +        S390CPUClass *cc = S390_CPU_CLASS(oc);                          \
> +                                                                        \
> +        cc->is_active[ACCEL_ID_KVM] = true;                             \
> +        cc->mach        = g_malloc0(sizeof(S390CPUMachineProps));       \
> +        cc->mach->ga    = cpu_ga(_cpu_id);                              \
> +        cc->mach->class = cpu_class(_cpu_id);                           \
> +        cc->mach->order = cpu_order(_cpu_id);                           \
> +        cc->proc        = g_malloc0(sizeof(S390CPUProcessorProps));     \
> +        cc->proc->gen   = cpu_generation(_cpu_id);                      \
> +        cc->proc->ver   = S390_DEF_VERSION;                             \
> +        cc->proc->id    = S390_DEF_ID;                                  \
> +        cc->proc->type  = cpu_type(_cpu_id);                            \
> +        cc->proc->ibc   = S390_DEF_IBC;                                 \
> +        dc->desc        = _desc;                                        \
> +    }                                                                   \
> +    static const TypeInfo                                               \
> +    glue(_cpu_id, _cpu_type_info) = {                                   \
> +        .name       = _name "-" TYPE_S390_CPU,                          \
> +        .parent     = TYPE_S390_CPU,                                    \
> +        .class_init = glue(_cpu_id, _cpu_class_init),                   \
> +    };                                                                  \
> +    static void                                                         \
> +    glue(_cpu_id, _cpu_register_types)(void)                            \
> +    {                                                                   \
> +        type_register_static(                                           \
> +            &glue(_cpu_id, _cpu_type_info));                            \
> +    }                                                                   \
> +    type_init(glue(_cpu_id, _cpu_register_types))
> +
> +/* define S390 CPU model classes */
> +S390_PROC_DEF("2064-ga1", CPU_S390_2064_GA1, "IBM zSeries 900 GA1")
> +S390_PROC_DEF("2064-ga2", CPU_S390_2064_GA2, "IBM zSeries 900 GA2")
> +S390_PROC_DEF("2064-ga3", CPU_S390_2064_GA3, "IBM zSeries 900 GA3")
> +S390_PROC_DEF("2066-ga1", CPU_S390_2066_GA1, "IBM zSeries 800 GA1")
> +S390_PROC_DEF("2084-ga1", CPU_S390_2084_GA1, "IBM zSeries 990 GA1")
> +S390_PROC_DEF("2084-ga2", CPU_S390_2084_GA2, "IBM zSeries 990 GA2")
> +S390_PROC_DEF("2084-ga3", CPU_S390_2084_GA3, "IBM zSeries 990 GA3")
> +S390_PROC_DEF("2084-ga4", CPU_S390_2084_GA4, "IBM zSeries 990 GA4")
> +S390_PROC_DEF("2084-ga5", CPU_S390_2084_GA5, "IBM zSeries 990 GA5")
> +S390_PROC_DEF("2086-ga1", CPU_S390_2086_GA1, "IBM zSeries 890 GA1")
> +S390_PROC_DEF("2086-ga2", CPU_S390_2086_GA2, "IBM zSeries 890 GA2")
> +S390_PROC_DEF("2086-ga3", CPU_S390_2086_GA3, "IBM zSeries 890 GA3")
> +S390_PROC_DEF("2094-ga1", CPU_S390_2094_GA1, "IBM System z9 EC GA1")
> +S390_PROC_DEF("2094-ga2", CPU_S390_2094_GA2, "IBM System z9 EC GA2")
> +S390_PROC_DEF("2094-ga3", CPU_S390_2094_GA3, "IBM System z9 EC GA3")
> +S390_PROC_DEF("2096-ga1", CPU_S390_2096_GA1, "IBM System z9 BC GA1")
> +S390_PROC_DEF("2096-ga2", CPU_S390_2096_GA2, "IBM System z9 BC GA2")
> +S390_PROC_DEF("2097-ga1", CPU_S390_2097_GA1, "IBM System z10 EC GA1")
> +S390_PROC_DEF("2097-ga2", CPU_S390_2097_GA2, "IBM System z10 EC GA2")
> +S390_PROC_DEF("2097-ga3", CPU_S390_2097_GA3, "IBM System z10 EC GA3")
> +S390_PROC_DEF("2098-ga1", CPU_S390_2098_GA1, "IBM System z10 BC GA1")
> +S390_PROC_DEF("2098-ga2", CPU_S390_2098_GA2, "IBM System z10 BC GA2")
> +S390_PROC_DEF("2817-ga1", CPU_S390_2817_GA1, "IBM zEnterprise 196 GA1")
> +S390_PROC_DEF("2817-ga2", CPU_S390_2817_GA2, "IBM zEnterprise 196 GA2")
> +S390_PROC_DEF("2818-ga1", CPU_S390_2818_GA1, "IBM zEnterprise 114 GA1")
> +S390_PROC_DEF("2827-ga1", CPU_S390_2827_GA1, "IBM zEnterprise EC12 GA1")
> +S390_PROC_DEF("2827-ga2", CPU_S390_2827_GA2, "IBM zEnterprise EC12 GA2")
> +S390_PROC_DEF("2828-ga1", CPU_S390_2828_GA1, "IBM zEnterprise BC12 GA1")
> diff --git a/target-s390x/cpu-models.h b/target-s390x/cpu-models.h
> new file mode 100644
> index 0000000..db681bf
> --- /dev/null
> +++ b/target-s390x/cpu-models.h
> @@ -0,0 +1,71 @@
> +/*
> + * CPU models for s390
> + *
> + * Copyright 2014,2015 IBM Corp.
> + *
> + * Author(s): Michael Mueller <mimu@linux.vnet.ibm.com>
> + *
> + * This work is licensed under the terms of the GNU GPL, version 2 or (at
> + * your option) any later version. See the COPYING file in the top-level
> + * directory.
> + */
> +
> +#ifndef TARGET_S390X_CPU_MODELS_H
> +#define TARGET_S390X_CPU_MODELS_H
> +
> +#define S390_EC 0x1
> +#define S390_BC 0x2
> +
> +#define S390_DEF_VERSION 0xff
> +#define S390_DEF_IBC     0x0
> +#define S390_DEF_ID      0xdecade
> +#define S390_DEF_TYPE    0x2064
> +
> +#define cpu_type(x)       (((x) >>  0) & 0xffff)
> +#define cpu_order(x)      (((x) >> 16) & 0xffff)
> +#define cpu_ga(x)         (((x) >> 16) & 0xf)
> +#define cpu_class(x)      (((x) >> 20) & 0x3)
> +#define cpu_generation(x) (((x) >> 24) & 0xff)
> +
> +/*
> + * bits 0-7   : CMOS generation
> + * bits 8-9   : reserved
> + * bits 10-11 : machine class 0=unknown 1=EC 2=BC
> + * bits 12-15 : GA
> + * bits 16-31 : machine type
> + *
> + * note: bits are named according to s390
> + *       architecture specific endienness
> + */
> +enum {
> +    CPU_S390_2064_GA1 = 0x07112064,
> +    CPU_S390_2064_GA2 = 0x07122064,
> +    CPU_S390_2064_GA3 = 0x07132064,
> +    CPU_S390_2066_GA1 = 0x07212066,
> +    CPU_S390_2084_GA1 = 0x08112084,
> +    CPU_S390_2084_GA2 = 0x08122084,
> +    CPU_S390_2084_GA3 = 0x08132084,
> +    CPU_S390_2084_GA4 = 0x08142084,
> +    CPU_S390_2084_GA5 = 0x08152084,
> +    CPU_S390_2086_GA1 = 0x08212086,
> +    CPU_S390_2086_GA2 = 0x08222086,
> +    CPU_S390_2086_GA3 = 0x08232086,
> +    CPU_S390_2094_GA1 = 0x09112094,
> +    CPU_S390_2094_GA2 = 0x09122094,
> +    CPU_S390_2094_GA3 = 0x09132094,
> +    CPU_S390_2096_GA1 = 0x09212096,
> +    CPU_S390_2096_GA2 = 0x09222096,
> +    CPU_S390_2097_GA1 = 0x0a112097,
> +    CPU_S390_2097_GA2 = 0x0a122097,
> +    CPU_S390_2097_GA3 = 0x0a132097,
> +    CPU_S390_2098_GA1 = 0x0a212098,
> +    CPU_S390_2098_GA2 = 0x0a222098,
> +    CPU_S390_2817_GA1 = 0x0b112817,
> +    CPU_S390_2817_GA2 = 0x0b122817,
> +    CPU_S390_2818_GA1 = 0x0b212818,
> +    CPU_S390_2827_GA1 = 0x0c112827,
> +    CPU_S390_2827_GA2 = 0x0c122827,
> +    CPU_S390_2828_GA1 = 0x0c212828,
> +};
> +
> +#endif
> diff --git a/target-s390x/cpu-qom.h b/target-s390x/cpu-qom.h
> index 8b376df..1332147 100644
> --- a/target-s390x/cpu-qom.h
> +++ b/target-s390x/cpu-qom.h
> @@ -32,6 +32,23 @@
>  #define S390_CPU_GET_CLASS(obj) \
>      OBJECT_GET_CLASS(S390CPUClass, (obj), TYPE_S390_CPU)
>  
> +/* machine related properties */
> +typedef struct S390CPUMachineProps {
> +    uint16_t class;      /* machine class */
> +    uint16_t ga;         /* availability number of machine */
> +    uint16_t order;      /* order of availability */
> +} S390CPUMachineProps;
> +
> +/* processor related properties */
> +typedef struct S390CPUProcessorProps {
> +    uint16_t gen;        /* S390 CMOS generation */
> +    uint16_t ver;        /* version of processor */
> +    uint32_t id;         /* processor identification*/
> +    uint16_t type;       /* machine type */
> +    uint16_t ibc;        /* IBC value */
> +    uint64_t *fac_list;  /* list of facilities */

Just make this uint64_t fac_list[2]. That way we don't have to track any
messy allocations.


Alex

  reply	other threads:[~2015-02-20 13:54 UTC|newest]

Thread overview: 57+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-02-17 14:23 [Qemu-devel] [RFC PATCH v2 00/15] QEMU: s390: cpu model implementation Michael Mueller
2015-02-17 14:23 ` [Qemu-devel] [RFC PATCH v2 01/15] cpu-model: Introduce probe mode for machine none Michael Mueller
2015-02-17 14:24 ` [Qemu-devel] [RFC PATCH v2 02/15] cpu-model: Introduce option --probe to switch into probe mode Michael Mueller
2015-02-17 19:16   ` Eric Blake
2015-02-18  9:08     ` Michael Mueller
2015-02-17 14:24 ` [Qemu-devel] [RFC PATCH v2 03/15] cpu-model: Introduce stub routine cpu_desc_avail Michael Mueller
2015-02-17 14:24 ` [Qemu-devel] [RFC PATCH v2 04/15] cpu-model/s390: Introduce S390 CPU models Michael Mueller
2015-02-20 13:54   ` Alexander Graf [this message]
2015-02-20 15:00     ` Michael Mueller
2015-02-20 15:22       ` Alexander Graf
2015-02-20 15:49         ` Michael Mueller
2015-02-20 16:57           ` Alexander Graf
2015-02-20 17:37             ` Michael Mueller
2015-02-20 17:50               ` Alexander Graf
2015-02-20 19:43                 ` Michael Mueller
2015-02-20 19:55                   ` Alexander Graf
2015-02-23 12:56         ` Christian Borntraeger
2015-02-23 13:27           ` Christian Borntraeger
2015-02-20 13:55   ` Alexander Graf
2015-02-20 15:02     ` Michael Mueller
2015-02-17 14:24 ` [Qemu-devel] [RFC PATCH v2 05/15] cpu-model/s390: Introduce S390 CPU facilities Michael Mueller
2015-02-17 14:24 ` [Qemu-devel] [RFC PATCH v2 06/15] cpu-model/s390: Define cpu model specific facility lists Michael Mueller
2015-02-17 14:24 ` [Qemu-devel] [RFC PATCH v2 07/15] cpu-model/s390: Add cpu model alias definition routines Michael Mueller
2015-02-17 14:24 ` [Qemu-devel] [RFC PATCH v2 08/15] cpu-model/s390: Update linux-headers/asm-s390/kvm.h Michael Mueller
2015-02-17 14:24 ` [Qemu-devel] [RFC PATCH v2 09/15] cpu-model/s390: Add KVM VM attribute interface routines Michael Mueller
2015-02-20 13:59   ` Alexander Graf
2015-02-20 15:18     ` Michael Mueller
2015-02-20 16:59       ` Alexander Graf
2015-02-20 18:42         ` Michael Mueller
2015-02-17 14:24 ` [Qemu-devel] [RFC PATCH v2 10/15] cpu-model/s390: Add cpu class initialization routines Michael Mueller
2015-02-20 16:02   ` Richard Henderson
2015-02-20 16:12     ` Michael Mueller
2015-02-20 16:27       ` Michael Mueller
2015-02-20 16:34       ` Andreas Färber
2015-02-20 16:55         ` Michael Mueller
2015-02-20 18:11   ` Richard Henderson
2015-02-20 18:59     ` Michael Mueller
2015-02-20 19:21       ` Alexander Graf
2015-02-20 19:35         ` Michael Mueller
2015-02-17 14:24 ` [Qemu-devel] [RFC PATCH v2 11/15] cpu-model/s390: Add QMP command query-cpu-model Michael Mueller
2015-02-17 18:03   ` Eric Blake
2015-02-18  8:39     ` Michael Mueller
2015-02-17 14:24 ` [Qemu-devel] [RFC PATCH v2 12/15] cpu-model/s390: Extend QMP command query-cpu-definitions Michael Mueller
2015-02-17 18:09   ` Eric Blake
2015-02-18  9:29     ` Michael Mueller
2015-02-17 14:24 ` [Qemu-devel] [RFC PATCH v2 13/15] cpu-model/s390: Add processor property routines Michael Mueller
2015-02-20 14:03   ` Alexander Graf
2015-02-20 15:32     ` Michael Mueller
2015-02-20 15:41       ` Andreas Färber
2015-02-20 16:04         ` Michael Mueller
2015-02-20 16:28           ` Andreas Färber
2015-02-20 16:53             ` Michael Mueller
2015-02-20 16:05         ` Michael Mueller
2015-02-20 17:00       ` Alexander Graf
2015-02-20 19:29         ` Michael Mueller
2015-02-17 14:24 ` [Qemu-devel] [RFC PATCH v2 14/15] cpu-model/s390: Add cpu model selection routine Michael Mueller
2015-02-17 14:24 ` [Qemu-devel] [RFC PATCH v2 15/15] cpu-model/s390: Enable S390 cpu model Michael Mueller

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=54E73C8F.7000202@suse.de \
    --to=agraf@suse.de \
    --cc=afaerber@suse.de \
    --cc=borntraeger@de.ibm.com \
    --cc=cornelia.huck@de.ibm.com \
    --cc=gleb@kernel.org \
    --cc=jjherne@linux.vnet.ibm.com \
    --cc=kvm@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-s390@vger.kernel.org \
    --cc=mimu@linux.vnet.ibm.com \
    --cc=pbonzini@redhat.com \
    --cc=qemu-devel@nongnu.org \
    --cc=rth@twiddle.net \
    /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).