[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PULL v6 11/42] i386: Add die-level cpu topology to x86CPU
From: |
Eduardo Habkost |
Subject: |
[Qemu-devel] [PULL v6 11/42] i386: Add die-level cpu topology to x86CPU on PCMachine |
Date: |
Fri, 5 Jul 2019 19:14:33 -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 de3bd32f52..e56c1a39cb 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 269e44f0d0..d44b2d06db 100644
--- a/hw/i386/pc.c
+++ b/hw/i386/pc.c
@@ -2303,9 +2303,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");
@@ -2684,6 +2688,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 v6 06/42] hw/s390x: Replace global smp variables with machine smp properties, (continued)
- [Qemu-devel] [PULL v6 06/42] hw/s390x: Replace global smp variables with machine smp properties, Eduardo Habkost, 2019/07/05
- [Qemu-devel] [PULL v6 03/42] general: Replace global smp variables with smp machine properties, Eduardo Habkost, 2019/07/05
- [Qemu-devel] [PULL v6 07/42] hw/i386: Replace global smp variables with machine smp properties, Eduardo Habkost, 2019/07/05
- [Qemu-devel] [PULL v6 09/42] hw: Replace global smp variables with MachineState for all remaining archs, Eduardo Habkost, 2019/07/05
- [Qemu-devel] [PULL v6 12/42] hw/i386: Adjust nr_dies with configured smp_dies for PCMachine, Eduardo Habkost, 2019/07/05
- [Qemu-devel] [PULL v6 10/42] vl.c: Replace smp global variables with smp machine properties, Eduardo Habkost, 2019/07/05
- [Qemu-devel] [PULL v6 13/42] i386/cpu: Consolidate die-id validity in smp context, Eduardo Habkost, 2019/07/05
- [Qemu-devel] [PULL v6 08/42] hw/arm: Replace global smp variables with machine smp properties, Eduardo Habkost, 2019/07/05
- [Qemu-devel] [PULL v6 11/42] i386: Add die-level cpu topology to x86CPU on PCMachine,
Eduardo Habkost <=
- [Qemu-devel] [PULL v6 16/42] machine: show if CLI option '-numa node, mem' is supported in QAPI schema, Eduardo Habkost, 2019/07/05
- [Qemu-devel] [PULL v6 15/42] pc: fix possible NULL pointer dereference in pc_machine_get_device_memory_region_size(), Eduardo Habkost, 2019/07/05
- [Qemu-devel] [PULL v6 14/42] i386: Update new x86_apicid parsing rules with die_offset support, Eduardo Habkost, 2019/07/05
- [Qemu-devel] [PULL v6 17/42] numa: deprecate 'mem' parameter of '-numa node' option, Eduardo Habkost, 2019/07/05
- [Qemu-devel] [PULL v6 18/42] numa: deprecate implict memory distribution between nodes, Eduardo Habkost, 2019/07/05
- [Qemu-devel] [PULL v6 19/42] hppa: Delete unused hppa_cpu_list() function, Eduardo Habkost, 2019/07/05
- [Qemu-devel] [PULL v6 21/42] i386: Don't print warning if phys-bits was set automatically, Eduardo Habkost, 2019/07/05
- [Qemu-devel] [PULL v6 22/42] i386: Fix signedness of hyperv_spinlock_attempts, Eduardo Habkost, 2019/07/05
- [Qemu-devel] [PULL v6 24/42] x86/cpu: use FeatureWordArray to define filtered_features, Eduardo Habkost, 2019/07/05
- [Qemu-devel] [PULL v6 23/42] i386: make 'hv-spinlocks' a regular uint32 property, Eduardo Habkost, 2019/07/05