[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [RFC PATCH v1 07/13] spapr: Start all the threads of CPU co
From: |
Bharata B Rao |
Subject: |
[Qemu-devel] [RFC PATCH v1 07/13] spapr: Start all the threads of CPU core when core is hotplugged |
Date: |
Thu, 8 Jan 2015 11:40:14 +0530 |
PowerPC kernel adds or removes CPUs in core granularity and hence
onlines/offlines all the SMT threads of a core during hot plug/unplug.
Support this notion by starting all SMT threads of a core when a core
is hotplugged.
Signed-off-by: Bharata B Rao <address@hidden>
---
hw/ppc/spapr.c | 25 +++++++++++++++++++++++++
1 file changed, 25 insertions(+)
diff --git a/hw/ppc/spapr.c b/hw/ppc/spapr.c
index a293a59..4347471 100644
--- a/hw/ppc/spapr.c
+++ b/hw/ppc/spapr.c
@@ -1376,6 +1376,8 @@ static void spapr_drc_reset(void *opaque)
}
}
+static const char *current_cpu_model;
+
/* pSeries LPAR / sPAPR hardware init */
static void ppc_spapr_init(MachineState *machine)
{
@@ -1473,6 +1475,8 @@ static void ppc_spapr_init(MachineState *machine)
}
}
+ current_cpu_model = cpu_model;
+
/* allocate RAM */
spapr->ram_limit = ram_size;
spapr->maxram_limit = machine->maxram_size;
@@ -1912,10 +1916,31 @@ static void spapr_cpu_plug(HotplugHandler *hotplug_dev,
DeviceState *dev,
PowerPCCPU *cpu = POWERPC_CPU(cs);
sPAPRDRConnector *drc =
spapr_dr_connector_by_id(SPAPR_DR_CONNECTOR_TYPE_CPU, cpu->cpu_dt_id);
+ int id = ppc_get_vcpu_dt_id(cpu);
+ int smt = kvmppc_smt_threads();
+ int i;
+
+ /*
+ * SMT threads return from here, only main thread (core) will
+ * continue, create threads and signal hotplug event to the guest.
+ */
+ if ((id % smt) != 0) {
+ return;
+ }
/* TODO: Check if DR is enabled ? */
g_assert(drc);
+ /* Start rest of the SMT threads of the hot plugged core */
+ for (i = 1; i < smp_threads; i++) {
+ cpu = cpu_ppc_init(current_cpu_model);
+ if (cpu == NULL) {
+ fprintf(stderr, "Unable to find PowerPC CPU definition\n");
+ exit(1);
+ }
+ spapr_cpu_reset(cpu);
+ }
+
spapr_cpu_reset(POWERPC_CPU(CPU(dev)));
spapr_cpu_hotplug_add(dev, cs);
spapr_hotplug_req_add_event(drc);
--
2.1.0
- [Qemu-devel] [RFC PATCH v1 08/13] spapr: Enable CPU hotplug for POWER8 CPU family, (continued)
- [Qemu-devel] [RFC PATCH v1 08/13] spapr: Enable CPU hotplug for POWER8 CPU family, Bharata B Rao, 2015/01/08
- [Qemu-devel] [RFC PATCH v1 03/13] spapr: Consider max_cpus during xics initialization, Bharata B Rao, 2015/01/08
- [Qemu-devel] [RFC PATCH v1 04/13] spapr: Factor out CPU initialization code into realizefn, Bharata B Rao, 2015/01/08
- [Qemu-devel] [RFC PATCH v1 01/13] spapr: enable PHB/CPU/LMB hotplug for pseries-2.3, Bharata B Rao, 2015/01/08
- [Qemu-devel] [RFC PATCH v1 13/13] spapr: Memory hotplug support, Bharata B Rao, 2015/01/08
- [Qemu-devel] [RFC PATCH v1 07/13] spapr: Start all the threads of CPU core when core is hotplugged,
Bharata B Rao <=
- [Qemu-devel] [RFC PATCH v1 05/13] spapr: Support ibm, lrdr-capacity device tree property, Bharata B Rao, 2015/01/08
- [Qemu-devel] [RFC PATCH v1 12/13] spapr: Support ibm, dynamic-reconfiguration-memory, Bharata B Rao, 2015/01/08
- [Qemu-devel] [RFC PATCH v1 09/13] spapr: CPU hot unplug support, Bharata B Rao, 2015/01/08