From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:45982) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1Y96JB-000214-Pp for qemu-devel@nongnu.org; Thu, 08 Jan 2015 01:11:02 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1Y96J2-0006gN-4R for qemu-devel@nongnu.org; Thu, 08 Jan 2015 01:11:01 -0500 Received: from e28smtp03.in.ibm.com ([122.248.162.3]:59040) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1Y96J1-0006fS-Ga for qemu-devel@nongnu.org; Thu, 08 Jan 2015 01:10:52 -0500 Received: from /spool/local by e28smtp03.in.ibm.com with IBM ESMTP SMTP Gateway: Authorized Use Only! Violators will be prosecuted for from ; Thu, 8 Jan 2015 11:40:50 +0530 Received: from d28relay02.in.ibm.com (d28relay02.in.ibm.com [9.184.220.59]) by d28dlp03.in.ibm.com (Postfix) with ESMTP id B087B125804B for ; Thu, 8 Jan 2015 11:41:31 +0530 (IST) Received: from d28av03.in.ibm.com (d28av03.in.ibm.com [9.184.220.65]) by d28relay02.in.ibm.com (8.14.9/8.14.9/NCO v10.0) with ESMTP id t086AlKW33292356 for ; Thu, 8 Jan 2015 11:40:48 +0530 Received: from d28av03.in.ibm.com (localhost [127.0.0.1]) by d28av03.in.ibm.com (8.14.4/8.14.4/NCO v10.0 AVout) with ESMTP id t086AdBN031862 for ; Thu, 8 Jan 2015 11:40:39 +0530 From: Bharata B Rao Date: Thu, 8 Jan 2015 11:40:08 +0530 Message-Id: <1420697420-16053-2-git-send-email-bharata@linux.vnet.ibm.com> In-Reply-To: <1420697420-16053-1-git-send-email-bharata@linux.vnet.ibm.com> References: <1420697420-16053-1-git-send-email-bharata@linux.vnet.ibm.com> Subject: [Qemu-devel] [RFC PATCH v1 01/13] spapr: enable PHB/CPU/LMB hotplug for pseries-2.3 List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: qemu-devel@nongnu.org Cc: imammedo@redhat.com, Bharata B Rao , mdroth@linux.vnet.ibm.com, agraf@suse.de From: Michael Roth 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 Signed-off-by: Bharata B Rao [Added CPU and LMB bits] --- 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 9eb0a94..71e7052 100644 --- a/hw/ppc/spapr.c +++ b/hw/ppc/spapr.c @@ -89,11 +89,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: @@ -1343,6 +1361,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; @@ -1503,6 +1522,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(); @@ -1722,6 +1745,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); @@ -1733,6 +1757,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; @@ -1744,6 +1771,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 }, @@ -1788,11 +1816,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 973193d..b1a0838 100644 --- a/include/hw/ppc/spapr.h +++ b/include/hw/ppc/spapr.h @@ -30,6 +30,9 @@ typedef struct sPAPREnvironment { uint64_t rtc_offset; 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