From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:57641) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1byT1p-0007ot-4l for qemu-devel@nongnu.org; Sun, 23 Oct 2016 20:22:19 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1byT1l-0005Im-Pr for qemu-devel@nongnu.org; Sun, 23 Oct 2016 20:22:13 -0400 Received: from mx0a-001b2d01.pphosted.com ([148.163.156.1]:33952) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1byT1l-0005HZ-GH for qemu-devel@nongnu.org; Sun, 23 Oct 2016 20:22:09 -0400 Received: from pps.filterd (m0098394.ppops.net [127.0.0.1]) by mx0a-001b2d01.pphosted.com (8.16.0.17/8.16.0.17) with SMTP id u9O0JR4a120371 for ; Sun, 23 Oct 2016 20:22:08 -0400 Received: from e32.co.us.ibm.com (e32.co.us.ibm.com [32.97.110.150]) by mx0a-001b2d01.pphosted.com with ESMTP id 268yyu61cw-1 (version=TLSv1.2 cipher=AES256-SHA bits=256 verify=NOT) for ; Sun, 23 Oct 2016 20:22:08 -0400 Received: from localhost by e32.co.us.ibm.com with IBM ESMTP SMTP Gateway: Authorized Use Only! Violators will be prosecuted for from ; Sun, 23 Oct 2016 18:22:07 -0600 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable From: Michael Roth In-Reply-To: <1477018600-6881-11-git-send-email-david@gibson.dropbear.id.au> References: <1477018600-6881-1-git-send-email-david@gibson.dropbear.id.au> <1477018600-6881-11-git-send-email-david@gibson.dropbear.id.au> Date: Sun, 23 Oct 2016 18:26:29 -0500 Message-Id: <20161023232629.17113.26653@loki> Subject: Re: [Qemu-devel] [PATCHv2 10/12] pseries: Move /hypervisor node construction to fdt_build_fdt() 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-20 21:56:38) > Currently the /hypervisor device tree node is constructed in > spapr_create_fdt_skel(). As part of consolidating device tree constructi= on > to reset time, move it to a function called from spapr_build_fdt(). > = > Signed-off-by: David Gibson > Reviewed-by: Thomas Huth Reviewed-by: Michael Roth > --- > 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 w= ith 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 =3D 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 *spap= r, > /* /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 >=20