From: pierre <pierre@imap.linux.ibm.com>
To: Thomas Huth <thuth@redhat.com>
Cc: Pierre Morel <pmorel@linux.ibm.com>,
qemu-s390x@nongnu.org, qemu-devel@nongnu.org,
borntraeger@de.ibm.com, pasic@linux.ibm.com,
richard.henderson@linaro.org, david@redhat.com,
cohuck@redhat.com, mst@redhat.com, pbonzini@redhat.com,
kvm@vger.kernel.org, ehabkost@redhat.com,
marcel.apfelbaum@gmail.com, eblake@redhat.com, armbru@redhat.com,
seiden@linux.ibm.com, nrb@linux.ibm.com, nsg@linux.ibm.com,
frankja@linux.ibm.com, berrange@redhat.com, clg@kaod.org
Subject: Re: [PATCH v16 02/11] s390x/cpu topology: add topology entries on CPU hotplug
Date: Thu, 23 Feb 2023 15:06:29 +0100 [thread overview]
Message-ID: <a19eb89ab4841e389e72b50ec017ae01@imap.linux.ibm.com> (raw)
In-Reply-To: <4bd16293-62e8-d7ea-dab4-9e5cb0208812@redhat.com>
On 2023-02-23 13:53, Thomas Huth wrote:
> On 22/02/2023 15.20, Pierre Morel wrote:
>> The topology information are attributes of the CPU and are
>> specified during the CPU device creation.
> ...
>> diff --git a/include/hw/s390x/cpu-topology.h
>> b/include/hw/s390x/cpu-topology.h
>> index 83f31604cc..fa7f885a9f 100644
>> --- a/include/hw/s390x/cpu-topology.h
>> +++ b/include/hw/s390x/cpu-topology.h
>> @@ -10,6 +10,47 @@
>> #ifndef HW_S390X_CPU_TOPOLOGY_H
>> #define HW_S390X_CPU_TOPOLOGY_H
>> +#include "qemu/queue.h"
>> +#include "hw/boards.h"
>> +#include "qapi/qapi-types-machine-target.h"
>> +
>> #define S390_TOPOLOGY_CPU_IFL 0x03
>> +typedef struct S390Topology {
>> + uint8_t *cores_per_socket;
>> + CpuTopology *smp;
>> + CpuS390Polarization polarization;
>> +} S390Topology;
>> +
>> +#ifdef CONFIG_KVM
>> +bool s390_has_topology(void);
>> +void s390_topology_setup_cpu(MachineState *ms, S390CPU *cpu, Error
>> **errp);
>> +#else
>> +static inline bool s390_has_topology(void)
>> +{
>> + return false;
>> +}
>> +static inline void s390_topology_setup_cpu(MachineState *ms,
>> + S390CPU *cpu,
>> + Error **errp) {}
>> +#endif
>> +
>> +extern S390Topology s390_topology;
>> +int s390_socket_nb(S390CPU *cpu);
>> +
>> +static inline int s390_std_socket(int n, CpuTopology *smp)
>> +{
>> + return (n / smp->cores) % smp->sockets;
>> +}
>> +
>> +static inline int s390_std_book(int n, CpuTopology *smp)
>> +{
>> + return (n / (smp->cores * smp->sockets)) % smp->books;
>> +}
>> +
>> +static inline int s390_std_drawer(int n, CpuTopology *smp)
>> +{
>> + return (n / (smp->cores * smp->sockets * smp->books)) %
>> smp->books;
>
> Shouldn't that be " % smp->drawers" instead?
/o\ Yes it is of course.
thanks.
>
>> +}
>> +
>> #endif
>> diff --git a/hw/s390x/cpu-topology.c b/hw/s390x/cpu-topology.c
>> new file mode 100644
>> index 0000000000..59f2cc15c7
>> --- /dev/null
>> +++ b/hw/s390x/cpu-topology.c
>> @@ -0,0 +1,270 @@
>> +/*
>> + * CPU Topology
>> + *
>> + * Copyright IBM Corp. 2022
>> + * Author(s): Pierre Morel <pmorel@linux.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/osdep.h"
>> +#include "qapi/error.h"
>> +#include "qemu/error-report.h"
>> +#include "hw/qdev-properties.h"
>> +#include "hw/boards.h"
>> +#include "qemu/typedefs.h"
>> +#include "target/s390x/cpu.h"
>> +#include "hw/s390x/s390-virtio-ccw.h"
>> +#include "hw/s390x/cpu-topology.h"
>> +
>> +/*
>> + * s390_topology is used to keep the topology information.
>> + * .cores_per_socket: tracks information on the count of cores
>> + * per socket.
>> + * .smp: keeps track of the machine topology.
>> + *
>> + */
>> +S390Topology s390_topology = {
>> + /* will be initialized after the cpu model is realized */
>> + .cores_per_socket = NULL,
>> + .smp = NULL,
>> + .polarization = S390_CPU_POLARIZATION_HORIZONTAL,
>> +};
>> +
>> +/**
>> + * s390_socket_nb:
>> + * @cpu: s390x CPU
>> + *
>> + * Returns the socket number used inside the cores_per_socket array
>> + * for a cpu.
>> + */
>> +int s390_socket_nb(S390CPU *cpu)
>> +{
>> + return (cpu->env.drawer_id * s390_topology.smp->books +
>> cpu->env.book_id) *
>> + s390_topology.smp->sockets + cpu->env.socket_id;
>> +}
>> +
>> +/**
>> + * s390_has_topology:
>> + *
>> + * Return value: if the topology is supported by the machine.
>> + */
>> +bool s390_has_topology(void)
>> +{
>> + return false;
>> +}
>> +
>> +/**
>> + * s390_topology_init:
>> + * @ms: the machine state where the machine topology is defined
>> + *
>> + * Keep track of the machine topology.
>> + *
>> + * Allocate an array to keep the count of cores per socket.
>> + * The index of the array starts at socket 0 from book 0 and
>> + * drawer 0 up to the maximum allowed by the machine topology.
>> + */
>> +static void s390_topology_init(MachineState *ms)
>> +{
>> + CpuTopology *smp = &ms->smp;
>> +
>> + s390_topology.smp = smp;
>> + s390_topology.cores_per_socket = g_new0(uint8_t, smp->sockets *
>> + smp->books *
>> smp->drawers);
>> +}
>> +
>> +/**
>> + * s390_topology_cpu_default:
>> + * @cpu: pointer to a S390CPU
>> + * @errp: Error pointer
>> + *
>> + * Setup the default topology if no attributes are already set.
>> + * Passing a CPU with some, but not all, attributes set is considered
>> + * an error.
>> + *
>> + * The function calculates the (drawer_id, book_id, socket_id)
>> + * topology by filling the cores starting from the first socket
>> + * (0, 0, 0) up to the last (smp->drawers, smp->books, smp->sockets).
>> + *
>> + * CPU type, entitlement and dedication have defaults values set in
>> the
>> + * s390x_cpu_properties, however entitlement is forced to 0 'none'
>> when
>> + * the polarization is horizontale.
>> + */
>> +static void s390_topology_cpu_default(S390CPU *cpu, Error **errp)
>> +{
>> + CpuTopology *smp = s390_topology.smp;
>> + CPUS390XState *env = &cpu->env;
>> +
>> + /* All geometry topology attributes must be set or all unset */
>> + if ((env->socket_id < 0 || env->book_id < 0 || env->drawer_id <
>> 0) &&
>> + (env->socket_id >= 0 || env->book_id >= 0 || env->drawer_id
>> >= 0)) {
>> + error_setg(errp,
>> + "Please define all or none of the topology
>> geometry attributes");
>> + return;
>> + }
>> +
>> + /* Check if one of the geometry topology is unset */
>> + if (env->socket_id < 0) {
>> + /* Calculate default geometry topology attributes */
>> + env->socket_id = s390_std_socket(env->core_id, smp);
>> + env->book_id = s390_std_book(env->core_id, smp);
>> + env->drawer_id = s390_std_drawer(env->core_id, smp);
>> + }
>> +
>> + if (s390_topology.polarization ==
>> S390_CPU_POLARIZATION_HORIZONTAL) {
>> + env->entitlement = 0;
>
> Should this be S390_CPU_ENTITLEMENT_HORIZONTAL instead of 0 ?
Yes it is better thanks.
Regards,
Pierre
next prev parent reply other threads:[~2023-02-23 14:55 UTC|newest]
Thread overview: 50+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-02-22 14:20 [PATCH v16 00/11] s390x: CPU Topology Pierre Morel
2023-02-22 14:20 ` [PATCH v16 01/11] s390x/cpu topology: add s390 specifics to CPU topology Pierre Morel
2023-02-22 14:20 ` [PATCH v16 02/11] s390x/cpu topology: add topology entries on CPU hotplug Pierre Morel
2023-02-23 12:53 ` Thomas Huth
2023-02-23 14:06 ` pierre [this message]
2023-02-23 14:13 ` Nina Schoetterl-Glausch
2023-02-23 14:35 ` pierre
2023-02-22 14:20 ` [PATCH v16 03/11] target/s390x/cpu topology: handle STSI(15) and build the SYSIB Pierre Morel
2023-02-23 13:30 ` Thomas Huth
2023-02-23 14:27 ` pierre
2023-02-27 13:21 ` Nina Schoetterl-Glausch
2023-03-08 15:24 ` Pierre Morel
2023-02-22 14:20 ` [PATCH v16 04/11] s390x/sclp: reporting the maximum nested topology entries Pierre Morel
2023-02-22 14:20 ` [PATCH v16 05/11] s390x/cpu topology: resetting the Topology-Change-Report Pierre Morel
2023-02-22 14:21 ` [PATCH v16 06/11] s390x/cpu topology: interception of PTF instruction Pierre Morel
2023-02-27 12:39 ` Thomas Huth
2023-02-27 14:12 ` Pierre Morel
2023-02-22 14:21 ` [PATCH v16 07/11] target/s390x/cpu topology: activating CPU topology Pierre Morel
2023-02-27 13:26 ` Thomas Huth
2023-02-27 14:13 ` Pierre Morel
2023-02-22 14:21 ` [PATCH v16 08/11] qapi/s390x/cpu topology: set-cpu-topology monitor command Pierre Morel
2023-02-24 17:15 ` Nina Schoetterl-Glausch
2023-02-27 7:59 ` Thomas Huth
2023-02-27 10:49 ` Nina Schoetterl-Glausch
2023-02-27 12:25 ` Markus Armbruster
2023-02-27 12:51 ` Nina Schoetterl-Glausch
2023-02-27 15:34 ` Markus Armbruster
2023-02-27 10:57 ` Pierre Morel
2023-02-27 11:26 ` Thomas Huth
2023-02-27 12:15 ` Nina Schoetterl-Glausch
2023-02-27 14:11 ` Pierre Morel
2023-03-02 15:00 ` Pierre Morel
2023-02-27 8:26 ` Pierre Morel
2023-02-27 8:52 ` [PATCH v17 08/12] " Pierre Morel
2023-02-27 8:52 ` [PATCH v17 12/12] machine: adding s390 topology to info hotpluggable-cpus Pierre Morel
2023-02-22 14:21 ` [PATCH v16 09/11] machine: adding s390 topology to query-cpu-fast Pierre Morel
2023-02-27 13:27 ` Thomas Huth
2023-02-27 14:13 ` Pierre Morel
2023-02-22 14:21 ` [PATCH v16 10/11] qapi/s390x/cpu topology: CPU_POLARIZATION_CHANGE qapi event Pierre Morel
2023-02-27 13:32 ` Thomas Huth
2023-02-27 14:14 ` Pierre Morel
2023-02-22 14:21 ` [PATCH v16 11/11] docs/s390x/cpu topology: document s390x cpu topology Pierre Morel
2023-02-27 13:58 ` Thomas Huth
2023-02-27 14:17 ` Pierre Morel
2023-02-27 14:27 ` Thomas Huth
2023-02-27 17:34 ` Pierre Morel
2023-03-01 15:52 ` Nina Schoetterl-Glausch
2023-03-02 8:58 ` Pierre Morel
2023-02-27 14:00 ` [PATCH v16 00/11] s390x: CPU Topology Thomas Huth
2023-02-27 14:20 ` Pierre Morel
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=a19eb89ab4841e389e72b50ec017ae01@imap.linux.ibm.com \
--to=pierre@imap.linux.ibm.com \
--cc=armbru@redhat.com \
--cc=berrange@redhat.com \
--cc=borntraeger@de.ibm.com \
--cc=clg@kaod.org \
--cc=cohuck@redhat.com \
--cc=david@redhat.com \
--cc=eblake@redhat.com \
--cc=ehabkost@redhat.com \
--cc=frankja@linux.ibm.com \
--cc=kvm@vger.kernel.org \
--cc=marcel.apfelbaum@gmail.com \
--cc=mst@redhat.com \
--cc=nrb@linux.ibm.com \
--cc=nsg@linux.ibm.com \
--cc=pasic@linux.ibm.com \
--cc=pbonzini@redhat.com \
--cc=pmorel@linux.ibm.com \
--cc=qemu-devel@nongnu.org \
--cc=qemu-s390x@nongnu.org \
--cc=richard.henderson@linaro.org \
--cc=seiden@linux.ibm.com \
--cc=thuth@redhat.com \
/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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.