From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:48945) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1byroj-0002gI-4u for qemu-devel@nongnu.org; Mon, 24 Oct 2016 22:50:22 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1byrog-0006lj-2A for qemu-devel@nongnu.org; Mon, 24 Oct 2016 22:50:21 -0400 Date: Tue, 25 Oct 2016 11:51:52 +1100 From: David Gibson Message-ID: <20161025005152.GI11052@umbus.fritz.box> References: <1477018600-6881-1-git-send-email-david@gibson.dropbear.id.au> <1477018600-6881-2-git-send-email-david@gibson.dropbear.id.au> MIME-Version: 1.0 Content-Type: multipart/signed; micalg=pgp-sha256; protocol="application/pgp-signature"; boundary="byLs0wutDcxFdwtm" Content-Disposition: inline In-Reply-To: Subject: Re: [Qemu-devel] [PATCHv2 01/12] pseries: Split device tree construction from device tree load List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Alexey Kardashevskiy Cc: mdroth@linux.vnet.ibm.com, groug@kaod.org, agraf@suse.de, lvivier@redhat.com, thuth@redhat.com, qemu-ppc@nongnu.org, qemu-devel@nongnu.org --byLs0wutDcxFdwtm Content-Type: text/plain; charset=us-ascii Content-Disposition: inline Content-Transfer-Encoding: quoted-printable On Mon, Oct 24, 2016 at 04:17:05PM +1100, Alexey Kardashevskiy wrote: > On 21/10/16 13:56, David Gibson wrote: > > spapr_finalize_fdt() both finishes building the device tree for the gue= st > > 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(). > >=20 > > We also rename spapr_finalize_fdt(), because the current name is going = to > > become inaccurate. > >=20 > > Signed-off-by: David Gibson >=20 >=20 >=20 > Reviewed-by: Alexey Kardashevskiy >=20 > with a small nit, grep finds "spapr_finalize_fdt" in a comment: >=20 > hw/ppc/spapr_cpu_core.c:187: * coldplugged CPUs DT entries are setup = in > spapr_finalize_fdt(). Thanks, will fix. >=20 >=20 >=20 > > --- > > hw/ppc/spapr.c | 42 +++++++++++++++++++++++------------------- > > 1 file changed, 23 insertions(+), 19 deletions(-) > >=20 > > 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; > > } > > =20 > > -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 *= spapr, > > } > > } > > =20 > > - _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; > > } > > =20 > > 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; > > =20 > > /* 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; > > =20 > > - /* 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); > > =20 > > /* Copy RTAS over */ > > cpu_physical_memory_write(spapr->rtas_addr, spapr->rtas_blob, > > spapr->rtas_size); > > =20 > > + 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; > >=20 >=20 >=20 --=20 David Gibson | I'll have my music baroque, and my code david AT gibson.dropbear.id.au | minimalist, thank you. NOT _the_ _other_ | _way_ _around_! http://www.ozlabs.org/~dgibson --byLs0wutDcxFdwtm Content-Type: application/pgp-signature; name="signature.asc" -----BEGIN PGP SIGNATURE----- Version: GnuPG v2 iQIcBAEBCAAGBQJYDqylAAoJEGw4ysog2bOSvscP/3szV/387fa3jEwU4/A1TZ8m HlYhRYmTckU5F/pr50fk+xZ8nOSurp/reMTr+7X9FPnyypv/HJNbYxNTOxHwMA6I aBSCpRrRDlsZKXyUtjv6Phn934VkH1uNh8AZJGXj1qRZJVxgDB1S7NdT42YATjB+ ZXvRDZ0GMD/ZLfnbDL/gyeYO/CJYfTDuWyS+6H/KE9wCH8rd1oSNmlLYNfFSo/ld XyIi6ojueR0yW3WfUOxHFXx+Kn/j5qH1uyGj1aRoEDcJOKHn8VRIlLh3sJAFlluw aU6oNwBkV2lCCE+kogWkOD5QqPjTn5nINkwMD4pYkCnOk7b9+f84P0pGWxCWpkZx COgeJkIVH5DXJHgM10hRvIuCLwunN667P6q/ejDM9pfpGWv2iX55mCWSm2oX39Wa WQBLkbhCJVvaCnthebOxVk6KcYUbSAOyJO2/+2wrdzZfoeWgtTNN4ftJmCuMDPsh F6W0fLm+mJWYX9vfrQibTdO3lr1wORcLQPliPelJqCXO0vWpuGMs3sN8To+PcFjV E92BdnEyX5hvY1vMnSGSX1q6pOrhsgCH1rlHn6WyEdu253SYAhTWKlq3gI9iNJly dBXd6yjnuFF8D1/4i7LtiaZfyXI/ojFWX0PEyyhEsSMrWQgV9gDRMbcIvPFL8ccq JHWHTjVuV6Sa4r+Lb74g =f9Av -----END PGP SIGNATURE----- --byLs0wutDcxFdwtm--