From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:36327) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1VHYpy-0001zb-8B for qemu-devel@nongnu.org; Thu, 05 Sep 2013 08:39:03 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1VHYpq-0004Dg-Uh for qemu-devel@nongnu.org; Thu, 05 Sep 2013 08:39:02 -0400 Received: from cantor2.suse.de ([195.135.220.15]:41110 helo=mx2.suse.de) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1VHYpq-0004DU-L2 for qemu-devel@nongnu.org; Thu, 05 Sep 2013 08:38:54 -0400 Message-ID: <52287B5B.7030003@suse.de> Date: Thu, 05 Sep 2013 14:38:51 +0200 From: =?ISO-8859-15?Q?Andreas_F=E4rber?= MIME-Version: 1.0 References: <1375366359-11553-1-git-send-email-jjherne@us.ibm.com> <1375366359-11553-8-git-send-email-jjherne@us.ibm.com> In-Reply-To: <1375366359-11553-8-git-send-email-jjherne@us.ibm.com> Content-Type: text/plain; charset=ISO-8859-15 Content-Transfer-Encoding: quoted-printable Subject: Re: [Qemu-devel] [PATCH 7/8] [PATCH RFC v3] s390-qemu: cpu hotplug - Implement hot_add_cpu hook List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: "Jason J. Herne" Cc: ehabkost@redhat.com, qemu-devel@nongnu.org, agraf@suse.de, borntraeger@de.ibm.com, jfrei@linux.vnet.ibm.com, imammedo@redhat.com Am 01.08.2013 16:12, schrieb Jason J. Herne: > From: "Jason J. Herne" >=20 > Implement hot_add_cpu for S390 to allow hot plugging of cpus. >=20 > Signed-off-by: Jason J. Herne > --- > hw/s390x/s390-virtio-ccw.c | 3 +++ > target-s390x/cpu.c | 32 ++++++++++++++++++++++++++++++++ > target-s390x/cpu.h | 2 ++ > 3 files changed, 37 insertions(+) >=20 > diff --git a/hw/s390x/s390-virtio-ccw.c b/hw/s390x/s390-virtio-ccw.c > index b469960..30b6a48 100644 > --- a/hw/s390x/s390-virtio-ccw.c > +++ b/hw/s390x/s390-virtio-ccw.c > @@ -117,6 +117,9 @@ static QEMUMachine ccw_machine =3D { > .alias =3D "s390-ccw", > .desc =3D "VirtIO-ccw based S390 machine", > .init =3D ccw_init, > +#if !defined(CONFIG_USER_ONLY) > + .hot_add_cpu =3D ccw_hot_add_cpu, > +#endif I doubt this #ifdeffery is necessary here? > .block_default_type =3D IF_VIRTIO, > .no_cdrom =3D 1, > .no_floppy =3D 1, > diff --git a/target-s390x/cpu.c b/target-s390x/cpu.c > index c90a91c..60029d9 100644 > --- a/target-s390x/cpu.c > +++ b/target-s390x/cpu.c > @@ -27,6 +27,8 @@ > #include "qemu-common.h" > #include "qemu/timer.h" > #include "hw/hw.h" > +#include "hw/s390x/sclp.h" > +#include "sysemu/sysemu.h" > #ifndef CONFIG_USER_ONLY > #include "sysemu/arch_init.h" > #endif > @@ -154,6 +156,36 @@ static void s390_cpu_finalize(Object *obj) > #endif > } > =20 > +#if !defined(CONFIG_USER_ONLY) > +void ccw_hot_add_cpu(const int64_t id, Error **errp) > +{ > + S390CPU *new_cpu; > + CPUState *cpu; > + const char *model_str; > + int cpu_count =3D 0; > + > + for (cpu =3D first_cpu; cpu !=3D NULL; cpu =3D cpu->next_cpu) { CPU_FOREACH(cpu) { > + cpu_count++; > + } > + > + if (cpu_count =3D=3D max_cpus) { > + error_setg(errp, "Maximum number of cpus already defined"); > + return; > + } > + > + if (id !=3D cpu_count) { > + error_setg(errp, "Unable to add CPU: %" PRIi64 > + ", The next available id is %d", id, cpu_count); > + return; > + } This logic seems wrong according to your colleagues. It should be checking against the static cpu_num counter or not checking at all if we want to allow explicit device_add s390-cpu,cpu-num=3D42. > + > + model_str =3D s390_cpu_addr2state(0)->env.cpu_model_str; > + new_cpu =3D s390_new_cpu(model_str, id); As announced, a patch in my large series finally sent out removes cpu_model_str field. Since we don't have any for s390x, I suggest that you use the QOM constructs so that device_add works as well, i.e. new_cpu =3D object_new(TYPE_S390_CPU). > + object_property_set_bool(OBJECT(new_cpu), true, "realized", NULL); > + raise_irq_cpu_hotplug(); This would mean moving this line into the realizefn, conditional on dev->hotplugged (and probably #ifndef CONFIG_USER_ONLY). Regards, Andreas > +} > +#endif > + > static const VMStateDescription vmstate_s390_cpu =3D { > .name =3D "cpu", > .unmigratable =3D 1, > diff --git a/target-s390x/cpu.h b/target-s390x/cpu.h > index 0f68dd0..711aad4 100644 > --- a/target-s390x/cpu.h > +++ b/target-s390x/cpu.h > @@ -383,6 +383,8 @@ S390CPU *s390_cpu_addr2state(uint16_t cpu_addr); > void s390_add_running_cpu(S390CPU *cpu); > unsigned s390_del_running_cpu(S390CPU *cpu); > =20 > +void ccw_hot_add_cpu(const int64_t id, Error **errp); > + > /* service interrupts are floating therefore we must not pass an cpust= ate */ > void s390_sclp_extint(uint32_t parm); > =20 >=20 --=20 SUSE LINUX Products GmbH, Maxfeldstr. 5, 90409 N=FCrnberg, Germany GF: Jeff Hawn, Jennifer Guild, Felix Imend=F6rffer; HRB 16746 AG N=FCrnbe= rg