qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
From: Bharata B Rao <bharata@linux.vnet.ibm.com>
To: qemu-devel@nongnu.org
Cc: Bharata B Rao <bharata@linux.vnet.ibm.com>,
	mdroth@linux.vnet.ibm.com, agraf@suse.de, qemu-ppc@nongnu.org,
	tyreld@linux.vnet.ibm.com, nfont@linux.vnet.ibm.com,
	imammedo@redhat.com, afaerber@suse.de,
	david@gibson.dropbear.id.au
Subject: [Qemu-devel] [RFC PATCH v2 01/23] spapr: enable PHB/CPU/LMB hotplug for pseries-2.3
Date: Mon, 23 Mar 2015 19:05:42 +0530	[thread overview]
Message-ID: <1427117764-23008-2-git-send-email-bharata@linux.vnet.ibm.com> (raw)
In-Reply-To: <1427117764-23008-1-git-send-email-bharata@linux.vnet.ibm.com>

From: Michael Roth <mdroth@linux.vnet.ibm.com>

Introduce an sPAPRMachineClass sub-class of MachineClass to
handle sPAPR-specific machine configuration properties.

The 'dr_phb[cpu,lmb]_enabled' field of that class can be set as
part of machine-specific init code, and is then propagated
to sPAPREnvironment to conditional enable creation of DRC
objects and device-tree description to facilitate hotplug
of PHBs/CPUs/LMBs.

Since we can't migrate this state to older machine types,
default the option to false and only enable it for new
machine types.

Signed-off-by: Michael Roth <mdroth@linux.vnet.ibm.com>
Signed-off-by: Bharata B Rao <bharata@linux.vnet.ibm.com>
              [Added CPU and LMB bits]
Reviewed-by: Michael Roth <mdroth@linux.vnet.ibm.com>
Reviewed-by: David Gibson <david@gibson.dropbear.id.au>
---
 hw/ppc/spapr.c         | 32 ++++++++++++++++++++++++++++++++
 include/hw/ppc/spapr.h |  3 +++
 2 files changed, 35 insertions(+)

diff --git a/hw/ppc/spapr.c b/hw/ppc/spapr.c
index 74ee277..a782e28 100644
--- a/hw/ppc/spapr.c
+++ b/hw/ppc/spapr.c
@@ -90,11 +90,29 @@
 
 #define HTAB_SIZE(spapr)        (1ULL << ((spapr)->htab_shift))
 
+typedef struct sPAPRMachineClass sPAPRMachineClass;
 typedef struct sPAPRMachineState sPAPRMachineState;
 
 #define TYPE_SPAPR_MACHINE      "spapr-machine"
 #define SPAPR_MACHINE(obj) \
     OBJECT_CHECK(sPAPRMachineState, (obj), TYPE_SPAPR_MACHINE)
