From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:38598) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1Ul0SZ-00071k-Q6 for qemu-devel@nongnu.org; Fri, 07 Jun 2013 13:28:26 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1Ul0SU-00083O-Kk for qemu-devel@nongnu.org; Fri, 07 Jun 2013 13:28:19 -0400 Received: from e9.ny.us.ibm.com ([32.97.182.139]:35590) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1Ul0SU-000834-Fv for qemu-devel@nongnu.org; Fri, 07 Jun 2013 13:28:14 -0400 Received: from /spool/local by e9.ny.us.ibm.com with IBM ESMTP SMTP Gateway: Authorized Use Only! Violators will be prosecuted for from ; Fri, 7 Jun 2013 13:28:13 -0400 Received: from d01relay02.pok.ibm.com (d01relay02.pok.ibm.com [9.56.227.234]) by d01dlp02.pok.ibm.com (Postfix) with ESMTP id 797AC6E804C for ; Fri, 7 Jun 2013 13:28:07 -0400 (EDT) Received: from d01av03.pok.ibm.com (d01av03.pok.ibm.com [9.56.224.217]) by d01relay02.pok.ibm.com (8.13.8/8.13.8/NCO v10.0) with ESMTP id r57HSBFY273152 for ; Fri, 7 Jun 2013 13:28:11 -0400 Received: from d01av03.pok.ibm.com (loopback [127.0.0.1]) by d01av03.pok.ibm.com (8.14.4/8.13.1/NCO v10.0 AVout) with ESMTP id r57HS8sn018396 for ; Fri, 7 Jun 2013 14:28:10 -0300 From: "Jason J. Herne" Date: Fri, 7 Jun 2013 13:28:03 -0400 Message-Id: <1370626087-840-5-git-send-email-jjherne@us.ibm.com> In-Reply-To: <1370626087-840-1-git-send-email-jjherne@us.ibm.com> References: <1370626087-840-1-git-send-email-jjherne@us.ibm.com> Subject: [Qemu-devel] [PATCH 4/8] [PATCH RFC v2] s390-qemu: cpu hotplug - ipi_states enhancements List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: agraf@suse.de, borntraeger@de.ibm.com, jfrei@linux.vnet.ibm.com, imammedo@redhat.com, qemu-devel@nongnu.org, ehabkost@redhat.com Cc: "Jason J. Herne" From: "Jason J. Herne" Modify s390_cpu_addr2state to allow fetching state information for cpu addresses above the number of online cpus. Hotplug requires this capability. Also add s390_cpu_set_state function to allow modification of ipi_state entries during hotplug. Finally, add function to find lowest unused ipi_state. Signed-off-by: Jason J. Herne --- hw/s390x/s390-virtio.c | 19 ++++++++++++++++--- target-s390x/cpu.h | 2 ++ 2 files changed, 18 insertions(+), 3 deletions(-) diff --git a/hw/s390x/s390-virtio.c b/hw/s390x/s390-virtio.c index 30d1118..ef4f1ae 100644 --- a/hw/s390x/s390-virtio.c +++ b/hw/s390x/s390-virtio.c @@ -54,13 +54,26 @@ static VirtIOS390Bus *s390_bus; static S390CPU **ipi_states; +void s390_cpu_set_state(uint16_t cpu_addr, S390CPU *state) +{ + ipi_states[cpu_addr] = state; +} + S390CPU *s390_cpu_addr2state(uint16_t cpu_addr) { - if (cpu_addr >= smp_cpus) { - return NULL; + return ipi_states[cpu_addr]; +} + +uint16_t s390_cpu_get_free_state_idx(void) +{ + int i; + for (i = 0; i < max_cpus; i++) + if (ipi_states[i] == NULL) { + return i; } - return ipi_states[cpu_addr]; + assert(0); /* BUG! */ + return -1; } static int s390_virtio_hcall_notify(const uint64_t *args) diff --git a/target-s390x/cpu.h b/target-s390x/cpu.h index 6304c4d..029d0c5 100644 --- a/target-s390x/cpu.h +++ b/target-s390x/cpu.h @@ -388,6 +388,8 @@ static inline void kvm_s390_interrupt_internal(S390CPU *cpu, int type, } #endif S390CPU *s390_cpu_addr2state(uint16_t cpu_addr); +void s390_cpu_set_state(uint16_t cpu_addr, S390CPU *state); +uint16_t s390_cpu_get_free_state_idx(void); void s390_add_running_cpu(S390CPU *cpu); unsigned s390_del_running_cpu(S390CPU *cpu); -- 1.7.10.4