From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:35488) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1buSjj-0004tO-1S for qemu-devel@nongnu.org; Wed, 12 Oct 2016 19:15:00 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1buSje-0000dX-MJ for qemu-devel@nongnu.org; Wed, 12 Oct 2016 19:14:57 -0400 Received: from mx0a-001b2d01.pphosted.com ([148.163.156.1]:40881) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1buSje-0000cm-Ed for qemu-devel@nongnu.org; Wed, 12 Oct 2016 19:14:54 -0400 Received: from pps.filterd (m0098404.ppops.net [127.0.0.1]) by mx0a-001b2d01.pphosted.com (8.16.0.17/8.16.0.17) with SMTP id u9CNEr7U146186 for ; Wed, 12 Oct 2016 19:14:54 -0400 Received: from e31.co.us.ibm.com (e31.co.us.ibm.com [32.97.110.149]) by mx0a-001b2d01.pphosted.com with ESMTP id 261qhecvw3-1 (version=TLSv1.2 cipher=AES256-SHA bits=256 verify=NOT) for ; Wed, 12 Oct 2016 19:14:53 -0400 Received: from localhost by e31.co.us.ibm.com with IBM ESMTP SMTP Gateway: Authorized Use Only! Violators will be prosecuted for from ; Wed, 12 Oct 2016 17:14:37 -0600 From: Michael Roth Date: Wed, 12 Oct 2016 18:13:55 -0500 In-Reply-To: <1476314039-9520-1-git-send-email-mdroth@linux.vnet.ibm.com> References: <1476314039-9520-1-git-send-email-mdroth@linux.vnet.ibm.com> Message-Id: <1476314039-9520-8-git-send-email-mdroth@linux.vnet.ibm.com> Subject: [Qemu-devel] [PATCH 07/11] spapr: add hotplug interrupt machine options List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: qemu-devel@nongnu.org Cc: qemu-ppc@nongnu.org, bharata@linux.vnet.ibm.com, david@gibson.dropbear.id.au, nfont@linux.vnet.ibm.com, jallen@linux.vnet.ibm.com This adds machine options of the form: -machine pseries,legacy-hotplug-events=true -machine pseries,legacy-hotplug-events=false to denote whether or not we wish to force the use of "legacy" style hotplug events, which are surfaced through EPOW interrupts instead of a dedicated interrupt source, and lack certain features necessary, mainly, for memory unplug support. If false, QEMU will default to "legacy" style unless the guest advertises support for the newer events via ibm,client-architecture-support hcall during early boot. For pseries-2.7 and earlier we default to true, for newer machine types we default to false. Signed-off-by: Michael Roth --- hw/ppc/spapr.c | 31 +++++++++++++++++++++++++++++++ include/hw/ppc/spapr.h | 1 + include/hw/ppc/spapr_ovec.h | 1 + 3 files changed, 33 insertions(+) diff --git a/hw/ppc/spapr.c b/hw/ppc/spapr.c index f8cde92..d80a6fa 100644 --- a/hw/ppc/spapr.c +++ b/hw/ppc/spapr.c @@ -1816,6 +1816,11 @@ static void ppc_spapr_init(MachineState *machine) spapr_ovec_set(spapr->ov5, OV5_FORM1_AFFINITY); + /* use dedicated HP event source if guest supports it */ + if (spapr->use_hotplug_event_source) { + spapr_ovec_set(spapr->ov5, OV5_HP_EVT); + } + /* init CPUs */ if (machine->cpu_model == NULL) { machine->cpu_model = kvm_enabled() ? "host" : smc->tcg_default_cpu; @@ -2172,16 +2177,39 @@ static void spapr_set_kvm_type(Object *obj, const char *value, Error **errp) spapr->kvm_type = g_strdup(value); } +static bool spapr_get_legacy_hotplug_events(Object *obj, Error **errp) +{ + sPAPRMachineState *spapr = SPAPR_MACHINE(obj); + + return !spapr->use_hotplug_event_source; +} + +static void spapr_set_legacy_hotplug_events(Object *obj, bool value, + Error **errp) +{ + sPAPRMachineState *spapr = SPAPR_MACHINE(obj); + + spapr->use_hotplug_event_source = !value; +} + static void spapr_machine_initfn(Object *obj) { sPAPRMachineState *spapr = SPAPR_MACHINE(obj); spapr->htab_fd = -1; + spapr->use_hotplug_event_source = true; object_property_add_str(obj, "kvm-type", spapr_get_kvm_type, spapr_set_kvm_type, NULL); object_property_set_description(obj, "kvm-type", "Specifies the KVM virtualization mode (HV, PR)", NULL); + object_property_add_bool(obj, "legacy-hotplug-events", + spapr_get_legacy_hotplug_events, + spapr_set_legacy_hotplug_events, + NULL); + object_property_set_description(obj, "legacy-hotplug-events", + "Use deprecated EPOW mechanism for hotplug events", + NULL); } static void spapr_machine_finalizefn(Object *obj) @@ -2518,6 +2546,9 @@ DEFINE_SPAPR_MACHINE(2_8, "2.8", true); static void spapr_machine_2_7_instance_options(MachineState *machine) { + sPAPRMachineState *spapr = SPAPR_MACHINE(machine); + + spapr->use_hotplug_event_source = false; } static void spapr_machine_2_7_class_options(MachineClass *mc) diff --git a/include/hw/ppc/spapr.h b/include/hw/ppc/spapr.h index 27a3328..d1a4a14 100644 --- a/include/hw/ppc/spapr.h +++ b/include/hw/ppc/spapr.h @@ -74,6 +74,7 @@ struct sPAPRMachineState { uint32_t check_exception_irq; Notifier epow_notifier; QTAILQ_HEAD(, sPAPREventLogEntry) pending_events; + bool use_hotplug_event_source; /* Migration state */ int htab_save_index; diff --git a/include/hw/ppc/spapr_ovec.h b/include/hw/ppc/spapr_ovec.h index 47fa04c..92167c6 100644 --- a/include/hw/ppc/spapr_ovec.h +++ b/include/hw/ppc/spapr_ovec.h @@ -45,6 +45,7 @@ typedef struct sPAPROptionVector sPAPROptionVector; /* option vector 5 */ #define OV5_DRCONF_MEMORY OV_BIT(2, 2) #define OV5_FORM1_AFFINITY OV_BIT(5, 0) +#define OV5_HP_EVT OV_BIT(6, 5) /* interfaces */ sPAPROptionVector *spapr_ovec_new(void); -- 1.9.1