On Mon, Jun 20, 2016 at 01:28:26AM +0300, Sergey Fedorov wrote: > From: Alex Bennée <alex.bennee@xxxxxxxxxx> > > CPUState is a fairly common pointer to pass to these helpers. This means > if you need other arguments for the async_run_on_cpu case you end up > having to do a g_malloc to stuff additional data into the routine. For > the current users this isn't a massive deal but for MTTCG this gets > cumbersome when the only other parameter is often an address. > > This adds the typedef run_on_cpu_func for helper functions which has an > explicit CPUState * passed as the first parameter. All the users of > run_on_cpu and async_run_on_cpu have had their helpers updated to use > CPUState where available. > > Signed-off-by: Alex Bennée <alex.bennee@xxxxxxxxxx> > Signed-off-by: Sergey Fedorov <sergey.fedorov@xxxxxxxxxx> [snip] > diff --git a/hw/ppc/spapr.c b/hw/ppc/spapr.c > index 778fa255a946..a427492c0310 100644 > --- a/hw/ppc/spapr.c > +++ b/hw/ppc/spapr.c > @@ -2159,10 +2159,8 @@ static void spapr_machine_finalizefn(Object *obj) > g_free(spapr->kvm_type); > } > > -static void ppc_cpu_do_nmi_on_cpu(void *arg) > +static void ppc_cpu_do_nmi_on_cpu(CPUState *cs, void *arg) > { > - CPUState *cs = arg; > - > cpu_synchronize_state(cs); > ppc_cpu_do_system_reset(cs); > } > @@ -2172,7 +2170,7 @@ static void spapr_nmi(NMIState *n, int cpu_index, Error **errp) > CPUState *cs; > > CPU_FOREACH(cs) { > - async_run_on_cpu(cs, ppc_cpu_do_nmi_on_cpu, cs); > + async_run_on_cpu(cs, ppc_cpu_do_nmi_on_cpu, NULL); > } > } > > diff --git a/hw/ppc/spapr_hcall.c b/hw/ppc/spapr_hcall.c > index 2ba5cbdb194a..22d57469b8a5 100644 > --- a/hw/ppc/spapr_hcall.c > +++ b/hw/ppc/spapr_hcall.c > @@ -13,19 +13,18 @@ > #include "kvm_ppc.h" > > struct SPRSyncState { > - CPUState *cs; > int spr; > target_ulong value; > target_ulong mask; > }; > > -static void do_spr_sync(void *arg) > +static void do_spr_sync(CPUState *cs, void *arg) > { > struct SPRSyncState *s = arg; > - PowerPCCPU *cpu = POWERPC_CPU(s->cs); > + PowerPCCPU *cpu = POWERPC_CPU(cs); > CPUPPCState *env = &cpu->env; > > - cpu_synchronize_state(s->cs); > + cpu_synchronize_state(cs); > env->spr[s->spr] &= ~s->mask; > env->spr[s->spr] |= s->value; > } > @@ -34,7 +33,6 @@ static void set_spr(CPUState *cs, int spr, target_ulong value, > target_ulong mask) > { > struct SPRSyncState s = { > - .cs = cs, > .spr = spr, > .value = value, > .mask = mask > @@ -908,11 +906,11 @@ typedef struct { > Error *err; > } SetCompatState; You've missed the opportunity here to remove the cpu field from SetCompatState, as you did with SPRSyncState. > > -static void do_set_compat(void *arg) > +static void do_set_compat(CPUState *cs, void *arg) > { > SetCompatState *s = arg; > > - cpu_synchronize_state(CPU(s->cpu)); > + cpu_synchronize_state(cs); > ppc_set_compat(s->cpu, s->cpu_version, &s->err); > } -- 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
Attachment:
signature.asc
Description: PGP signature