On 12/10/2015 05:11 PM, David Gibson wrote: > Currently spapr_cpu_init() is hardcoded to handle any errors as fatal. > That works for now, since it's only called from initial setup where an > error here means we really can't proceed. > > However, we'll want to handle this more flexibly for cpu hotplug in future > so generalize this using the error reporting infrastructure. While we're > at it make a small cleanup in a related part of ppc_spapr_init() to use > the error infrastructure instead of an old-style explicit fprintf / exit. > > Signed-off-by: David Gibson <[email protected]> > --- > hw/ppc/spapr.c | 10 +++++----- > 1 file changed, 5 insertions(+), 5 deletions(-)
> @@ -1633,7 +1634,7 @@ static void spapr_cpu_init(sPAPRMachineState *spapr,
> PowerPCCPU *cpu)
> }
>
> if (cpu->max_compat) {
> - ppc_set_compat(cpu, cpu->max_compat, &error_fatal);
> + ppc_set_compat(cpu, cpu->max_compat, errp);
> }
>
> xics_cpu_setup(spapr->icp, cpu);
Pre-patch: you can't reach the xics_cpu_setup() call on error.
Post-patch: depending on what the caller passed in, you can fall through
to xics_cpu_setup() with a potentially incomplete cpu.
I think a more robust solution is probably along the lines of:
Error *err = NULL;
if (cpu->max_compat) {
ppc_set_compat(cpu, cpu->max_compat, &err);
if (err) {
error_propagate(errp, err);
return;
}
}
xics_cpu_setup(spapr_icp, cpu);
> @@ -1802,10 +1803,9 @@ static void ppc_spapr_init(MachineState *machine)
> for (i = 0; i < smp_cpus; i++) {
> cpu = cpu_ppc_init(machine->cpu_model);
> if (cpu == NULL) {
> - fprintf(stderr, "Unable to find PowerPC CPU definition\n");
> - exit(1);
> + error_setg(&error_fatal, "Unable to find PowerPC CPU
> definition");
> }
> - spapr_cpu_init(spapr, cpu);
> + spapr_cpu_init(spapr, cpu, &error_fatal);
Of course, in _this_ patch, since the (only) caller is passing
&error_fatal, you don't hit the situation of fallthrough to
xics_cpu_setup().
--
Eric Blake eblake redhat com +1-919-301-3266
Libvirt virtualization library http://libvirt.org
signature.asc
Description: OpenPGP digital signature