+#define SPAPR_MACHINE_GET_CLASS(obj) \
+        OBJECT_GET_CLASS(sPAPRMachineClass, obj, TYPE_SPAPR_MACHINE)
+#define SPAPR_MACHINE_CLASS(klass) \
+        OBJECT_CLASS_CHECK(sPAPRMachineClass, klass, TYPE_SPAPR_MACHINE)
+
+/**
+ * sPAPRMachineClass:
+ */
+struct sPAPRMachineClass {
+    /*< private >*/
+    MachineClass parent_class;
+
+    /*< public >*/
+    bool dr_phb_enabled; /* enable dynamic-reconfig/hotplug of PHBs */
+    bool dr_cpu_enabled; /* enable dynamic-reconfig/hotplug of CPUs */
+    bool dr_lmb_enabled; /* enable dynamic-reconfig/hotplug of LMBs */
+};
 
 /**
  * sPAPRMachineState:
@@ -1378,6 +1396,7 @@ static SaveVMHandlers savevm_htab_handlers = {
 /* pSeries LPAR / sPAPR hardware init */
 static void ppc_spapr_init(MachineState *machine)
 {
+    sPAPRMachineClass *smc = SPAPR_MACHINE_GET_CLASS(machine);
     ram_addr_t ram_size = machine->ram_size;
     const char *cpu_model = machine->cpu_model;
     const char *kernel_filename = machine->kernel_filename;
@@ -1541,6 +1560,10 @@ static void ppc_spapr_init(MachineState *machine)
     /* We always have at least the nvram device on VIO */
     spapr_create_nvram(spapr);
 
+    spapr->dr_phb_enabled = smc->dr_phb_enabled;
+    spapr->dr_cpu_enabled = smc->dr_cpu_enabled;
+    spapr->dr_lmb_enabled = smc->dr_lmb_enabled;
+
     /* Set up PCI */
     spapr_pci_rtas_init();
 
@@ -1767,6 +1790,7 @@ static void spapr_nmi(NMIState *n, int cpu_index, Error **errp)
 static void spapr_machine_class_init(ObjectClass *oc, void *data)
 {
     MachineClass *mc = MACHINE_CLASS(oc);
+    sPAPRMachineClass *smc = SPAPR_MACHINE_CLASS(oc);
     FWPathProviderClass *fwc = FW_PATH_PROVIDER_CLASS(oc);
     NMIClass *nc = NMI_CLASS(oc);
 
@@ -1778,6 +1802,9 @@ static void spapr_machine_class_init(ObjectClass *oc, void *data)
     mc->default_boot_order = NULL;
     mc->kvm_type = spapr_kvm_type;
     mc->has_dynamic_sysbus = true;
+    smc->dr_phb_enabled = false;
+    smc->dr_cpu_enabled = false;
+    smc->dr_lmb_enabled = false;
 
     fwc->get_dev_path = spapr_get_fw_dev_path;
     nc->nmi_monitor_handler = spapr_nmi;
@@ -1789,6 +1816,7 @@ static const TypeInfo spapr_machine_info = {
     .abstract      = true,
     .instance_size = sizeof(sPAPRMachineState),
     .instance_init = spapr_machine_initfn,
+    .class_size    = sizeof(sPAPRMachineClass),
     .class_init    = spapr_machine_class_init,
     .interfaces = (InterfaceInfo[]) {
         { TYPE_FW_PATH_PROVIDER },
@@ -1854,11 +1882,15 @@ static const TypeInfo spapr_machine_2_2_info = {
 static void spapr_machine_2_3_class_init(ObjectClass *oc, void *data)
 {
     MachineClass *mc = MACHINE_CLASS(oc);
+    sPAPRMachineClass *smc = SPAPR_MACHINE_CLASS(oc);
 
     mc->name = "pseries-2.3";
     mc->desc = "pSeries Logical Partition (PAPR compliant) v2.3";
     mc->alias = "pseries";
     mc->is_default = 1;
+    smc->dr_phb_enabled = true;
+    smc->dr_cpu_enabled = true;
+    smc->dr_lmb_enabled = true;
 }
 
 static const TypeInfo spapr_machine_2_3_info = {
diff --git a/include/hw/ppc/spapr.h b/include/hw/ppc/spapr.h
index 4ab289b..4578433 100644
--- a/include/hw/ppc/spapr.h
+++ b/include/hw/ppc/spapr.h
@@ -32,6 +32,9 @@ typedef struct sPAPREnvironment {
     uint64_t rtc_offset; /* Now used only during incoming migration */
     struct PPCTimebase tb;
     bool has_graphics;
+    bool dr_phb_enabled; /* hotplug / dynamic-reconfiguration of PHBs */
+    bool dr_cpu_enabled; /* hotplug / dynamic-reconfiguration of CPUs */
+    bool dr_lmb_enabled; /* hotplug / dynamic-reconfiguration of LMBs */
 
     uint32_t check_exception_irq;
     Notifier epow_notifier;
-- 
2.1.0

  reply	other threads:[~2015-03-23 13:37 UTC|newest]

Thread overview: 74+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-03-23 13:35 [Qemu-devel] [RFC PATCH v2 00/23] CPU and Memory hotplug for PowerPC sPAPR guests Bharata B Rao
2015-03-23 13:35 ` Bharata B Rao [this message]
2015-03-25  0:04   ` [Qemu-devel] [RFC PATCH v2 01/23] spapr: enable PHB/CPU/LMB hotplug for pseries-2.3 David Gibson
2015-03-23 13:35 ` [Qemu-devel] [RFC PATCH v2 02/23] spapr: Add DRC dt entries for CPUs Bharata B Rao
2015-03-25  0:07   ` David Gibson
2015-03-25  5:02     ` Bharata B Rao
2015-03-23 13:35 ` [Qemu-devel] [RFC PATCH v2 03/23] spapr: Consider max_cpus during xics initialization Bharata B Rao
2015-03-23 13:35 ` [Qemu-devel] [RFC PATCH v2 04/23] spapr: Support ibm, lrdr-capacity device tree property Bharata B Rao
2015-03-25  0:15   ` David Gibson
2015-04-01  3:59     ` Bharata B Rao
2015-03-23 13:35 ` [Qemu-devel] [RFC PATCH v2 05/23] spapr: Reorganize CPU dt generation code Bharata B Rao
2015-03-25  1:36   ` David Gibson
2015-03-25  8:26     ` Bharata B Rao
2015-03-26  1:40       ` David Gibson
2015-03-23 13:35 ` [Qemu-devel] [RFC PATCH v2 06/23] spapr: Consolidate cpu init code into a routine Bharata B Rao
2015-03-25  1:37   ` David Gibson
2015-03-23 13:35 ` [Qemu-devel] [RFC PATCH v2 07/23] cpu: Prepare Socket container type Bharata B Rao
2015-03-25  2:03   ` David Gibson
2015-03-23 13:35 ` [Qemu-devel] [RFC PATCH v2 08/23] ppc: Prepare CPU socket/core abstraction Bharata B Rao
2015-03-25  2:06   ` David Gibson
2015-03-23 13:35 ` [Qemu-devel] [RFC PATCH v2 09/23] spapr: Add CPU hotplug handler Bharata B Rao
2015-03-25  2:08   ` David Gibson
2015-03-23 13:35 ` [Qemu-devel] [RFC PATCH v2 10/23] ppc: Update cpu_model in MachineState Bharata B Rao
2015-03-25  2:30   ` David Gibson
2015-03-23 13:35 ` [Qemu-devel] [RFC PATCH v2 11/23] ppc: Create sockets and cores for CPUs Bharata B Rao
2015-03-25  2:39   ` David Gibson
2015-03-25  8:33     ` Bharata B Rao
2015-03-26  1:54       ` David Gibson
2015-03-23 13:35 ` [Qemu-devel] [RFC PATCH v2 12/23] spapr: CPU hotplug support Bharata B Rao
2015-03-25  3:03   ` David Gibson
2015-03-25  8:36     ` Bharata B Rao
2015-03-26  1:42       ` David Gibson
2015-03-23 13:35 ` [Qemu-devel] [RFC PATCH v2 13/23] cpus: Add Error argument to cpu_exec_init() Bharata B Rao
2015-03-25  3:12   ` David Gibson
2015-03-23 13:35 ` [Qemu-devel] [RFC PATCH v2 14/23] cpus: Convert cpu_index into a bitmap Bharata B Rao
2015-03-25  3:23   ` David Gibson
2015-03-25  8:52     ` Bharata B Rao
2015-03-23 13:35 ` [Qemu-devel] [RFC PATCH v2 15/23] ppc: Move cpu_exec_init() call to realize function Bharata B Rao
2015-03-25  3:25   ` David Gibson
2015-03-25  8:56     ` Bharata B Rao
2015-03-23 13:35 ` [Qemu-devel] [RFC PATCH v2 16/23] cpus: Reclaim vCPU objects Bharata B Rao
2015-03-25  5:22   ` David Gibson
2015-03-23 13:35 ` [Qemu-devel] [RFC PATCH v2 17/23] xics_kvm: Don't enable KVM_CAP_IRQ_XICS if already enabled Bharata B Rao
2015-03-25  5:24   ` David Gibson
2015-03-25  9:12     ` Bharata B Rao
2015-03-26  1:46       ` David Gibson
2015-03-23 13:35 ` [Qemu-devel] [RFC PATCH v2 18/23] xics_kvm: Add cpu_destroy method to XICS Bharata B Rao
2015-03-25  5:26   ` David Gibson
2015-03-23 13:36 ` [Qemu-devel] [RFC PATCH v2 19/23] spapr: CPU hot unplug support Bharata B Rao
2015-03-25  5:44   ` David Gibson
2015-03-25 16:34     ` Bharata B Rao
2015-04-07  6:45   ` [Qemu-devel] [Qemu-ppc] " Alexey Kardashevskiy
2015-04-09  3:51     ` Bharata B Rao
2015-03-23 13:36 ` [Qemu-devel] [RFC PATCH v2 20/23] spapr: Remove vCPU objects after CPU hot unplug Bharata B Rao
2015-03-25  5:46   ` David Gibson
2015-03-23 13:36 ` [Qemu-devel] [RFC PATCH v2 21/23] spapr: Initialize hotplug memory address space Bharata B Rao
2015-03-25  5:58   ` David Gibson
2015-04-13  2:59     ` Bharata B Rao
2015-04-13 14:04       ` Igor Mammedov
2015-04-13 14:27         ` Bharata B Rao
2015-04-13 14:55           ` Igor Mammedov
2015-04-14  7:17             ` David Gibson
2015-03-23 13:36 ` [Qemu-devel] [RFC PATCH v2 22/23] spapr: Support ibm, dynamic-reconfiguration-memory Bharata B Rao
2015-03-26  3:44   ` David Gibson
2015-03-30  9:11     ` Bharata B Rao
2015-03-31  2:19       ` David Gibson
2015-03-23 13:36 ` [Qemu-devel] [RFC PATCH v2 23/23] spapr: Memory hotplug support Bharata B Rao
2015-03-26  3:57   ` David Gibson
2015-04-13  3:03     ` Bharata B Rao
2015-04-13 14:12       ` Igor Mammedov
2015-03-26  3:58 ` [Qemu-devel] [RFC PATCH v2 00/23] CPU and Memory hotplug for PowerPC sPAPR guests David Gibson
2015-03-26  4:16   ` Bharata B Rao
2015-04-06 10:19 ` Bharata B Rao
2015-04-07  8:57   ` Igor Mammedov

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1427117764-23008-2-git-send-email-bharata@linux.vnet.ibm.com \
    --to=bharata@linux.vnet.ibm.com \
    --cc=afaerber@suse.de \
    --cc=agraf@suse.de \
    --cc=david@gibson.dropbear.id.au \
    --cc=imammedo@redhat.com \
    --cc=mdroth@linux.vnet.ibm.com \
    --cc=nfont@linux.vnet.ibm.com \
    --cc=qemu-devel@nongnu.org \
    --cc=qemu-ppc@nongnu.org \
    --cc=tyreld@linux.vnet.ibm.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).