[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PULL v5 11/43] i386: Add die-level cpu topology to x86CPU
From: |
Eduardo Habkost |
Subject: |
[Qemu-devel] [PULL v5 11/43] i386: Add die-level cpu topology to x86CPU on PCMachine |
Date: |
Wed, 3 Jul 2019 18:07:49 -0300 |
From: Like Xu <address@hidden>
The die-level as the first PC-specific cpu topology is added to the leagcy
cpu topology model, which has one die per package implicitly and only the
numbers of sockets/cores/threads are configurable.
In the new model with die-level support, the total number of logical
processors (including offline) on board will be calculated as:
#cpus = #sockets * #dies * #cores * #threads
and considering compatibility, the default value for #dies would be
initialized to one in x86_cpu_initfn() and pc_machine_initfn().
Signed-off-by: Like Xu <address@hidden>
Message-Id: <address@hidden>
Reviewed-by: Eduardo Habkost <address@hidden>
Signed-off-by: Eduardo Habkost <address@hidden>
---
include/hw/i386/pc.h | 2 ++
target/i386/cpu.h | 2 ++
hw/i386/pc.c | 9 +++++++--
target/i386/cpu.c | 1 +
4 files changed, 12 insertions(+), 2 deletions(-)
diff --git a/include/hw/i386/pc.h b/include/hw/i386/pc.h
index 884e35b9b2..764996e6b4 100644
--- a/include/hw/i386/pc.h
+++ b/include/hw/i386/pc.h
@@ -24,6 +24,7 @@
* PCMachineState:
* @acpi_dev: link to ACPI PM device that performs ACPI hotplug handling
* @boot_cpus: number of present VCPUs
+ * @smp_dies: number of dies per one package
*/
struct PCMachineState {
/*< private >*/
@@ -59,6 +60,7 @@ struct PCMachineState {
bool apic_xrupt_override;
unsigned apic_id_limit;
uint16_t boot_cpus;
+ unsigned smp_dies;
/* NUMA information: */
uint64_t numa_nodes;
diff --git a/target/i386/cpu.h b/target/i386/cpu.h
index 93345792f4..14c19e61b1 100644
--- a/target/i386/cpu.h
+++ b/target/i386/cpu.h
@@ -1385,6 +1385,8 @@ typedef struct CPUX86State {
uint64_t xss;
TPRAccess tpr_access_type;
+
+ unsigned nr_dies;
} CPUX86State;
struct kvm_msrs;
diff --git a/hw/i386/pc.c b/hw/i386/pc.c
index 73de30cc20..e18b1bade2 100644
--- a/hw/i386/pc.c
+++ b/hw/i386/pc.c
@@ -2306,9 +2306,13 @@ static void pc_cpu_pre_plug(HotplugHandler *hotplug_dev,
return;
}
- /* if APIC ID is not set, set it based on socket/core/thread properties */
+ /*
+ * If APIC ID is not set,
+ * set it based on socket/die/core/thread properties.
+ */
if (cpu->apic_id == UNASSIGNED_APIC_ID) {
- int max_socket = (ms->smp.max_cpus - 1) / smp_threads / smp_cores;
+ int max_socket = (ms->smp.max_cpus - 1) /
+ smp_threads / smp_cores / pcms->smp_dies;
if (cpu->socket_id < 0) {
error_setg(errp, "CPU socket-id is not set");
@@ -2619,6 +2623,7 @@ static void pc_machine_initfn(Object *obj)
pcms->smbus_enabled = true;
pcms->sata_enabled = true;
pcms->pit_enabled = true;
+ pcms->smp_dies = 1;
pc_system_flash_create(pcms);
}
diff --git a/target/i386/cpu.c b/target/i386/cpu.c
index 4b5cd49338..8ef3063140 100644
--- a/target/i386/cpu.c
+++ b/target/i386/cpu.c
@@ -5639,6 +5639,7 @@ static void x86_cpu_initfn(Object *obj)
CPUX86State *env = &cpu->env;
FeatureWord w;
+ env->nr_dies = 1;
cpu_set_cpustate_pointers(cpu);
object_property_add(obj, "family", "int",
--
2.18.0.rc1.1.g3f1ff2140
- [Qemu-devel] [PULL v5 01/43] hw/boards: Add struct CpuTopology to MachineState, (continued)
- [Qemu-devel] [PULL v5 01/43] hw/boards: Add struct CpuTopology to MachineState, Eduardo Habkost, 2019/07/03
- [Qemu-devel] [PULL v5 02/43] machine: Refactor smp-related call chains to pass MachineState, Eduardo Habkost, 2019/07/03
- [Qemu-devel] [PULL v5 03/43] general: Replace global smp variables with smp machine properties, Eduardo Habkost, 2019/07/03
- [Qemu-devel] [PULL v5 04/43] hw/ppc: Replace global smp variables with machine smp properties, Eduardo Habkost, 2019/07/03
- [Qemu-devel] [PULL v5 05/43] hw/riscv: Replace global smp variables with machine smp properties, Eduardo Habkost, 2019/07/03
- [Qemu-devel] [PULL v5 06/43] hw/s390x: Replace global smp variables with machine smp properties, Eduardo Habkost, 2019/07/03
- [Qemu-devel] [PULL v5 08/43] hw/arm: Replace global smp variables with machine smp properties, Eduardo Habkost, 2019/07/03
- [Qemu-devel] [PULL v5 07/43] hw/i386: Replace global smp variables with machine smp properties, Eduardo Habkost, 2019/07/03
- [Qemu-devel] [PULL v5 13/43] i386/cpu: Consolidate die-id validity in smp context, Eduardo Habkost, 2019/07/03
- [Qemu-devel] [PULL v5 09/43] hw: Replace global smp variables with MachineState for all remaining archs, Eduardo Habkost, 2019/07/03
- [Qemu-devel] [PULL v5 11/43] i386: Add die-level cpu topology to x86CPU on PCMachine,
Eduardo Habkost <=
- [Qemu-devel] [PULL v5 18/43] numa: deprecate implict memory distribution between nodes, Eduardo Habkost, 2019/07/03
- [Qemu-devel] [PULL v5 16/43] machine: show if CLI option '-numa node, mem' is supported in QAPI schema, Eduardo Habkost, 2019/07/03
- [Qemu-devel] [PULL v5 25/43] x86/cpu: use FeatureWordArray to define filtered_features, Eduardo Habkost, 2019/07/03
- [Qemu-devel] [PULL v5 22/43] i386: Don't print warning if phys-bits was set automatically, Eduardo Habkost, 2019/07/03
- [Qemu-devel] [PULL v5 21/43] deprecate -mem-path fallback to anonymous RAM, Eduardo Habkost, 2019/07/03
- [Qemu-devel] [PULL v5 10/43] vl.c: Replace smp global variables with smp machine properties, Eduardo Habkost, 2019/07/03
- [Qemu-devel] [PULL v5 15/43] pc: fix possible NULL pointer dereference in pc_machine_get_device_memory_region_size(), Eduardo Habkost, 2019/07/03
- [Qemu-devel] [PULL v5 19/43] hppa: Delete unused hppa_cpu_list() function, Eduardo Habkost, 2019/07/03
- [Qemu-devel] [PULL v5 14/43] i386: Update new x86_apicid parsing rules with die_offset support, Eduardo Habkost, 2019/07/03
- [Qemu-devel] [PULL v5 20/43] target/i386: fix feature check in hyperv-stub.c, Eduardo Habkost, 2019/07/03