From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:51291) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1abmxV-0003iQ-7y for qemu-devel@nongnu.org; Fri, 04 Mar 2016 05:27:46 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1abmxR-0008EN-3Z for qemu-devel@nongnu.org; Fri, 04 Mar 2016 05:27:45 -0500 Received: from e23smtp09.au.ibm.com ([202.81.31.142]:53810) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1abmxQ-00087n-HM for qemu-devel@nongnu.org; Fri, 04 Mar 2016 05:27:41 -0500 Received: from localhost by e23smtp09.au.ibm.com with IBM ESMTP SMTP Gateway: Authorized Use Only! Violators will be prosecuted for from ; Fri, 4 Mar 2016 20:17:20 +1000 Received: from d23relay09.au.ibm.com (d23relay09.au.ibm.com [9.185.63.181]) by d23dlp01.au.ibm.com (Postfix) with ESMTP id 6E4B02CE8054 for ; Fri, 4 Mar 2016 21:17:18 +1100 (EST) Received: from d23av01.au.ibm.com (d23av01.au.ibm.com [9.190.234.96]) by d23relay09.au.ibm.com (8.14.9/8.14.9/NCO v10.0) with ESMTP id u24AHALq43253988 for ; Fri, 4 Mar 2016 21:17:18 +1100 Received: from d23av01.au.ibm.com (localhost [127.0.0.1]) by d23av01.au.ibm.com (8.14.4/8.14.4/NCO v10.0 AVout) with ESMTP id u24AGj10008187 for ; Fri, 4 Mar 2016 21:16:46 +1100 Date: Fri, 4 Mar 2016 15:46:22 +0530 From: Bharata B Rao Message-ID: <20160304101622.GA5054@in.ibm.com> References: <1457040633-30951-1-git-send-email-mjrosato@linux.vnet.ibm.com> <1457040633-30951-7-git-send-email-mjrosato@linux.vnet.ibm.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <1457040633-30951-7-git-send-email-mjrosato@linux.vnet.ibm.com> Subject: Re: [Qemu-devel] [PATCH v8 6/7] s390x/cpu: Add error handling to cpu creation Reply-To: bharata@linux.vnet.ibm.com List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Matthew Rosato Cc: dahi@linux.vnet.ibm.com, qemu-devel@nongnu.org, agraf@suse.de, borntraeger@de.ibm.com, imammedo@redhat.com, cornelia.huck@de.ibm.com, pbonzini@redhat.com, afaerber@suse.de, rth@twiddle.net On Thu, Mar 03, 2016 at 04:30:32PM -0500, Matthew Rosato wrote: > Check for and propogate errors during s390 cpu creation. > > Signed-off-by: Matthew Rosato > --- > hw/s390x/s390-virtio.c | 2 +- > target-s390x/cpu-qom.h | 1 + > target-s390x/cpu.c | 56 +++++++++++++++++++++++++++++++++++++++++++++++++- > target-s390x/cpu.h | 2 ++ > target-s390x/helper.c | 42 +++++++++++++++++++++++++++++++++++-- > 5 files changed, 99 insertions(+), 4 deletions(-) > > diff --git a/hw/s390x/s390-virtio.c b/hw/s390x/s390-virtio.c > index f00d6b4..2ab7b94 100644 > --- a/hw/s390x/s390-virtio.c > +++ b/hw/s390x/s390-virtio.c > @@ -116,7 +116,7 @@ void s390_init_cpus(MachineState *machine) > } > > for (i = 0; i < smp_cpus; i++) { > - cpu_s390x_init(machine->cpu_model); > + s390_new_cpu(machine->cpu_model, i, &error_fatal); > } > } > > diff --git a/target-s390x/cpu-qom.h b/target-s390x/cpu-qom.h > index 56d82f2..1c90933 100644 > --- a/target-s390x/cpu-qom.h > +++ b/target-s390x/cpu-qom.h > @@ -68,6 +68,7 @@ typedef struct S390CPU { > /*< public >*/ > > CPUS390XState env; > + int64_t id; > /* needed for live migration */ > void *irqstate; > uint32_t irqstate_saved_size; > diff --git a/target-s390x/cpu.c b/target-s390x/cpu.c > index 76c8eaf..d1b7af9 100644 > --- a/target-s390x/cpu.c > +++ b/target-s390x/cpu.c > @@ -30,8 +30,10 @@ > #include "qemu/error-report.h" > #include "hw/hw.h" > #include "trace.h" > +#include "qapi/visitor.h" > #ifndef CONFIG_USER_ONLY > #include "sysemu/arch_init.h" > +#include "sysemu/sysemu.h" > #endif > > #define CR0_RESET 0xE0UL > @@ -199,16 +201,36 @@ static void s390_cpu_realizefn(DeviceState *dev, Error **errp) > CPUS390XState *env = &cpu->env; > Error *err = NULL; > > +#if !defined(CONFIG_USER_ONLY) > + if (cpu->id >= max_cpus) { > + error_setg(errp, "Unable to add CPU: %" PRIi64 > + ", max allowed: %d", cpu->id, max_cpus - 1); > + return; > + } > +#endif > + if (cpu_exists(cpu->id)) { > + error_setg(errp, "Unable to add CPU: %" PRIi64 > + ", it already exists", cpu->id); > + return; > + } > + if (cpu->id != scc->next_cpu_id) { > + error_setg(errp, "Unable to add CPU: %" PRIi64 > + ", The next available id is %" PRIi64, cpu->id, > + scc->next_cpu_id); > + return; > + } > + > cpu_exec_init(cs, &err); > if (err != NULL) { > error_propagate(errp, err); > return; > } > + scc->next_cpu_id = cs->cpu_index + 1; It appears that scc->next_cpu_id (and hence cpu->id) is some sort of arch_id for you. If it is just going to be monotonically increasing like cs->cpu_index, couldn't you just use cs->cpu_index instead of introducing additional IDs ? Note that cpu_exec_init(cs, &err) returns with the next available cpu_index which can be compared against max_cpus directly. Regards, Bharata.