From: "Jason J. Herne" <jjhe...@us.ibm.com> Rename the S390 ipi_states array to cpu_states to better reflect its contents.
Create machine/cpu[cpu_addr] links within the qom tree when creating a new cpu. Encapsulate the qom tree linking process and the management of the cpu_states array into helper functions. Signed-off-by: Jason J. Herne <jjhe...@us.ibm.com> --- hw/s390x/s390-virtio.c | 30 ++++++++++++++++++++++++------ target-s390x/cpu.h | 1 + 2 files changed, 25 insertions(+), 6 deletions(-) diff --git a/hw/s390x/s390-virtio.c b/hw/s390x/s390-virtio.c index 9eeda97..82411e7 100644 --- a/hw/s390x/s390-virtio.c +++ b/hw/s390x/s390-virtio.c @@ -52,15 +52,33 @@ #define ZIPL_FILENAME "s390-zipl.rom" static VirtIOS390Bus *s390_bus; -static S390CPU **ipi_states; +static S390CPU **cpu_states; S390CPU *s390_cpu_addr2state(uint16_t cpu_addr) { + gchar *name; + Object *cpu; + if (cpu_addr >= smp_cpus) { return NULL; } - return ipi_states[cpu_addr]; + name = g_strdup_printf("cpu[%i]", cpu_addr); + cpu = object_property_get_link(qdev_get_machine(), name, NULL); + + g_free(name); + return S390_CPU(cpu); +} + +void s390_cpu_set_cpustate(uint16_t cpu_addr, S390CPU *state) +{ + gchar *name; + + cpu_states[cpu_addr] = state; + name = g_strdup_printf("cpu[%i]", cpu_addr); + object_property_add_link(qdev_get_machine(), name, TYPE_S390_CPU, + (Object **) &cpu_states[cpu_addr], NULL); + g_free(name); } static int s390_virtio_hcall_notify(const uint64_t *args) @@ -184,16 +202,16 @@ void s390_init_cpus(const char *cpu_model, uint8_t *storage_keys) cpu_model = "host"; } - ipi_states = g_malloc(sizeof(S390CPU *) * smp_cpus); + cpu_states = g_malloc(sizeof(S390CPU *) * smp_cpus); for (i = 0; i < smp_cpus; i++) { - S390CPU *cpu; + S390CPU* cpu; CPUState *cs; cpu = cpu_s390x_init(cpu_model); - cs = CPU(cpu); + s390_cpu_set_cpustate(i, cpu); - ipi_states[i] = cpu; + cs = CPU(cpu_states[i]); cs->halted = 1; cpu->env.exception_index = EXCP_HLT; cpu->env.storage_keys = storage_keys; diff --git a/target-s390x/cpu.h b/target-s390x/cpu.h index 96c2b4a..6ce3b64 100644 --- a/target-s390x/cpu.h +++ b/target-s390x/cpu.h @@ -370,6 +370,7 @@ static inline void kvm_s390_interrupt_internal(S390CPU *cpu, int type, } #endif S390CPU *s390_cpu_addr2state(uint16_t cpu_addr); +void s390_cpu_set_cpustate(uint16_t cpu_addr, S390CPU *state); void s390_add_running_cpu(S390CPU *cpu); unsigned s390_del_running_cpu(S390CPU *cpu); -- 1.8.3.2