qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Qemu-devel] [QEMU-PPC] [PATCH V4] powerpc/spapr: Add host threads p


From: David Gibson
Subject: Re: [Qemu-devel] [QEMU-PPC] [PATCH V4] powerpc/spapr: Add host threads parameter to ibm, get_system_parameter
Date: Wed, 28 Aug 2019 11:00:32 +1000
User-agent: Mutt/1.12.1 (2019-06-15)

On Tue, Aug 27, 2019 at 02:57:51PM +1000, Suraj Jitindar Singh wrote:
> The ibm,get_system_parameter rtas call is used by the guest to retrieve
> data relating to certain parameters of the system. The SPLPAR
> characteristics option (token 20) is used to determine characteristics of
> the environment in which the lpar will run.
> 
> It may be useful for a guest to know the number of physical host threads
> present on the underlying system where it is being run. Add the
> characteristic "HostThrs" to the SPLPAR Characteristics
> ibm,get_system_parameter rtas call to expose this information to a
> guest. Add a n_host_threads property to the processor class which is
> then used to retrieve this information and define it for POWER8 and
> POWER9. Other processors will default to 0 and the charateristic won't
> be added.
> 
> Signed-off-by: Suraj Jitindar Singh <address@hidden>

Applied, thanks.

> 
> ---
> 
> V1 -> V2:
> - Take into account that the core may be operating in split core mode
>   meaning a single core may be split into multiple subcores.
> V2 -> V3:
> - Add curly braces for single line if statements
> V3 -> V4;
> - Add a host threads property to the processor class and use this to
>   derive the information rather than the device tree.
> ---
>  hw/ppc/spapr_rtas.c             | 15 +++++++++++++++
>  target/ppc/cpu-qom.h            |  1 +
>  target/ppc/translate_init.inc.c |  2 ++
>  3 files changed, 18 insertions(+)
> 
> diff --git a/hw/ppc/spapr_rtas.c b/hw/ppc/spapr_rtas.c
> index 526b489297..bee3835214 100644
> --- a/hw/ppc/spapr_rtas.c
> +++ b/hw/ppc/spapr_rtas.c
> @@ -266,6 +266,7 @@ static void rtas_ibm_get_system_parameter(PowerPCCPU *cpu,
>                                            target_ulong args,
>                                            uint32_t nret, target_ulong rets)
>  {
> +    PowerPCCPUClass *pcc = POWERPC_CPU_GET_CLASS(cpu);
>      MachineState *ms = MACHINE(qdev_get_machine());
>      unsigned int max_cpus = ms->smp.max_cpus;
>      target_ulong parameter = rtas_ld(args, 0);
> @@ -283,6 +284,20 @@ static void rtas_ibm_get_system_parameter(PowerPCCPU 
> *cpu,
>                                            current_machine->ram_size / MiB,
>                                            ms->smp.cpus,
>                                            max_cpus);
> +        if (pcc->n_host_threads > 0) {
> +            char *hostthr_val, *old = param_val;
> +
> +            /*
> +             * Add HostThrs property. This property is not present in PAPR 
> but
> +             * is expected by some guests to communicate the number of 
> physical
> +             * host threads per core on the system so that they can scale
> +             * information which varies based on the thread configuration.
> +             */
> +            hostthr_val = g_strdup_printf(",HostThrs=%d", 
> pcc->n_host_threads);
> +            param_val = g_strconcat(param_val, hostthr_val, NULL);
> +            g_free(hostthr_val);
> +            g_free(old);
> +        }
>          ret = sysparm_st(buffer, length, param_val, strlen(param_val) + 1);
>          g_free(param_val);
>          break;
> diff --git a/target/ppc/cpu-qom.h b/target/ppc/cpu-qom.h
> index 7ffdb0a706..e499575dc8 100644
> --- a/target/ppc/cpu-qom.h
> +++ b/target/ppc/cpu-qom.h
> @@ -191,6 +191,7 @@ typedef struct PowerPCCPUClass {
>      const PPCHash64Options *hash64_opts;
>      struct ppc_radix_page_info *radix_page_info;
>      uint32_t lrg_decr_bits;
> +    int n_host_threads;
>      void (*init_proc)(CPUPPCState *env);
>      int  (*check_pow)(CPUPPCState *env);
>      int (*handle_mmu_fault)(PowerPCCPU *cpu, vaddr eaddr, int rwx, int 
> mmu_idx);
> diff --git a/target/ppc/translate_init.inc.c b/target/ppc/translate_init.inc.c
> index 4a21ed7289..41f77b7ef8 100644
> --- a/target/ppc/translate_init.inc.c
> +++ b/target/ppc/translate_init.inc.c
> @@ -8770,6 +8770,7 @@ POWERPC_FAMILY(POWER8)(ObjectClass *oc, void *data)
>      pcc->handle_mmu_fault = ppc_hash64_handle_mmu_fault;
>      pcc->hash64_opts = &ppc_hash64_opts_POWER7;
>      pcc->lrg_decr_bits = 32;
> +    pcc->n_host_threads = 8;
>  #endif
>      pcc->excp_model = POWERPC_EXCP_POWER8;
>      pcc->bus_model = PPC_FLAGS_INPUT_POWER7;
> @@ -8981,6 +8982,7 @@ POWERPC_FAMILY(POWER9)(ObjectClass *oc, void *data)
>      pcc->hash64_opts = &ppc_hash64_opts_POWER7;
>      pcc->radix_page_info = &POWER9_radix_page_info;
>      pcc->lrg_decr_bits = 56;
> +    pcc->n_host_threads = 4;
>  #endif
>      pcc->excp_model = POWERPC_EXCP_POWER9;
>      pcc->bus_model = PPC_FLAGS_INPUT_POWER9;

-- 
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


reply via email to

[Prev in Thread] Current Thread [Next in Thread]