[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Qemu-ppc] [PATCHv2 01/12] pseries: Split device tree construction f
From: |
David Gibson |
Subject: |
Re: [Qemu-ppc] [PATCHv2 01/12] pseries: Split device tree construction from device tree load |
Date: |
Tue, 25 Oct 2016 11:51:52 +1100 |
User-agent: |
Mutt/1.7.1 (2016-10-04) |
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 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 <address@hidden>
>
>
>
> Reviewed-by: Alexey Kardashevskiy <address@hidden>
>
> with a small nit, grep finds "spapr_finalize_fdt" in a comment:
>
> hw/ppc/spapr_cpu_core.c:187: * coldplugged CPUs DT entries are setup in
> spapr_finalize_fdt().
Thanks, will fix.
>
>
>
> > ---
> > 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 = MACHINE(qdev_get_machine());
> > MachineClass *mc = MACHINE_GET_CLASS(machine);
> > @@ -999,19 +998,8 @@ static void spapr_finalize_fdt(sPAPRMachineState
> > *spapr,
> > }
> > }
> >
> > - _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 = 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 = rtas_limit - RTAS_MAX_SIZE;
> > spapr->fdt_addr = spapr->rtas_addr - FDT_MAX_SIZE;
> >
> > - /* Load the fdt */
> > - spapr_finalize_fdt(spapr, spapr->fdt_addr, spapr->rtas_addr,
> > - spapr->rtas_size);
> > + fdt = 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 = fdt_pack(fdt);
> > +
> > + /* Should only fail if we've built a corrupted tree */
> > + assert(rc == 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 = POWERPC_CPU(first_cpu);
> > first_ppc_cpu->env.gpr[3] = spapr->fdt_addr;
> >
>
>
--
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
signature.asc
Description: PGP signature
- [Qemu-ppc] [PATCHv2 00/12] pseries: Consolidate guest device tree construction, David Gibson, 2016/10/20
- [Qemu-ppc] [PATCHv2 04/12] pseries: Move adding of fdt reserve map entries, David Gibson, 2016/10/20
- [Qemu-ppc] [PATCHv2 02/12] pseries: Remove rtas_addr and fdt_addr fields from machinestate, David Gibson, 2016/10/20
- [Qemu-ppc] [PATCHv2 09/12] pseries: Move /event-sources construction to spapr_build_fdt(), David Gibson, 2016/10/20
- [Qemu-ppc] [PATCHv2 05/12] pseries: Consolidate RTAS loading, David Gibson, 2016/10/20
- [Qemu-ppc] [PATCHv2 01/12] pseries: Split device tree construction from device tree load, David Gibson, 2016/10/20
- [Qemu-ppc] [PATCHv2 03/12] pseries: Make spapr_create_fdt_skel() get information from machine state, David Gibson, 2016/10/20
- [Qemu-ppc] [PATCHv2 11/12] pseries: Consolidate construction of /vdevice device tree node, David Gibson, 2016/10/20
- [Qemu-ppc] [PATCHv2 08/12] pseries: Consolidate construction of /rtas device tree node, David Gibson, 2016/10/20
- [Qemu-ppc] [PATCHv2 06/12] pseries: Move construction of /interrupt-controller fdt node, David Gibson, 2016/10/20
- [Qemu-ppc] [PATCHv2 12/12] pseries: Remove spapr_create_fdt_skel(), David Gibson, 2016/10/20