Signed-off-by: Like Xu <like...@linux.intel.com> --- include/hw/arm/virt.h | 2 +- include/hw/boards.h | 8 ++++++++ include/sysemu/sysemu.h | 2 +- vl.c | 7 ++++++- 4 files changed, 16 insertions(+), 3 deletions(-)
diff --git a/include/hw/arm/virt.h b/include/hw/arm/virt.h index 507517c..724da0c 100644 --- a/include/hw/arm/virt.h +++ b/include/hw/arm/virt.h @@ -123,7 +123,7 @@ typedef struct { struct arm_boot_info bootinfo; MemMapEntry *memmap; const int *irqmap; - int smp_cpus; + unsigned int smp_cpus; void *fdt; int fdt_size; uint32_t clock_phandle; diff --git a/include/hw/boards.h b/include/hw/boards.h index e231860..cbde276 100644 --- a/include/hw/boards.h +++ b/include/hw/boards.h @@ -231,6 +231,13 @@ typedef struct DeviceMemoryState { MemoryRegion mr; } DeviceMemoryState; +typedef struct CpuTopology { + unsigned int smp_cpus; + unsigned int smp_cores; + unsigned int smp_threads; + unsigned int max_cpus; +} CpuTopology; + /** * MachineState: */ @@ -273,6 +280,7 @@ struct MachineState { const char *cpu_type; AccelState *accelerator; CPUArchIdList *possible_cpus; + CpuTopology topo; struct NVDIMMState *nvdimms_state; }; diff --git a/include/sysemu/sysemu.h b/include/sysemu/sysemu.h index 6065d9e..c0d7d7c 100644 --- a/include/sysemu/sysemu.h +++ b/include/sysemu/sysemu.h @@ -100,7 +100,7 @@ extern const char *keyboard_layout; extern int win2k_install_hack; extern int alt_grab; extern int ctrl_grab; -extern int smp_cpus; +extern unsigned int smp_cpus; extern unsigned int max_cpus; extern int cursor_hide; extern int graphic_rotate; diff --git a/vl.c b/vl.c index d61d560..9089253 100644 --- a/vl.c +++ b/vl.c @@ -162,7 +162,7 @@ static Chardev **serial_hds; Chardev *parallel_hds[MAX_PARALLEL_PORTS]; int win2k_install_hack = 0; int singlestep = 0; -int smp_cpus; +unsigned int smp_cpus; unsigned int max_cpus; int smp_cores = 1; int smp_threads = 1; @@ -4116,6 +4116,11 @@ int main(int argc, char **argv, char **envp) smp_parse(qemu_opts_find(qemu_find_opts("smp-opts"), NULL)); + current_machine->topo.smp_cpus = smp_cpus; + current_machine->topo.max_cpus = max_cpus; + current_machine->topo.smp_cores = smp_cores; + current_machine->topo.smp_threads = smp_threads; + /* sanity-check smp_cpus and max_cpus against machine_class */ if (smp_cpus < machine_class->min_cpus) { error_report("Invalid SMP CPUs %d. The min CPUs " -- 1.8.3.1