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 <[email protected]> > --- > 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
