From: David Hildenbrand <david@redhat.com>
To: qemu-devel@nongnu.org
Cc: Richard Henderson <richard.henderson@linaro.org>,
thuth@redhat.com, cohuck@redhat.com, david@redhat.com,
borntraeger@de.ibm.com, Alexander Graf <agraf@suse.de>,
Eduardo Habkost <ehabkost@redhat.com>,
Matthew Rosato <mjrosato@linux.vnet.ibm.com>,
Paolo Bonzini <pbonzini@redhat.com>,
Markus Armbruster <armbru@redhat.com>
Subject: [Qemu-devel] [PATCH v4 20/21] s390x: generate sclp cpu information from possible_cpus
Date: Mon, 11 Sep 2017 17:21:49 +0200 [thread overview]
Message-ID: <20170911152150.12535-21-david@redhat.com> (raw)
In-Reply-To: <20170911152150.12535-1-david@redhat.com>
This is the first step to allow hot plugging of CPUs in a non-sequential
order. If a cpu is available ("plugged") can directly be decided by
looking at the cpu state pointer.
This makes sure, that really only cpus attached to the machine are
reported.
Signed-off-by: David Hildenbrand <david@redhat.com>
---
hw/s390x/sclp.c | 34 ++++++++++++++--------------------
1 file changed, 14 insertions(+), 20 deletions(-)
diff --git a/hw/s390x/sclp.c b/hw/s390x/sclp.c
index fd097262c7..30aefbfd15 100644
--- a/hw/s390x/sclp.c
+++ b/hw/s390x/sclp.c
@@ -34,16 +34,21 @@ static inline SCLPDevice *get_sclp_device(void)
return sclp;
}
-static void prepare_cpu_entries(SCLPDevice *sclp, CPUEntry *entry, int count)
+static void prepare_cpu_entries(SCLPDevice *sclp, CPUEntry *entry, int *count)
{
+ MachineState *ms = MACHINE(qdev_get_machine());
uint8_t features[SCCB_CPU_FEATURE_LEN] = { 0 };
int i;
s390_get_feat_block(S390_FEAT_TYPE_SCLP_CPU, features);
- for (i = 0; i < count; i++) {
- entry[i].address = i;
- entry[i].type = 0;
- memcpy(entry[i].features, features, sizeof(entry[i].features));
+ for (i = 0, *count = 0; i < ms->possible_cpus->len; i++) {
+ if (!ms->possible_cpus->cpus[i].cpu) {
+ continue;
+ }
+ entry[*count].address = ms->possible_cpus->cpus[i].arch_id;
+ entry[*count].type = 0;
+ memcpy(entry[*count].features, features, sizeof(features));
+ (*count)++;
}
}
@@ -53,17 +58,13 @@ static void read_SCP_info(SCLPDevice *sclp, SCCB *sccb)
ReadInfo *read_info = (ReadInfo *) sccb;
MachineState *machine = MACHINE(qdev_get_machine());
sclpMemoryHotplugDev *mhd = get_sclp_memory_hotplug_dev();
- CPUState *cpu;
- int cpu_count = 0;
+ int cpu_count;
int rnsize, rnmax;
int slots = MIN(machine->ram_slots, s390_get_memslot_count());
IplParameterBlock *ipib = s390_ipl_get_iplb();
- CPU_FOREACH(cpu) {
- cpu_count++;
- }
-
/* CPU information */
+ prepare_cpu_entries(sclp, read_info->entries, &cpu_count);
read_info->entries_cpu = cpu_to_be16(cpu_count);
read_info->offset_cpu = cpu_to_be16(offsetof(ReadInfo, entries));
read_info->highest_cpu = cpu_to_be16(max_cpus);
@@ -76,8 +77,6 @@ static void read_SCP_info(SCLPDevice *sclp, SCCB *sccb)
s390_get_feat_block(S390_FEAT_TYPE_SCLP_CONF_CHAR_EXT,
read_info->conf_char_ext);
- prepare_cpu_entries(sclp, read_info->entries, cpu_count);
-
read_info->facilities = cpu_to_be64(SCLP_HAS_CPU_INFO |
SCLP_HAS_IOA_RECONFIG);
@@ -333,13 +332,9 @@ static void unassign_storage(SCLPDevice *sclp, SCCB *sccb)
static void sclp_read_cpu_info(SCLPDevice *sclp, SCCB *sccb)
{
ReadCpuInfo *cpu_info = (ReadCpuInfo *) sccb;
- CPUState *cpu;
- int cpu_count = 0;
-
- CPU_FOREACH(cpu) {
- cpu_count++;
- }
+ int cpu_count;
+ prepare_cpu_entries(sclp, cpu_info->entries, &cpu_count);
cpu_info->nr_configured = cpu_to_be16(cpu_count);
cpu_info->offset_configured = cpu_to_be16(offsetof(ReadCpuInfo, entries));
cpu_info->nr_standby = cpu_to_be16(0);
@@ -348,7 +343,6 @@ static void sclp_read_cpu_info(SCLPDevice *sclp, SCCB *sccb)
cpu_info->offset_standby = cpu_to_be16(cpu_info->offset_configured
+ cpu_info->nr_configured*sizeof(CPUEntry));
- prepare_cpu_entries(sclp, cpu_info->entries, cpu_count);
sccb->h.response_code = cpu_to_be16(SCLP_RC_NORMAL_READ_COMPLETION);
}
--
2.13.5
next prev parent reply other threads:[~2017-09-11 15:23 UTC|newest]
Thread overview: 39+ messages / expand[flat|nested] mbox.gz Atom feed top
2017-09-11 15:21 [Qemu-devel] [PATCH v4 00/21] s390x cleanups and CPU hotplug via device_add David Hildenbrand
2017-09-11 15:21 ` [Qemu-devel] [PATCH v4 01/21] exec, dump, i386, ppc, s390x: don't include exec/cpu-all.h explicitly David Hildenbrand
2017-09-11 15:21 ` [Qemu-devel] [PATCH v4 02/21] cpu: drop old comments describing members David Hildenbrand
2017-09-11 15:21 ` [Qemu-devel] [PATCH v4 03/21] s390x: get rid of s390-virtio.c David Hildenbrand
2017-09-11 15:21 ` [Qemu-devel] [PATCH v4 04/21] s390x: rename s390-virtio.h to s390-virtio-hcall.h David Hildenbrand
2017-09-11 15:21 ` [Qemu-devel] [PATCH v4 05/21] s390x: move s390_virtio_hypercall() " David Hildenbrand
2017-09-11 15:21 ` [Qemu-devel] [PATCH v4 06/21] s390x: move subsystem_reset() to s390-virtio-ccw.h David Hildenbrand
2017-09-11 15:21 ` [Qemu-devel] [PATCH v4 07/21] target/s390x: move some s390x typedefs to cpu-qom.h David Hildenbrand
2017-09-11 15:21 ` [Qemu-devel] [PATCH v4 08/21] s390x: move sclp_service_call() to sclp.h David Hildenbrand
2017-09-11 15:21 ` [Qemu-devel] [PATCH v4 09/21] target/s390x: use trigger_pgm_exception() in s390_cpu_handle_mmu_fault() David Hildenbrand
2017-09-11 15:21 ` [Qemu-devel] [PATCH v4 10/21] target/s390x: use program_interrupt() in per_check_exception() David Hildenbrand
2017-09-11 15:21 ` [Qemu-devel] [PATCH v4 11/21] s390x: allow only 1 CPU with TCG David Hildenbrand
2017-09-12 12:43 ` Igor Mammedov
2017-09-12 15:42 ` David Hildenbrand
2017-09-13 7:19 ` Igor Mammedov
2017-09-13 12:10 ` David Hildenbrand
2017-09-13 12:35 ` Cornelia Huck
2017-09-11 15:21 ` [Qemu-devel] [PATCH v4 12/21] target/s390x: set cpu->id for linux user when realizing David Hildenbrand
2017-09-12 12:46 ` Igor Mammedov
2017-09-11 15:21 ` [Qemu-devel] [PATCH v4 13/21] target/s390x: use "core-id" for cpu number/address/id handling David Hildenbrand
2017-09-12 13:07 ` Igor Mammedov
2017-09-12 13:15 ` David Hildenbrand
2017-09-11 15:21 ` [Qemu-devel] [PATCH v4 14/21] target/s390x: rename next_cpu_id to next_core_id David Hildenbrand
2017-09-12 13:09 ` Igor Mammedov
2017-09-12 13:16 ` David Hildenbrand
2017-09-11 15:21 ` [Qemu-devel] [PATCH v4 15/21] s390x: print CPU definitions in sorted order David Hildenbrand
2017-09-12 10:51 ` Christian Borntraeger
2017-09-11 15:21 ` [Qemu-devel] [PATCH v4 16/21] s390x: allow cpu hotplug via device_add David Hildenbrand
2017-09-11 15:21 ` [Qemu-devel] [PATCH v4 17/21] s390x: CPU hot unplug via device_del cannot work for now David Hildenbrand
2017-09-11 15:21 ` [Qemu-devel] [PATCH v4 18/21] s390x: implement query-hotpluggable-cpus David Hildenbrand
2017-09-12 13:43 ` Igor Mammedov
2017-09-12 14:03 ` David Hildenbrand
2017-09-12 14:24 ` Thomas Huth
2017-09-11 15:21 ` [Qemu-devel] [PATCH v4 19/21] s390x: get rid of cpu_s390x_create() David Hildenbrand
2017-09-12 13:50 ` Igor Mammedov
2017-09-11 15:21 ` David Hildenbrand [this message]
2017-09-11 15:21 ` [Qemu-devel] [PATCH v4 21/21] s390x: allow CPU hotplug in random core-id order David Hildenbrand
2017-09-12 13:55 ` [Qemu-devel] [PATCH v4 00/21] s390x cleanups and CPU hotplug via device_add Igor Mammedov
2017-09-12 13:56 ` David Hildenbrand
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=20170911152150.12535-21-david@redhat.com \
--to=david@redhat.com \
--cc=agraf@suse.de \
--cc=armbru@redhat.com \
--cc=borntraeger@de.ibm.com \
--cc=cohuck@redhat.com \
--cc=ehabkost@redhat.com \
--cc=mjrosato@linux.vnet.ibm.com \
--cc=pbonzini@redhat.com \
--cc=qemu-devel@nongnu.org \
--cc=richard.henderson@linaro.org \
--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 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).