qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Qemu-devel] [PATCHv2 10/12] pseries: Move /hypervisor node construc


From: Michael Roth
Subject: Re: [Qemu-devel] [PATCHv2 10/12] pseries: Move /hypervisor node construction to fdt_build_fdt()
Date: Sun, 23 Oct 2016 18:26:29 -0500
User-agent: alot/0.3.6

Quoting David Gibson (2016-10-20 21:56:38)
> Currently the /hypervisor device tree node is constructed in
> spapr_create_fdt_skel().  As part of consolidating device tree construction
> to reset time, move it to a function called from spapr_build_fdt().
> 
> Signed-off-by: David Gibson <address@hidden>
> Reviewed-by: Thomas Huth <address@hidden>

Reviewed-by: Michael Roth <address@hidden>

> ---
>  hw/ppc/spapr.c | 49 ++++++++++++++++++++++++++++---------------------
>  1 file changed, 28 insertions(+), 21 deletions(-)
> 
> diff --git a/hw/ppc/spapr.c b/hw/ppc/spapr.c
> index c7ad195..4bd547f 100644
> --- a/hw/ppc/spapr.c
> +++ b/hw/ppc/spapr.c
> @@ -328,27 +328,6 @@ static void *spapr_create_fdt_skel(sPAPRMachineState 
> *spapr)
> 
>      _FDT((fdt_end_node(fdt)));
> 
> -    /* /hypervisor node */
> -    if (kvm_enabled()) {
> -        uint8_t hypercall[16];
> -
> -        /* indicate KVM hypercall interface */
> -        _FDT((fdt_begin_node(fdt, "hypervisor")));
> -        _FDT((fdt_property_string(fdt, "compatible", "linux,kvm")));
> -        if (kvmppc_has_cap_fixup_hcalls()) {
> -            /*
> -             * Older KVM versions with older guest kernels were broken with 
> the
> -             * magic page, don't allow the guest to map it.
> -             */
> -            if (!kvmppc_get_hypercall(first_cpu->env_ptr, hypercall,
> -                                      sizeof(hypercall))) {
> -                _FDT((fdt_property(fdt, "hcall-instructions", hypercall,
> -                                   sizeof(hypercall))));
> -            }
> -        }
> -        _FDT((fdt_end_node(fdt)));
> -    }
> -
>      _FDT((fdt_end_node(fdt))); /* close root node */
>      _FDT((fdt_finish(fdt)));
> 
> @@ -916,6 +895,29 @@ static void spapr_dt_chosen(sPAPRMachineState *spapr, 
> void *fdt)
>      g_free(bootlist);
>  }
> 
> +static void spapr_dt_hypervisor(sPAPRMachineState *spapr, void *fdt)
> +{
> +    /* The /hypervisor node isn't in PAPR - this is a hack to allow PR
> +     * KVM to work under pHyp with some guest co-operation */
> +    int hypervisor;
> +    uint8_t hypercall[16];
> +
> +    _FDT(hypervisor = fdt_add_subnode(fdt, 0, "hypervisor"));
> +    /* indicate KVM hypercall interface */
> +    _FDT(fdt_setprop_string(fdt, hypervisor, "compatible", "linux,kvm"));
> +    if (kvmppc_has_cap_fixup_hcalls()) {
> +        /*
> +         * Older KVM versions with older guest kernels were broken
> +         * with the magic page, don't allow the guest to map it.
> +         */
> +        if (!kvmppc_get_hypercall(first_cpu->env_ptr, hypercall,
> +                                  sizeof(hypercall))) {
> +            _FDT(fdt_setprop(fdt, hypervisor, "hcall-instructions",
> +                             hypercall, sizeof(hypercall)));
> +        }
> +    }
> +}
> +
>  static void *spapr_build_fdt(sPAPRMachineState *spapr,
>                               hwaddr rtas_addr,
>                               hwaddr rtas_size)
> @@ -989,6 +991,11 @@ static void *spapr_build_fdt(sPAPRMachineState *spapr,
>      /* /chosen */
>      spapr_dt_chosen(spapr, fdt);
> 
> +    /* /hypervisor */
> +    if (kvm_enabled()) {
> +        spapr_dt_hypervisor(spapr, fdt);
> +    }
> +
>      /* Build memory reserve map */
>      if (spapr->kernel_size) {
>          _FDT((fdt_add_mem_rsv(fdt, KERNEL_LOAD_ADDR, spapr->kernel_size)));
> -- 
> 2.7.4
> 




reply via email to

[Prev in Thread] Current Thread [Next in Thread]