[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Qemu-ppc] [PATCHv3 01/12] pseries: Split device tree construction f
From: |
Alexey Kardashevskiy |
Subject: |
Re: [Qemu-ppc] [PATCHv3 01/12] pseries: Split device tree construction from device tree load |
Date: |
Tue, 25 Oct 2016 11:57:08 +1100 |
User-agent: |
Mozilla/5.0 (X11; Linux x86_64; rv:45.0) Gecko/20100101 Thunderbird/45.2.0 |
On 24/10/16 16:04, 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>
I did reply with "rb" v2 of this with a comment, somehow it was lost.
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().
> ---
> 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;
>
--
Alexey
- [Qemu-ppc] [PATCHv3 00/12] pseries: Consolidate guest device tree construction, David Gibson, 2016/10/24
- [Qemu-ppc] [PATCHv3 01/12] pseries: Split device tree construction from device tree load, David Gibson, 2016/10/24
- [Qemu-ppc] [PATCHv3 05/12] pseries: Consolidate RTAS loading, David Gibson, 2016/10/24
- [Qemu-ppc] [PATCHv3 12/12] pseries: Remove spapr_create_fdt_skel(), David Gibson, 2016/10/24
- [Qemu-ppc] [PATCHv3 04/12] pseries: Move adding of fdt reserve map entries, David Gibson, 2016/10/24
- [Qemu-ppc] [PATCHv3 03/12] pseries: Make spapr_create_fdt_skel() get information from machine state, David Gibson, 2016/10/24
- [Qemu-ppc] [PATCHv3 09/12] pseries: Move /event-sources construction to spapr_build_fdt(), David Gibson, 2016/10/24
- [Qemu-ppc] [PATCHv3 10/12] pseries: Move /hypervisor node construction to fdt_build_fdt(), David Gibson, 2016/10/24
- [Qemu-ppc] [PATCHv3 08/12] pseries: Consolidate construction of /rtas device tree node, David Gibson, 2016/10/24
- [Qemu-ppc] [PATCHv3 02/12] pseries: Remove rtas_addr and fdt_addr fields from machinestate, David Gibson, 2016/10/24
- [Qemu-ppc] [PATCHv3 11/12] pseries: Consolidate construction of /vdevice device tree node, David Gibson, 2016/10/24