[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Qemu-ppc] [RFC 1/8] cpus: pass CPUState to run_on_cpu helpers
From: |
David Gibson |
Subject: |
Re: [Qemu-ppc] [RFC 1/8] cpus: pass CPUState to run_on_cpu helpers |
Date: |
Mon, 20 Jun 2016 11:23:02 +1000 |
User-agent: |
Mutt/1.6.1 (2016-04-27) |
On Mon, Jun 20, 2016 at 01:28:26AM +0300, Sergey Fedorov wrote:
> From: Alex Bennée <address@hidden>
>
> 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 <address@hidden>
> Signed-off-by: Sergey Fedorov <address@hidden>
[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
signature.asc
Description: PGP signature