From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:44537) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1aXtx3-0007EG-5H for qemu-devel@nongnu.org; Mon, 22 Feb 2016 12:07:17 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1aXtwz-0006sT-51 for qemu-devel@nongnu.org; Mon, 22 Feb 2016 12:07:13 -0500 Received: from e35.co.us.ibm.com ([32.97.110.153]:37822) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1aXtwy-0006sM-Nu for qemu-devel@nongnu.org; Mon, 22 Feb 2016 12:07:09 -0500 Received: from localhost by e35.co.us.ibm.com with IBM ESMTP SMTP Gateway: Authorized Use Only! Violators will be prosecuted for from ; Mon, 22 Feb 2016 10:07:08 -0700 Received: from b01cxnp22035.gho.pok.ibm.com (b01cxnp22035.gho.pok.ibm.com [9.57.198.25]) by d03dlp01.boulder.ibm.com (Postfix) with ESMTP id 4510B1FF0027 for ; Mon, 22 Feb 2016 09:55:14 -0700 (MST) Received: from d01av03.pok.ibm.com (d01av03.pok.ibm.com [9.56.224.217]) by b01cxnp22035.gho.pok.ibm.com (8.14.9/8.14.9/NCO v10.0) with ESMTP id u1MH74QP28770322 for ; Mon, 22 Feb 2016 17:07:04 GMT Received: from d01av03.pok.ibm.com (localhost [127.0.0.1]) by d01av03.pok.ibm.com (8.14.4/8.14.4/NCO v10.0 AVout) with ESMTP id u1MH721Q009002 for ; Mon, 22 Feb 2016 12:07:03 -0500 From: Matthew Rosato Date: Mon, 22 Feb 2016 12:06:34 -0500 Message-Id: <1456160797-832-5-git-send-email-mjrosato@linux.vnet.ibm.com> In-Reply-To: <1456160797-832-1-git-send-email-mjrosato@linux.vnet.ibm.com> References: <1456160797-832-1-git-send-email-mjrosato@linux.vnet.ibm.com> Subject: [Qemu-devel] [PATCH v6 4/7] s390x/cpu: Add CPU property links List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: qemu-devel@nongnu.org Cc: dahi@linux.vnet.ibm.com, agraf@suse.de, borntraeger@de.ibm.com, imammedo@redhat.com, bharata@linux.vnet.ibm.com, cornelia.huck@de.ibm.com, pbonzini@redhat.com, afaerber@suse.de, rth@twiddle.net Link each CPUState as property machine/cpu[n] during initialization. Additionally, maintain an array of state pointers indexed by CPU id for fast lookup during interrupt handling. Signed-off-by: Matthew Rosato --- hw/s390x/s390-virtio.c | 26 +++++++++++++++++--------- 1 file changed, 17 insertions(+), 9 deletions(-) diff --git a/hw/s390x/s390-virtio.c b/hw/s390x/s390-virtio.c index b3707f4..6bd9803 100644 --- a/hw/s390x/s390-virtio.c +++ b/hw/s390x/s390-virtio.c @@ -60,15 +60,16 @@ #define S390_TOD_CLOCK_VALUE_MISSING 0x00 #define S390_TOD_CLOCK_VALUE_PRESENT 0x01 -static S390CPU **ipi_states; +static S390CPU **cpu_states; S390CPU *s390_cpu_addr2state(uint16_t cpu_addr) { - if (cpu_addr >= smp_cpus) { + if (cpu_addr >= max_cpus) { return NULL; } - return ipi_states[cpu_addr]; + /* Fast lookup via CPU ID */ + return cpu_states[cpu_addr]; } void s390_init_ipl_dev(const char *kernel_filename, @@ -98,19 +99,26 @@ void s390_init_ipl_dev(const char *kernel_filename, void s390_init_cpus(MachineState *machine) { int i; + gchar *name; if (machine->cpu_model == NULL) { machine->cpu_model = "host"; } - ipi_states = g_malloc(sizeof(S390CPU *) * smp_cpus); + cpu_states = g_malloc0(sizeof(S390CPU *) * max_cpus); - for (i = 0; i < smp_cpus; i++) { - S390CPU *cpu; - - cpu = cpu_s390x_init(machine->cpu_model); + for (i = 0; i < max_cpus; i++) { + name = g_strdup_printf("cpu[%i]", i); + object_property_add_link(OBJECT(machine), name, TYPE_S390_CPU, + (Object **) &cpu_states[i], + object_property_allow_set_link, + OBJ_PROP_LINK_UNREF_ON_RELEASE, + &error_abort); + g_free(name); + } - ipi_states[i] = cpu; + for (i = 0; i < smp_cpus; i++) { + cpu_s390x_init(machine->cpu_model); } } -- 1.9.1