On Wed, Aug 28, 2013 at 07:32:51PM +1000, Alexey Kardashevskiy wrote: > PAPR+ requires two RTAS calls to be supported by the hypervisor in > order to allow hotplugging VCPUs from the guest. The "start-cpu" RTAS > call was already there but "stop-self" was not. > > This adds the "stop-self" RTAS call. > > Signed-off-by: Alexey Kardashevskiy <a...@ozlabs.ru> > --- > Changes: > v2: > * exit_request flag change replaced with more correct cpu_exit() call > * fixed commit message, "spapr: support CPU hotplug" > --- > hw/ppc/spapr_rtas.c | 12 ++++++++++++ > 1 file changed, 12 insertions(+) > > diff --git a/hw/ppc/spapr_rtas.c b/hw/ppc/spapr_rtas.c > index 394ce05..b906294 100644 > --- a/hw/ppc/spapr_rtas.c > +++ b/hw/ppc/spapr_rtas.c > @@ -202,6 +202,17 @@ static void rtas_start_cpu(PowerPCCPU *cpu_, > sPAPREnvironment *spapr, > rtas_st(rets, 0, -3); > } > > +static void rtas_stop_self(PowerPCCPU *cpu, sPAPREnvironment *spapr, > + uint32_t token, uint32_t nargs, > + target_ulong args, > + uint32_t nret, target_ulong rets) > +{ > + CPUState *cs = CPU(cpu); > + > + cs->halted = 1;
Uh.. I think you still need the msr = 0, or an interrupt could wake the cpu up again. > + cpu_exit(cs); > +} > + > static struct rtas_call { > const char *name; > spapr_rtas_fn fn; > @@ -322,6 +333,7 @@ static void core_rtas_register_types(void) > spapr_rtas_register("query-cpu-stopped-state", > rtas_query_cpu_stopped_state); > spapr_rtas_register("start-cpu", rtas_start_cpu); > + spapr_rtas_register("stop-self", rtas_stop_self); > } > > type_init(core_rtas_register_types) -- David Gibson | I'll have my music baroque, and my code david AT gibson.dropbear.id.au | minimalist, thank you. NOT _the_ _other_ | _way_ _around_! http://www.ozlabs.org/~dgibson
pgp9wbKXucG69.pgp
Description: PGP signature