From patchwork Mon Jan 11 04:37:33 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: David Gibson X-Patchwork-Id: 565600 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Received: from lists.gnu.org (lists.gnu.org [IPv6:2001:4830:134:3::11]) (using TLSv1 with cipher AES256-SHA (256/256 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 5BFF01402D9 for ; Mon, 11 Jan 2016 15:37:48 +1100 (AEDT) Received: from localhost ([::1]:51295 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1aIUEk-0000rU-1G for incoming@patchwork.ozlabs.org; Sun, 10 Jan 2016 23:37:46 -0500 Received: from eggs.gnu.org ([2001:4830:134:3::10]:52262) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1aIUE2-0007pw-Js for qemu-devel@nongnu.org; Sun, 10 Jan 2016 23:37:04 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1aIUDz-0004SI-Pn for qemu-devel@nongnu.org; Sun, 10 Jan 2016 23:37:02 -0500 Received: from ozlabs.org ([103.22.144.67]:44656) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1aIUDz-0004QX-Da; Sun, 10 Jan 2016 23:36:59 -0500 Received: by ozlabs.org (Postfix, from userid 1007) id B9B00140B9B; Mon, 11 Jan 2016 15:36:50 +1100 (AEDT) From: David Gibson To: peter.maydell@linaro.org, mdroth@linux.vnet.ibm.com, aik@ozlabs.ru Date: Mon, 11 Jan 2016 15:37:33 +1100 Message-Id: <1452487058-17182-12-git-send-email-david@gibson.dropbear.id.au> X-Mailer: git-send-email 2.5.0 In-Reply-To: <1452487058-17182-1-git-send-email-david@gibson.dropbear.id.au> References: <1452487058-17182-1-git-send-email-david@gibson.dropbear.id.au> X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] X-Received-From: 103.22.144.67 Cc: lvivier@redhat.com, thuth@redhat.com, agraf@suse.de, qemu-devel@nongnu.org, qemu-ppc@nongnu.org, David Gibson Subject: [Qemu-devel] [PULL 11/16] pseries: Restructure class_options functions X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org Sender: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org Currently each of the *_class_options() functions for the pseries-2.1 .. pseries-2.5 machine types are standalone. This will become harder to maintain as new versions are added. This patch restructures them similarly to x86 where each function calls the one from the next version, then overrides anything necessary for compatibility with the specific version and older. The default behaviour - that for the most recent machine are set up in the base class initializer spapr_machine_class_init(). Previously it had some things set up to default to older behaviour with the more recent machines overriding it. Signed-off-by: David Gibson Reviewed-by: Alexey Kardashevskiy --- hw/ppc/spapr.c | 21 +++++++++++++++++---- 1 file changed, 17 insertions(+), 4 deletions(-) diff --git a/hw/ppc/spapr.c b/hw/ppc/spapr.c index 4f645f3..5af3d13 100644 --- a/hw/ppc/spapr.c +++ b/hw/ppc/spapr.c @@ -2266,6 +2266,12 @@ static void spapr_machine_class_init(ObjectClass *oc, void *data) HotplugHandlerClass *hc = HOTPLUG_HANDLER_CLASS(oc); mc->desc = "pSeries Logical Partition (PAPR compliant)"; + + /* + * We set up the default / latest behaviour here. The class_init + * functions for the specific versioned machine types can override + * these details for backwards compatibility + */ mc->init = ppc_spapr_init; mc->reset = ppc_spapr_reset; mc->block_default_type = IF_SCSI; @@ -2281,7 +2287,7 @@ static void spapr_machine_class_init(ObjectClass *oc, void *data) hc->unplug = spapr_machine_device_unplug; mc->cpu_index_to_socket_id = spapr_cpu_index_to_socket_id; - smc->dr_lmb_enabled = false; + smc->dr_lmb_enabled = true; fwc->get_dev_path = spapr_get_fw_dev_path; nc->nmi_monitor_handler = spapr_nmi; } @@ -2335,11 +2341,9 @@ static void spapr_machine_2_5_instance_options(MachineState *machine) static void spapr_machine_2_5_class_options(MachineClass *mc) { - sPAPRMachineClass *smc = SPAPR_MACHINE_CLASS(mc); - + /* Defaults for the latest behaviour inherited from the base class */ mc->alias = "pseries"; mc->is_default = 1; - smc->dr_lmb_enabled = true; } DEFINE_SPAPR_MACHINE(2_5, "2.5"); @@ -2357,6 +2361,12 @@ static void spapr_machine_2_4_instance_options(MachineState *machine) static void spapr_machine_2_4_class_options(MachineClass *mc) { + sPAPRMachineClass *smc = SPAPR_MACHINE_CLASS(mc); + + spapr_machine_2_5_class_options(mc); + mc->alias = NULL; + mc->is_default = 0; + smc->dr_lmb_enabled = false; SET_MACHINE_COMPAT(mc, SPAPR_COMPAT_2_4); } @@ -2383,6 +2393,7 @@ static void spapr_machine_2_3_instance_options(MachineState *machine) static void spapr_machine_2_3_class_options(MachineClass *mc) { + spapr_machine_2_4_class_options(mc); SET_MACHINE_COMPAT(mc, SPAPR_COMPAT_2_3); } DEFINE_SPAPR_MACHINE(2_3, "2.3"); @@ -2407,6 +2418,7 @@ static void spapr_machine_2_2_instance_options(MachineState *machine) static void spapr_machine_2_2_class_options(MachineClass *mc) { + spapr_machine_2_3_class_options(mc); SET_MACHINE_COMPAT(mc, SPAPR_COMPAT_2_2); } DEFINE_SPAPR_MACHINE(2_2, "2.2"); @@ -2425,6 +2437,7 @@ static void spapr_machine_2_1_instance_options(MachineState *machine) static void spapr_machine_2_1_class_options(MachineClass *mc) { + spapr_machine_2_2_class_options(mc); SET_MACHINE_COMPAT(mc, SPAPR_COMPAT_2_1); } DEFINE_SPAPR_MACHINE(2_1, "2.1");