On 01.08.2013, at 16:12, Jason J. Herne wrote: > From: "Jason J. Herne" <jjhe...@us.ibm.com> > > s390_new_cpu is created to encapsulate the creation of a new QOM S390CPU > object given a cpuid and a model string. > > All actual cpu initialization code is moved from boot time specific > functions to > s390_cpu_initfn (qom init routine) or to s390_new_cpu. This is done to > allow us > to use the same basic code path for a cpu created at boot time and one > created > during a hotplug operation. > > Signed-off-by: Jason J. Herne <jjhe...@us.ibm.com> > --- > hw/s390x/s390-virtio.c | 25 ++++++++++++------------- > target-s390x/cpu.c | 4 ++-- > target-s390x/cpu.h | 1 + > target-s390x/helper.c | 12 ++++++++++++ > 4 files changed, 27 insertions(+), 15 deletions(-) > > diff --git a/hw/s390x/s390-virtio.c b/hw/s390x/s390-virtio.c > index 5ad9cf3..103f32e 100644 > --- a/hw/s390x/s390-virtio.c > +++ b/hw/s390x/s390-virtio.c > @@ -56,11 +56,16 @@ static S390CPU **ipi_states; > > void s390_cpu_set_ipistate(uint16_t cpu_addr, S390CPU *state) > { > - ipi_states[cpu_addr] = state; > + if (cpu_addr < max_cpus) {
Ah, here you add the checks back in. Works for me. > + ipi_states[cpu_addr] = state; > + } > } > > S390CPU *s390_cpu_addr2state(uint16_t cpu_addr) > { > + if (cpu_addr >= max_cpus) { > + return NULL; > + } > return ipi_states[cpu_addr]; > } > > @@ -197,19 +202,13 @@ void s390_init_cpus(const char *cpu_model) > cpu_model = "host"; > } > > - ipi_states = g_malloc(sizeof(S390CPU *) * smp_cpus); > - > - for (i = 0; i < smp_cpus; i++) { > - S390CPU *cpu; > - CPUState *cs; > + ipi_states = g_malloc(sizeof(S390CPU *) * max_cpus); g_new is easier :). Alex