From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:39734) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1YpXXR-0001cc-Er for qemu-devel@nongnu.org; Tue, 05 May 2015 03:45:11 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1YpXXO-0002yu-JI for qemu-devel@nongnu.org; Tue, 05 May 2015 03:45:09 -0400 Date: Tue, 5 May 2015 16:46:46 +1000 From: David Gibson Message-ID: <20150505064646.GG14090@voom.redhat.com> References: <1429858066-12088-1-git-send-email-bharata@linux.vnet.ibm.com> <1429858066-12088-9-git-send-email-bharata@linux.vnet.ibm.com> MIME-Version: 1.0 Content-Type: multipart/signed; micalg=pgp-sha1; protocol="application/pgp-signature"; boundary="AGZzQgpsuUlWC1xT" Content-Disposition: inline In-Reply-To: <1429858066-12088-9-git-send-email-bharata@linux.vnet.ibm.com> Subject: Re: [Qemu-devel] [RFC PATCH v3 08/24] ppc: Prepare CPU socket/core abstraction List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Bharata B Rao Cc: mdroth@linux.vnet.ibm.com, aik@ozlabs.ru, agraf@suse.de, qemu-devel@nongnu.org, qemu-ppc@nongnu.org, tyreld@linux.vnet.ibm.com, nfont@linux.vnet.ibm.com, imammedo@redhat.com, afaerber@suse.de --AGZzQgpsuUlWC1xT Content-Type: text/plain; charset=iso-8859-1 Content-Disposition: inline Content-Transfer-Encoding: quoted-printable On Fri, Apr 24, 2015 at 12:17:30PM +0530, Bharata B Rao wrote: As Thomas says, this really needs a commit message. I also think building this infrastructure is a bit premature when the discussion is ongoing about how to do this geerically. What I'd suggest is just have the minimal set you need, which can be reworked into the new generic scheme once it solidifies. So, I'd suggest just implement a specific POWER8 core device, which instantiates up to 8 POWER8 vcpu threads. We know we'll need some kind of handle for that, regardless of where it fits in the eventual overall scheme of sockets and cores and whatever. > Signed-off-by: Bharata B Rao > Signed-off-by: Andreas F=E4rber > --- > hw/ppc/Makefile.objs | 1 + > hw/ppc/cpu-core.c | 46 +++++++++++++++++++++++++++++++++++++++= +++++ > hw/ppc/cpu-socket.c | 47 +++++++++++++++++++++++++++++++++++++++= ++++++ > include/hw/ppc/cpu-core.h | 32 ++++++++++++++++++++++++++++++ > include/hw/ppc/cpu-socket.h | 32 ++++++++++++++++++++++++++++++ > 5 files changed, 158 insertions(+) > create mode 100644 hw/ppc/cpu-core.c > create mode 100644 hw/ppc/cpu-socket.c > create mode 100644 include/hw/ppc/cpu-core.h > create mode 100644 include/hw/ppc/cpu-socket.h >=20 > diff --git a/hw/ppc/Makefile.objs b/hw/ppc/Makefile.objs > index c8ab06e..a35cac5 100644 > --- a/hw/ppc/Makefile.objs > +++ b/hw/ppc/Makefile.objs > @@ -1,5 +1,6 @@ > # shared objects > obj-y +=3D ppc.o ppc_booke.o > +obj-y +=3D cpu-socket.o cpu-core.o > # IBM pSeries (sPAPR) > obj-$(CONFIG_PSERIES) +=3D spapr.o spapr_vio.o spapr_events.o > obj-$(CONFIG_PSERIES) +=3D spapr_hcall.o spapr_iommu.o spapr_rtas.o > diff --git a/hw/ppc/cpu-core.c b/hw/ppc/cpu-core.c > new file mode 100644 > index 0000000..ed0481f > --- /dev/null > +++ b/hw/ppc/cpu-core.c > @@ -0,0 +1,46 @@ > +/* > + * ppc CPU core abstraction > + * > + * Copyright (c) 2015 SUSE Linux GmbH > + * Copyright (C) 2015 Bharata B Rao > + */ > + > +#include "hw/qdev.h" > +#include "hw/ppc/cpu-core.h" > + > +static int ppc_cpu_core_realize_child(Object *child, void *opaque) > +{ > + Error **errp =3D opaque; > + > + object_property_set_bool(child, true, "realized", errp); > + if (*errp) { > + return 1; > + } > + > + return 0; > +} > + > +static void ppc_cpu_core_realize(DeviceState *dev, Error **errp) > +{ > + object_child_foreach(OBJECT(dev), ppc_cpu_core_realize_child, errp); > +} > + > +static void ppc_cpu_core_class_init(ObjectClass *oc, void *data) > +{ > + DeviceClass *dc =3D DEVICE_CLASS(oc); > + > + dc->realize =3D ppc_cpu_core_realize; > +} > + > +static const TypeInfo ppc_cpu_core_type_info =3D { > + .name =3D TYPE_POWERPC_CPU_CORE, > + .parent =3D TYPE_DEVICE, > + .class_init =3D ppc_cpu_core_class_init, > +}; > + > +static void ppc_cpu_core_register_types(void) > +{ > + type_register_static(&ppc_cpu_core_type_info); > +} > + > +type_init(ppc_cpu_core_register_types) > diff --git a/hw/ppc/cpu-socket.c b/hw/ppc/cpu-socket.c > new file mode 100644 > index 0000000..602a060 > --- /dev/null > +++ b/hw/ppc/cpu-socket.c > @@ -0,0 +1,47 @@ > +/* > + * PPC CPU socket abstraction > + * > + * Copyright (c) 2015 SUSE Linux GmbH > + * Copyright (C) 2015 Bharata B Rao > + */ > + > +#include "hw/qdev.h" > +#include "hw/ppc/cpu-socket.h" > +#include "sysemu/cpus.h" > + > +static int ppc_cpu_socket_realize_child(Object *child, void *opaque) > +{ > + Error **errp =3D opaque; > + > + object_property_set_bool(child, true, "realized", errp); > + if (*errp) { > + return 1; > + } else { > + return 0; > + } > +} > + > +static void ppc_cpu_socket_realize(DeviceState *dev, Error **errp) > +{ > + object_child_foreach(OBJECT(dev), ppc_cpu_socket_realize_child, errp= ); > +} > + > +static void ppc_cpu_socket_class_init(ObjectClass *oc, void *data) > +{ > + DeviceClass *dc =3D DEVICE_CLASS(oc); > + > + dc->realize =3D ppc_cpu_socket_realize; > +} > + > +static const TypeInfo ppc_cpu_socket_type_info =3D { > + .name =3D TYPE_POWERPC_CPU_SOCKET, > + .parent =3D TYPE_CPU_SOCKET, > + .class_init =3D ppc_cpu_socket_class_init, > +}; > + > +static void ppc_cpu_socket_register_types(void) > +{ > + type_register_static(&ppc_cpu_socket_type_info); > +} > + > +type_init(ppc_cpu_socket_register_types) > diff --git a/include/hw/ppc/cpu-core.h b/include/hw/ppc/cpu-core.h > new file mode 100644 > index 0000000..95f1c28 > --- /dev/null > +++ b/include/hw/ppc/cpu-core.h > @@ -0,0 +1,32 @@ > +/* > + * PowerPC CPU core abstraction > + * > + * Copyright (c) 2015 SUSE Linux GmbH > + * Copyright (C) 2015 Bharata B Rao > + */ > +#ifndef HW_PPC_CPU_CORE_H > +#define HW_PPC_CPU_CORE_H > + > +#include "hw/qdev.h" > +#include "cpu.h" > + > +#ifdef TARGET_PPC64 > +#define TYPE_POWERPC_CPU_CORE "powerpc64-cpu-core" > +#elif defined(TARGET_PPCEMB) > +#define TYPE_POWERPC_CPU_CORE "embedded-powerpc-cpu-core" > +#else > +#define TYPE_POWERPC_CPU_CORE "powerpc-cpu-core" > +#endif > + > +#define POWERPC_CPU_CORE(obj) \ > + OBJECT_CHECK(PowerPCCPUCore, (obj), TYPE_POWERPC_CPU_CORE) > + > +typedef struct PowerPCCPUCore { > + /*< private >*/ > + DeviceState parent_obj; > + /*< public >*/ > + > + PowerPCCPU thread[0]; > +} PowerPCCPUCore; > + > +#endif > diff --git a/include/hw/ppc/cpu-socket.h b/include/hw/ppc/cpu-socket.h > new file mode 100644 > index 0000000..5ae19d0 > --- /dev/null > +++ b/include/hw/ppc/cpu-socket.h > @@ -0,0 +1,32 @@ > +/* > + * PowerPC CPU socket abstraction > + * > + * Copyright (c) 2015 SUSE Linux GmbH > + * Copyright (C) 2015 Bharata B Rao > + */ > +#ifndef HW_PPC_CPU_SOCKET_H > +#define HW_PPC_CPU_SOCKET_H > + > +#include "hw/cpu/socket.h" > +#include "cpu-core.h" > + > +#ifdef TARGET_PPC64 > +#define TYPE_POWERPC_CPU_SOCKET "powerpc64-cpu-socket" > +#elif defined(TARGET_PPCEMB) > +#define TYPE_POWERPC_CPU_SOCKET "embedded-powerpc-cpu-socket" > +#else > +#define TYPE_POWERPC_CPU_SOCKET "powerpc-cpu-socket" > +#endif > + > +#define POWERPC_CPU_SOCKET(obj) \ > + OBJECT_CHECK(PowerPCCPUSocket, (obj), TYPE_POWERPC_CPU_SOCKET) > + > +typedef struct PowerPCCPUSocket { > + /*< private >*/ > + DeviceState parent_obj; > + /*< public >*/ > + > + PowerPCCPUCore core[0]; > +} PowerPCCPUSocket; > + > +#endif --=20 David Gibson | I'll have my music baroque, and my code david AT gibson.dropbear.id.au | minimalist, thank you. NOT _the_ _other_ | _way_ _around_! http://www.ozlabs.org/~dgibson --AGZzQgpsuUlWC1xT Content-Type: application/pgp-signature -----BEGIN PGP SIGNATURE----- Version: GnuPG v1 iQIcBAEBAgAGBQJVSGdWAAoJEGw4ysog2bOS9VQP/0jvXy9CeecuXWyL8L10GuvD JTLDlfKET5zh7FYFpVp6bu54m34JxHZ0f1P+JD15wyX/u8vt/sstQpHyfoeIgesA 9uHBWdS/AK6GwHx9V+kyZWP+ocHepRxkPtnOclqYUEiRqYFxF71wxOl5FyRPotrE 1q498vE3G/KskqDVuye2TyrvKKSH8eQfGR0gjmoSkPgvBehTB+uhzcAU1Fv+975w EPo7dmnBWg03kkuBE/dDgt08GYmWYJZHfQacNHHiYCbjtzpSTiYntQtiA8TFsnH9 q3MJJKQAF1RE8OR8/ouyV3txribH3DKZl0vTmmLIAbpac1H44Aey6OTQ0MbWe7fO agACQb+vbtSMsptixnViZcJRNB94tLTbPB2CfTYzAIyn7qa8sGohJdWti3jdE590 QiGEEKksElazkaC+kDD5TCw+eXE3TcPqIxVWswXjJqtaaq1fEe7dS+0Wm1o1QMjL seFgFHZ95lOm2VMxY73KWoZh5bbcDlom4loJd6gnddFU2hA9yJxD9IyYZ3WyNuYI qRZvBbApbh7JG+UILVgLmIbd1mgnDLKCPU9LzGIewVuwix/M6nc06Iq2kEAFM3YL 01DQGuugIGih4J8hCqDcDppqZs2lkBjSLWNN3Vxk8CFUN5+Hg5S9htKaLubDd+XP q7M9QSQOKlE+/QKUnqCQ =gFYV -----END PGP SIGNATURE----- --AGZzQgpsuUlWC1xT--