[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Qemu-ppc] [PATCH 2/7] pc: move pcms->possible_cpus init out of pc_c
From: |
David Gibson |
Subject: |
Re: [Qemu-ppc] [PATCH 2/7] pc: move pcms->possible_cpus init out of pc_cpus_init() |
Date: |
Fri, 10 Feb 2017 10:26:16 +1100 |
User-agent: |
Mutt/1.7.1 (2016-10-04) |
On Thu, Feb 09, 2017 at 12:08:33PM +0100, Igor Mammedov wrote:
> possible_cpus could be initialized earlier then cpu objects,
> i.e. when -smp is parsed so move init code to possible_cpu_arch_ids()
> interface func and do initialization on the first call.
>
> it should help later with making -numa cpu/-smp parsing a machine state
> properties.
>
> Signed-off-by: Igor Mammedov <address@hidden>
Reviewed-by: David Gibson <address@hidden>
> ---
> hw/i386/pc.c | 35 ++++++++++++++++++++++++-----------
> 1 file changed, 24 insertions(+), 11 deletions(-)
>
> diff --git a/hw/i386/pc.c b/hw/i386/pc.c
> index cf2bec4..a6cfc97 100644
> --- a/hw/i386/pc.c
> +++ b/hw/i386/pc.c
> @@ -1144,7 +1144,9 @@ void pc_cpus_init(PCMachineState *pcms)
> ObjectClass *oc;
> const char *typename;
> gchar **model_pieces;
> + const CPUArchIdList *possible_cpus;
> MachineState *machine = MACHINE(pcms);
> + MachineClass *mc = MACHINE_GET_CLASS(pcms);
>
> /* init CPUs */
> if (machine->cpu_model == NULL) {
> @@ -1179,14 +1181,9 @@ void pc_cpus_init(PCMachineState *pcms)
> * This is used for FW_CFG_MAX_CPUS. See comments on bochs_bios_init().
> */
> pcms->apic_id_limit = x86_cpu_apic_id_from_index(max_cpus - 1) + 1;
> - machine->possible_cpus = g_malloc0(sizeof(CPUArchIdList) +
> - sizeof(CPUArchId) * max_cpus);
> - for (i = 0; i < max_cpus; i++) {
> - machine->possible_cpus->cpus[i].arch_id =
> x86_cpu_apic_id_from_index(i);
> - machine->possible_cpus->len++;
> - if (i < smp_cpus) {
> - pc_new_cpu(typename, x86_cpu_apic_id_from_index(i),
> &error_fatal);
> - }
> + possible_cpus = mc->possible_cpu_arch_ids(machine);
> + for (i = 0; i < smp_cpus; i++) {
> + pc_new_cpu(typename, possible_cpus->cpus[i].arch_id, &error_fatal);
> }
> }
>
> @@ -2248,10 +2245,26 @@ static unsigned pc_cpu_index_to_socket_id(unsigned
> cpu_index)
> return topo.pkg_id;
> }
>
> -static const CPUArchIdList *pc_possible_cpu_arch_ids(MachineState *machine)
> +static const CPUArchIdList *pc_possible_cpu_arch_ids(MachineState *ms)
> {
> - assert(machine->possible_cpus);
> - return machine->possible_cpus;
> + int i;
> +
> + if (ms->possible_cpus) {
> + /*
> + * make sure that max_cpus hasn't changed since the first use, i.e.
> + * -smp hasn't been parsed after it
> + */
> + assert(ms->possible_cpus->len == max_cpus);
> + return ms->possible_cpus;
> + }
> +
> + ms->possible_cpus = g_malloc0(sizeof(CPUArchIdList) +
> + sizeof(CPUArchId) * max_cpus);
> + ms->possible_cpus->len = max_cpus;
> + for (i = 0; i < ms->possible_cpus->len; i++) {
> + ms->possible_cpus->cpus[i].arch_id = x86_cpu_apic_id_from_index(i);
> + }
> + return ms->possible_cpus;
> }
>
> static HotpluggableCPUList *pc_query_hotpluggable_cpus(MachineState *machine)
--
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
- [Qemu-ppc] [PATCH 0/7] pc/spapr: unify handling of possible CPUs, Igor Mammedov, 2017/02/09
- [Qemu-ppc] [PATCH 2/7] pc: move pcms->possible_cpus init out of pc_cpus_init(), Igor Mammedov, 2017/02/09
- Re: [Qemu-ppc] [PATCH 2/7] pc: move pcms->possible_cpus init out of pc_cpus_init(),
David Gibson <=
- [Qemu-ppc] [PATCH 1/7] machine: move possible_cpus to MachineState, Igor Mammedov, 2017/02/09
- [Qemu-ppc] [PATCH 3/7] pc: calculate topology only once when possible_cpus is initialised, Igor Mammedov, 2017/02/09
- [Qemu-ppc] [PATCH 4/7] pc: pass apic_id to pc_find_cpu_slot() directly so lookup could be done without CPU object, Igor Mammedov, 2017/02/09
- [Qemu-ppc] [PATCH 5/7] change CPUArchId.cpu type to Object*, Igor Mammedov, 2017/02/09
- [Qemu-ppc] [PATCH 6/7] spapr: reuse machine->possible_cpus instead of cores[], Igor Mammedov, 2017/02/09