Message ID | 20191022072246.9200-2-clg@kaod.org |
---|---|
State | New |
Headers | show |
Series | ppc: reset the interrupt presenter from the CPU reset handler | expand |
On 10/22/19 9:22 AM, Cédric Le Goater wrote: > spapr_realize_vcpu() is modified to call the CPU reset only after the > the intc presenter has been created. > > Signed-off-by: Cédric Le Goater <clg@kaod.org> > --- > hw/ppc/spapr_cpu_core.c | 14 ++++++++------ > 1 file changed, 8 insertions(+), 6 deletions(-) > > diff --git a/hw/ppc/spapr_cpu_core.c b/hw/ppc/spapr_cpu_core.c > index 3e4302c7d596..992f00da6540 100644 > --- a/hw/ppc/spapr_cpu_core.c > +++ b/hw/ppc/spapr_cpu_core.c > @@ -234,13 +234,16 @@ static void spapr_realize_vcpu(PowerPCCPU *cpu, SpaprMachineState *spapr, > cpu_ppc_set_vhyp(cpu, PPC_VIRTUAL_HYPERVISOR(spapr)); > kvmppc_set_papr(cpu); > > - qemu_register_reset(spapr_cpu_reset, cpu); > - spapr_cpu_reset(cpu); > - > if (spapr_irq_cpu_intc_create(spapr, cpu, &local_err) < 0) { > - goto error_unregister; > + goto error_intc_create; > } > > + /* > + * FIXME: Hot-plugged CPUs are not reseted. Do it at realize. Typo: "reset" (past tense of reset is also reset). > + */ > + qemu_register_reset(spapr_cpu_reset, cpu); > + spapr_cpu_reset(cpu); > + > if (!sc->pre_3_0_migration) { > vmstate_register(NULL, cs->cpu_index, &vmstate_spapr_cpu_state, > cpu->machine_data); > @@ -248,8 +251,7 @@ static void spapr_realize_vcpu(PowerPCCPU *cpu, SpaprMachineState *spapr, > > return; > > -error_unregister: > - qemu_unregister_reset(spapr_cpu_reset, cpu); > +error_intc_create: > cpu_remove_sync(CPU(cpu)); > error: > error_propagate(errp, local_err); > Reviewed-by: Philippe Mathieu-Daudé <philmd@redhat.com>
On Tue, 22 Oct 2019 09:22:43 +0200 Cédric Le Goater <clg@kaod.org> wrote: > spapr_realize_vcpu() is modified to call the CPU reset only after the > the intc presenter has been created. > Maybe indicate why this change is needed ? Anyway, Reviewed-by: Greg Kurz <groug@kaod.org> > Signed-off-by: Cédric Le Goater <clg@kaod.org> > --- > hw/ppc/spapr_cpu_core.c | 14 ++++++++------ > 1 file changed, 8 insertions(+), 6 deletions(-) > > diff --git a/hw/ppc/spapr_cpu_core.c b/hw/ppc/spapr_cpu_core.c > index 3e4302c7d596..992f00da6540 100644 > --- a/hw/ppc/spapr_cpu_core.c > +++ b/hw/ppc/spapr_cpu_core.c > @@ -234,13 +234,16 @@ static void spapr_realize_vcpu(PowerPCCPU *cpu, SpaprMachineState *spapr, > cpu_ppc_set_vhyp(cpu, PPC_VIRTUAL_HYPERVISOR(spapr)); > kvmppc_set_papr(cpu); > > - qemu_register_reset(spapr_cpu_reset, cpu); > - spapr_cpu_reset(cpu); > - > if (spapr_irq_cpu_intc_create(spapr, cpu, &local_err) < 0) { > - goto error_unregister; > + goto error_intc_create; > } > > + /* > + * FIXME: Hot-plugged CPUs are not reseted. Do it at realize. > + */ > + qemu_register_reset(spapr_cpu_reset, cpu); > + spapr_cpu_reset(cpu); > + > if (!sc->pre_3_0_migration) { > vmstate_register(NULL, cs->cpu_index, &vmstate_spapr_cpu_state, > cpu->machine_data); > @@ -248,8 +251,7 @@ static void spapr_realize_vcpu(PowerPCCPU *cpu, SpaprMachineState *spapr, > > return; > > -error_unregister: > - qemu_unregister_reset(spapr_cpu_reset, cpu); > +error_intc_create: > cpu_remove_sync(CPU(cpu)); > error: > error_propagate(errp, local_err);
diff --git a/hw/ppc/spapr_cpu_core.c b/hw/ppc/spapr_cpu_core.c index 3e4302c7d596..992f00da6540 100644 --- a/hw/ppc/spapr_cpu_core.c +++ b/hw/ppc/spapr_cpu_core.c @@ -234,13 +234,16 @@ static void spapr_realize_vcpu(PowerPCCPU *cpu, SpaprMachineState *spapr, cpu_ppc_set_vhyp(cpu, PPC_VIRTUAL_HYPERVISOR(spapr)); kvmppc_set_papr(cpu); - qemu_register_reset(spapr_cpu_reset, cpu); - spapr_cpu_reset(cpu); - if (spapr_irq_cpu_intc_create(spapr, cpu, &local_err) < 0) { - goto error_unregister; + goto error_intc_create; } + /* + * FIXME: Hot-plugged CPUs are not reseted. Do it at realize. + */ + qemu_register_reset(spapr_cpu_reset, cpu); + spapr_cpu_reset(cpu); + if (!sc->pre_3_0_migration) { vmstate_register(NULL, cs->cpu_index, &vmstate_spapr_cpu_state, cpu->machine_data); @@ -248,8 +251,7 @@ static void spapr_realize_vcpu(PowerPCCPU *cpu, SpaprMachineState *spapr, return; -error_unregister: - qemu_unregister_reset(spapr_cpu_reset, cpu); +error_intc_create: cpu_remove_sync(CPU(cpu)); error: error_propagate(errp, local_err);
spapr_realize_vcpu() is modified to call the CPU reset only after the the intc presenter has been created. Signed-off-by: Cédric Le Goater <clg@kaod.org> --- hw/ppc/spapr_cpu_core.c | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-)