From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:43641) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1bv7bJ-0001eU-MJ for qemu-devel@nongnu.org; Fri, 14 Oct 2016 14:53:05 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1bv7bE-0001o8-Nd for qemu-devel@nongnu.org; Fri, 14 Oct 2016 14:53:00 -0400 Received: from mx0a-001b2d01.pphosted.com ([148.163.156.1]:60382) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1bv7bE-0001np-Eq for qemu-devel@nongnu.org; Fri, 14 Oct 2016 14:52:56 -0400 Received: from pps.filterd (m0098399.ppops.net [127.0.0.1]) by mx0a-001b2d01.pphosted.com (8.16.0.17/8.16.0.17) with SMTP id u9EInR9n106329 for ; Fri, 14 Oct 2016 14:52:55 -0400 Received: from e35.co.us.ibm.com (e35.co.us.ibm.com [32.97.110.153]) by mx0a-001b2d01.pphosted.com with ESMTP id 2632jywqbj-1 (version=TLSv1.2 cipher=AES256-SHA bits=256 verify=NOT) for ; Fri, 14 Oct 2016 14:52:55 -0400 Received: from localhost by e35.co.us.ibm.com with IBM ESMTP SMTP Gateway: Authorized Use Only! Violators will be prosecuted for from ; Fri, 14 Oct 2016 12:52:53 -0600 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable From: Michael Roth In-Reply-To: <20161014045937.GK28562@umbus> References: <1476314039-9520-1-git-send-email-mdroth@linux.vnet.ibm.com> <1476314039-9520-10-git-send-email-mdroth@linux.vnet.ibm.com> <20161014045937.GK28562@umbus> Date: Fri, 14 Oct 2016 13:52:05 -0500 Message-Id: <20161014185205.29726.69095@loki> Subject: Re: [Qemu-devel] [PATCH 09/11] spapr: Add DRC count indexed hotplug identifier type List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: David Gibson Cc: qemu-devel@nongnu.org, qemu-ppc@nongnu.org, bharata@linux.vnet.ibm.com, nfont@linux.vnet.ibm.com, jallen@linux.vnet.ibm.com Quoting David Gibson (2016-10-13 23:59:37) > On Wed, Oct 12, 2016 at 06:13:57PM -0500, Michael Roth wrote: > > From: Bharata B Rao > > = > > Add support for DRC count indexed hotplug ID type which is primarily > > needed for memory hot unplug. This type allows for specifying the > > number of DRs that should be plugged/unplugged starting from a given > > DRC index. > > = > > Signed-off-by: Bharata B Rao > > * updated rtas_event_log_v6_hp to reflect count/index field ordering > > used in PAPR hotplug ACR > > Signed-off-by: Michael Roth > > --- > > hw/ppc/spapr_events.c | 74 ++++++++++++++++++++++++++++++++++++++++--= -------- > > include/hw/ppc/spapr.h | 4 +++ > > 2 files changed, 63 insertions(+), 15 deletions(-) > > = > > diff --git a/hw/ppc/spapr_events.c b/hw/ppc/spapr_events.c > > index f8bbec6..eeca800 100644 > > --- a/hw/ppc/spapr_events.c > > +++ b/hw/ppc/spapr_events.c > > @@ -175,6 +175,16 @@ struct epow_log_full { > > struct rtas_event_log_v6_epow epow; > > } QEMU_PACKED; > > = > > +union drc_identifier { > > + uint32_t index; > > + uint32_t count; > > + struct { > > + uint32_t count; > > + uint32_t index; > > + } count_indexed; > > + char name[1]; > > +} QEMU_PACKED; > > + > > struct rtas_event_log_v6_hp { > > #define RTAS_LOG_V6_SECTION_ID_HOTPLUG 0x4850 /* HP */ > > struct rtas_event_log_v6_section_header hdr; > > @@ -191,12 +201,9 @@ struct rtas_event_log_v6_hp { > > #define RTAS_LOG_V6_HP_ID_DRC_NAME 1 > > #define RTAS_LOG_V6_HP_ID_DRC_INDEX 2 > > #define RTAS_LOG_V6_HP_ID_DRC_COUNT 3 > > +#define RTAS_LOG_V6_HP_ID_DRC_COUNT_INDEXED 4 > > uint8_t reserved; > > - union { > > - uint32_t index; > > - uint32_t count; > > - char name[1]; > > - } drc; > > + union drc_identifier drc_id; > > } QEMU_PACKED; > > = > > struct hp_log_full { > > @@ -457,7 +464,7 @@ static void spapr_hotplug_set_signalled(uint32_t dr= c_index) > > = > > static void spapr_hotplug_req_event(uint8_t hp_id, uint8_t hp_action, > > sPAPRDRConnectorType drc_type, > > - uint32_t drc) > > + union drc_identifier *drc_id) > > { > > sPAPRMachineState *spapr =3D SPAPR_MACHINE(qdev_get_machine()); > > struct hp_log_full *new_hp; > > @@ -502,7 +509,7 @@ static void spapr_hotplug_req_event(uint8_t hp_id, = uint8_t hp_action, > > case SPAPR_DR_CONNECTOR_TYPE_PCI: > > hp->hotplug_type =3D RTAS_LOG_V6_HP_TYPE_PCI; > > if (hp->hotplug_action =3D=3D RTAS_LOG_V6_HP_ACTION_ADD) { > > - spapr_hotplug_set_signalled(drc); > > + spapr_hotplug_set_signalled(drc_id->index); > > } > > break; > > case SPAPR_DR_CONNECTOR_TYPE_LMB: > > @@ -520,9 +527,16 @@ static void spapr_hotplug_req_event(uint8_t hp_id,= uint8_t hp_action, > > } > > = > > if (hp_id =3D=3D RTAS_LOG_V6_HP_ID_DRC_COUNT) { > > - hp->drc.count =3D cpu_to_be32(drc); > > + hp->drc_id.count =3D cpu_to_be32(drc_id->count); > > } else if (hp_id =3D=3D RTAS_LOG_V6_HP_ID_DRC_INDEX) { > > - hp->drc.index =3D cpu_to_be32(drc); > > + hp->drc_id.index =3D cpu_to_be32(drc_id->index); > > + } else if (hp_id =3D=3D RTAS_LOG_V6_HP_ID_DRC_COUNT_INDEXED) { > > + /* we should not be using count_indexed value unless the guest > > + * supports dedicated hotplug event source > > + */ > > + g_assert(spapr_ovec_test(spapr->ov5_cas, OV5_HP_EVT)); > > + hp->drc_id.count_indexed.count =3D cpu_to_be32(drc_id->count_i= ndexed.count); > > + hp->drc_id.count_indexed.index =3D cpu_to_be32(drc_id->count_i= ndexed.index); > > } > > = > > rtas_event_log_queue(RTAS_LOG_TYPE_HOTPLUG, new_hp, true); > > @@ -535,34 +549,64 @@ void spapr_hotplug_req_add_by_index(sPAPRDRConnec= tor *drc) > > { > > sPAPRDRConnectorClass *drck =3D SPAPR_DR_CONNECTOR_GET_CLASS(drc); > > sPAPRDRConnectorType drc_type =3D drck->get_type(drc); > > - uint32_t index =3D drck->get_index(drc); > > + union drc_identifier drc_id; > > = > > + drc_id.index =3D drck->get_index(drc); > > spapr_hotplug_req_event(RTAS_LOG_V6_HP_ID_DRC_INDEX, > > - RTAS_LOG_V6_HP_ACTION_ADD, drc_type, index= ); > > + RTAS_LOG_V6_HP_ACTION_ADD, drc_type, &drc_= id); > > } > > = > > void spapr_hotplug_req_remove_by_index(sPAPRDRConnector *drc) > > { > > sPAPRDRConnectorClass *drck =3D SPAPR_DR_CONNECTOR_GET_CLASS(drc); > > sPAPRDRConnectorType drc_type =3D drck->get_type(drc); > > - uint32_t index =3D drck->get_index(drc); > > + union drc_identifier drc_id; > > = > > + drc_id.index =3D drck->get_index(drc); > > spapr_hotplug_req_event(RTAS_LOG_V6_HP_ID_DRC_INDEX, > > - RTAS_LOG_V6_HP_ACTION_REMOVE, drc_type, in= dex); > > + RTAS_LOG_V6_HP_ACTION_REMOVE, drc_type, &d= rc_id); > > } > > = > > void spapr_hotplug_req_add_by_count(sPAPRDRConnectorType drc_type, > > uint32_t count) > > { > > + union drc_identifier drc_id; > > + > > + drc_id.count =3D count; > > spapr_hotplug_req_event(RTAS_LOG_V6_HP_ID_DRC_COUNT, > > - RTAS_LOG_V6_HP_ACTION_ADD, drc_type, count= ); > > + RTAS_LOG_V6_HP_ACTION_ADD, drc_type, &drc_= id); > > } > > = > > void spapr_hotplug_req_remove_by_count(sPAPRDRConnectorType drc_type, > > uint32_t count) > > { > > + union drc_identifier drc_id; > > + > > + drc_id.count =3D count; > > spapr_hotplug_req_event(RTAS_LOG_V6_HP_ID_DRC_COUNT, > > - RTAS_LOG_V6_HP_ACTION_REMOVE, drc_type, co= unt); > > + RTAS_LOG_V6_HP_ACTION_REMOVE, drc_type, &d= rc_id); > > +} > > + > > +void spapr_hotplug_req_add_by_count_indexed(sPAPRDRConnectorType drc_t= ype, > > + uint32_t count, uint32_t i= ndex) > > +{ > > + union drc_identifier drc_id; > > + > > + drc_id.count_indexed.count =3D count; > > + drc_id.count_indexed.index =3D index; > > + spapr_hotplug_req_event(RTAS_LOG_V6_HP_ID_DRC_COUNT_INDEXED, > > + RTAS_LOG_V6_HP_ACTION_ADD, drc_type, &drc_= id); > > +} > > + > > +void spapr_hotplug_req_remove_by_count_indexed(sPAPRDRConnectorType dr= c_type, > > + uint32_t count, uint32_= t index) > > +{ > > + union drc_identifier drc_id; > > + > > + drc_id.count_indexed.count =3D count; > > + drc_id.count_indexed.index =3D index; > > + spapr_hotplug_req_event(RTAS_LOG_V6_HP_ID_DRC_COUNT_INDEXED, > > + RTAS_LOG_V6_HP_ACTION_REMOVE, drc_type, &d= rc_id); > > } > > = > > static void check_exception(PowerPCCPU *cpu, sPAPRMachineState *spapr, > > diff --git a/include/hw/ppc/spapr.h b/include/hw/ppc/spapr.h > > index 2295ac6..11a2597 100644 > > --- a/include/hw/ppc/spapr.h > > +++ b/include/hw/ppc/spapr.h > > @@ -602,6 +602,10 @@ void spapr_hotplug_req_add_by_count(sPAPRDRConnect= orType drc_type, > > uint32_t count); > > void spapr_hotplug_req_remove_by_count(sPAPRDRConnectorType drc_type, > > uint32_t count); > > +void spapr_hotplug_req_add_by_count_indexed(sPAPRDRConnectorType drc_t= ype, > > + uint32_t count, uint32_t i= ndex); > > +void spapr_hotplug_req_remove_by_count_indexed(sPAPRDRConnectorType dr= c_type, > > + uint32_t count, uint32_= t index); > > void spapr_cpu_init(sPAPRMachineState *spapr, PowerPCCPU *cpu, Error *= *errp); > > void *spapr_populate_hotplug_cpu_dt(CPUState *cs, int *fdt_offset, > > sPAPRMachineState *spapr); Was this a mis-fire? > = > -- = > David Gibson | I'll have my music baroque, and my code > david AT gibson.dropbear.id.au | minimalist, thank you. NOT _the_ _othe= r_ > | _way_ _around_! > http://www.ozlabs.org/~dgibson