From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:42739) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1bykdf-0005tK-5h for qemu-devel@nongnu.org; Mon, 24 Oct 2016 15:10:28 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1bykdb-0000nd-30 for qemu-devel@nongnu.org; Mon, 24 Oct 2016 15:10:27 -0400 Received: from mx0b-001b2d01.pphosted.com ([148.163.158.5]:36801 helo=mx0a-001b2d01.pphosted.com) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1bykda-0000mu-T5 for qemu-devel@nongnu.org; Mon, 24 Oct 2016 15:10:23 -0400 Received: from pps.filterd (m0098414.ppops.net [127.0.0.1]) by mx0b-001b2d01.pphosted.com (8.16.0.17/8.16.0.17) with SMTP id u9OJ9N4V025463 for ; Mon, 24 Oct 2016 15:10:22 -0400 Received: from e34.co.us.ibm.com (e34.co.us.ibm.com [32.97.110.152]) by mx0b-001b2d01.pphosted.com with ESMTP id 269j1rdn3y-1 (version=TLSv1.2 cipher=AES256-SHA bits=256 verify=NOT) for ; Mon, 24 Oct 2016 15:10:22 -0400 Received: from localhost by e34.co.us.ibm.com with IBM ESMTP SMTP Gateway: Authorized Use Only! Violators will be prosecuted for from ; Mon, 24 Oct 2016 13:10:21 -0600 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable From: Michael Roth In-Reply-To: <1477285483-10766-2-git-send-email-david@gibson.dropbear.id.au> References: <1477285483-10766-1-git-send-email-david@gibson.dropbear.id.au> <1477285483-10766-2-git-send-email-david@gibson.dropbear.id.au> Date: Mon, 24 Oct 2016 14:03:18 -0500 Message-Id: <20161024190318.17113.836@loki> Subject: Re: [Qemu-devel] [PATCHv3 01/12] pseries: Split device tree construction from device tree load List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: David Gibson , aik@ozlabs.ru, groug@kaod.org Cc: agraf@suse.de, lvivier@redhat.com, thuth@redhat.com, qemu-ppc@nongnu.org, qemu-devel@nongnu.org Quoting David Gibson (2016-10-24 00:04:32) > spapr_finalize_fdt() both finishes building the device tree for the guest > and loads it into guest memory. For future cleanups, it's going to be > more convenient to do these two things separately. The loading portion is > pretty trivial, so we move it inline into the caller, ppc_spapr_reset(). > = > We also rename spapr_finalize_fdt(), because the current name is going to > become inaccurate. > = > Signed-off-by: David Gibson Reviewed-by: Michael Roth > --- > hw/ppc/spapr.c | 42 +++++++++++++++++++++++------------------- > 1 file changed, 23 insertions(+), 19 deletions(-) > = > diff --git a/hw/ppc/spapr.c b/hw/ppc/spapr.c > index ddb7438..0864411 100644 > --- a/hw/ppc/spapr.c > +++ b/hw/ppc/spapr.c > @@ -900,10 +900,9 @@ int spapr_h_cas_compose_response(sPAPRMachineState *= spapr, > return 0; > } > = > -static void spapr_finalize_fdt(sPAPRMachineState *spapr, > - hwaddr fdt_addr, > - hwaddr rtas_addr, > - hwaddr rtas_size) > +static void *spapr_build_fdt(sPAPRMachineState *spapr, > + hwaddr rtas_addr, > + hwaddr rtas_size) > { > MachineState *machine =3D MACHINE(qdev_get_machine()); > MachineClass *mc =3D MACHINE_GET_CLASS(machine); > @@ -999,19 +998,8 @@ static void spapr_finalize_fdt(sPAPRMachineState *sp= apr, > } > } > = > - _FDT((fdt_pack(fdt))); > - > - if (fdt_totalsize(fdt) > FDT_MAX_SIZE) { > - error_report("FDT too big ! 0x%x bytes (max is 0x%x)", > - fdt_totalsize(fdt), FDT_MAX_SIZE); > - exit(1); > - } > - > - qemu_fdt_dumpdtb(fdt, fdt_totalsize(fdt)); > - cpu_physical_memory_write(fdt_addr, fdt, fdt_totalsize(fdt)); > - > g_free(bootlist); > - g_free(fdt); > + return fdt; > } > = > static uint64_t translate_kernel_address(void *opaque, uint64_t addr) > @@ -1147,6 +1135,8 @@ static void ppc_spapr_reset(void) > sPAPRMachineState *spapr =3D SPAPR_MACHINE(machine); > PowerPCCPU *first_ppc_cpu; > uint32_t rtas_limit; > + void *fdt; > + int rc; > = > /* Check for unknown sysbus devices */ > foreach_dynamic_sysbus_device(find_unknown_sysbus_device, NULL); > @@ -1173,14 +1163,28 @@ static void ppc_spapr_reset(void) > spapr->rtas_addr =3D rtas_limit - RTAS_MAX_SIZE; > spapr->fdt_addr =3D spapr->rtas_addr - FDT_MAX_SIZE; > = > - /* Load the fdt */ > - spapr_finalize_fdt(spapr, spapr->fdt_addr, spapr->rtas_addr, > - spapr->rtas_size); > + fdt =3D spapr_build_fdt(spapr, spapr->rtas_addr, spapr->rtas_size); > = > /* Copy RTAS over */ > cpu_physical_memory_write(spapr->rtas_addr, spapr->rtas_blob, > spapr->rtas_size); > = > + rc =3D fdt_pack(fdt); > + > + /* Should only fail if we've built a corrupted tree */ > + assert(rc =3D=3D 0); > + > + if (fdt_totalsize(fdt) > FDT_MAX_SIZE) { > + error_report("FDT too big ! 0x%x bytes (max is 0x%x)", > + fdt_totalsize(fdt), FDT_MAX_SIZE); > + exit(1); > + } > + > + /* Load the fdt */ > + qemu_fdt_dumpdtb(fdt, fdt_totalsize(fdt)); > + cpu_physical_memory_write(spapr->fdt_addr, fdt, fdt_totalsize(fdt)); > + g_free(fdt); > + > /* Set up the entry state */ > first_ppc_cpu =3D POWERPC_CPU(first_cpu); > first_ppc_cpu->env.gpr[3] =3D spapr->fdt_addr; > -- = > 2.7.4 >=20