From: Wei Liu <wei.liu2@citrix.com>
To: Boris Ostrovsky <boris.ostrovsky@oracle.com>
Cc: wei.liu2@citrix.com, andrew.cooper3@citrix.com,
ian.jackson@eu.citrix.com, xen-devel@lists.xen.org,
julien.grall@arm.com, jbeulich@suse.com,
zhaoshenglong@huawei.com, roger.pau@citrix.com
Subject: Re: [PATCH v2 22/23] libxl/acpi: Build ACPI tables for HVMlite guests
Date: Thu, 11 Aug 2016 17:36:21 +0100 [thread overview]
Message-ID: <20160811163621.GW20641@citrix.com> (raw)
In-Reply-To: <1470344811-14225-23-git-send-email-boris.ostrovsky@oracle.com>
On Thu, Aug 04, 2016 at 05:06:50PM -0400, Boris Ostrovsky wrote:
[...]
>
> distclean: clean
> $(RM) -f xenlight.pc.in xlutil.pc.in
> diff --git a/tools/libxl/libxl_arch.h b/tools/libxl/libxl_arch.h
> index 34a853c..7c6536b 100644
> --- a/tools/libxl/libxl_arch.h
> +++ b/tools/libxl/libxl_arch.h
> @@ -62,4 +62,7 @@ int libxl__arch_domain_construct_memmap(libxl__gc *gc,
> uint32_t domid,
> struct xc_dom_image *dom);
>
> +int libxl__dom_load_acpi(libxl__gc *gc,
> + libxl_domain_build_info *info,
> + struct xc_dom_image *dom);
> #endif
> diff --git a/tools/libxl/libxl_dom.c b/tools/libxl/libxl_dom.c
> index 3a1daae..7dbf614 100644
> --- a/tools/libxl/libxl_dom.c
> +++ b/tools/libxl/libxl_dom.c
> @@ -657,6 +657,7 @@ static int libxl__build_dom(libxl__gc *gc, uint32_t domid,
> LOGE(ERROR, "xc_dom_build_image failed");
> goto out;
> }
> +
Stray blank line.
> if ( (ret = xc_dom_boot_image(dom)) != 0 ) {
> LOGE(ERROR, "xc_dom_boot_image failed");
> goto out;
> diff --git a/tools/libxl/libxl_x86.c b/tools/libxl/libxl_x86.c
> index 7654e20..42f2139 100644
> --- a/tools/libxl/libxl_x86.c
> +++ b/tools/libxl/libxl_x86.c
> @@ -8,15 +8,18 @@ int libxl__arch_domain_prepare_config(libxl__gc *gc,
> xc_domain_configuration_t *xc_config)
> {
>
> - if (d_config->c_info.type == LIBXL_DOMAIN_TYPE_HVM &&
> - d_config->b_info.device_model_version !=
> - LIBXL_DEVICE_MODEL_VERSION_NONE) {
> - /* HVM domains with a device model. */
> - xc_config->emulation_flags = XEN_X86_EMU_ALL;
> - } else {
> - /* PV or HVM domains without a device model. */
> + if (d_config->c_info.type == LIBXL_DOMAIN_TYPE_HVM) {
> + if (d_config->b_info.device_model_version !=
> + LIBXL_DEVICE_MODEL_VERSION_NONE)
> + xc_config->emulation_flags = XEN_X86_EMU_ALL;
> + else if (libxl_defbool_val(d_config->b_info.u.hvm.apic))
> + /*
> + * HVM guests without device model may want
> + * to have LAPIC emulation.
> + */
> + xc_config->emulation_flags = XEN_X86_EMU_LAPIC;
> + } else
Please retain {} for the else branch. We recently updated the
CODING_STYLE a bit.
> xc_config->emulation_flags = 0;
> - }
>
> return 0;
> }
> @@ -366,7 +369,15 @@ int libxl__arch_domain_finalise_hw_description(libxl__gc *gc,
> libxl_domain_build_info *info,
> struct xc_dom_image *dom)
> {
> - return 0;
> + int ret = 0;
> +
> + if ((info->type == LIBXL_DOMAIN_TYPE_HVM) &&
> + (info->device_model_version == LIBXL_DEVICE_MODEL_VERSION_NONE)) {
> + if ( (ret = libxl__dom_load_acpi(gc, info, dom)) != 0 )
> + LOGE(ERROR, "libxl_dom_load_acpi failed");
> + }
> +
> + return ret;
> }
>
> /* Return 0 on success, ERROR_* on failure. */
> diff --git a/tools/libxl/libxl_x86_acpi.c b/tools/libxl/libxl_x86_acpi.c
> new file mode 100644
> index 0000000..88e69e2
> --- /dev/null
> +++ b/tools/libxl/libxl_x86_acpi.c
I only skimmed this file. I think it's mostly code movement and believe
the bug here should be easy to fix.
> @@ -0,0 +1,199 @@
> +/*
> + * This program is free software; you can redistribute it and/or modify
> + * it under the terms of the GNU Lesser General Public License as published
> + * by the Free Software Foundation; version 2.1 only. with the special
> + * exception on linking described in file LICENSE.
> + *
> + * This program is distributed in the hope that it will be useful,
> + * but WITHOUT ANY WARRANTY; without even the implied warranty of
> + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
> + * GNU Lesser General Public License for more details.
> + *
> + * Copyright (c) 2016 Oracle and/or its affiliates. All rights reserved.
> + */
> +
> +#include "libxl_internal.h"
> +#include "libxl_arch.h"
> +#include <xen/hvm/hvm_info_table.h>
> +#include <xen/hvm/e820.h>
> +#include "libacpi/libacpi.h"
> +
> +#include <xc_dom.h>
> +
> + /* Number of pages holding ACPI tables */
> +#define NUM_ACPI_PAGES 16
> +/* Store RSDP in the last 64 bytes of BIOS RO memory */
> +#define RSDP_ADDRESS (0x100000 - 64)
> +#define ACPI_INFO_PHYSICAL_ADDRESS 0xfc000000
> +
> +extern const unsigned char dsdt_pvh[];
> +extern const unsigned int dsdt_pvh_len;
> +
> +/* Assumes contiguous physical space */
> +static unsigned long virt_to_phys(struct acpi_ctxt *ctxt, void *v)
> +{
> + return (((unsigned long)v - ctxt->alloc_base_vaddr) +
> + ctxt->alloc_base_paddr);
> +}
> +
> +static void *mem_alloc(struct acpi_ctxt *ctxt, uint32_t size, uint32_t align)
> +{
> + unsigned long s, e;
> +
> + /* Align to at least 16 bytes. */
> + if (align < 16)
> + align = 16;
> +
> + s = (ctxt->alloc_currp + align) & ~((unsigned long)align - 1);
> + e = s + size - 1;
> +
> + /* TODO: Reallocate memory */
> + if ((e < s) || (e >= ctxt->alloc_end)) return NULL;
> +
Please put return NULL on a new line.
> + while (ctxt->alloc_currp >> ctxt->page_shift !=
> + e >> ctxt->page_shift)
> + ctxt->alloc_currp += ctxt->page_size;
> +
> + ctxt->alloc_currp = e;
> +
> + return (void *)s;
> +}
> +
> +static int init_acpi_config(libxl__gc *gc,
> + struct xc_dom_image *dom,
> + libxl_domain_build_info *b_info,
> + struct acpi_config *config)
> +{
> + xc_interface *xch = dom->xch;
> + uint32_t domid = dom->guest_domid;
> + xc_dominfo_t info;
> + int i, rc;
> +
> + config->dsdt_anycpu = config->dsdt_15cpu = dsdt_pvh;
> + config->dsdt_anycpu_len = config->dsdt_15cpu_len = dsdt_pvh_len;
> +
> + rc = xc_domain_getinfo(xch, domid, 1, &info);
> + if (rc < 0) {
> + LOG(ERROR, "%s: getdomaininfo failed (rc=%d)", __FUNCTION__, rc);
> + return rc;
> + }
> +
> + config->hvminfo = libxl__zalloc(gc, sizeof(*config->hvminfo));
> +
> + config->hvminfo->apic_mode = libxl_defbool_val(b_info->u.hvm.apic);
> +
> + if (dom->nr_vnodes) {
> + struct acpi_numa *numa = &config->numa;
> +
> + rc = xc_domain_getvnuma(xch, domid, &numa->nr_vnodes,
> + &numa->nr_vmemranges,
> + &config->hvminfo->nr_vcpus, NULL, NULL, NULL);
> + if (rc) {
> + LOG(ERROR, "%s: xc_domain_getvnuma failed (rc=%d)",
> + __FUNCTION__, rc);
> + return rc;
> + }
Indentation.
> +
> + numa->vmemrange = libxl__zalloc(gc, dom->nr_vmemranges *
> + sizeof(*numa->vmemrange));
> + numa->vdistance = libxl__zalloc(gc, dom->nr_vnodes *
> + sizeof(*numa->vdistance));
> + numa->vcpu_to_vnode = libxl__zalloc(gc, config->hvminfo->nr_vcpus *
> + sizeof(*numa->vcpu_to_vnode));
> + rc = xc_domain_getvnuma(xch, domid, &numa->nr_vnodes,
> + &numa->nr_vmemranges,
> + &config->hvminfo->nr_vcpus, numa->vmemrange,
> + numa->vdistance, numa->vcpu_to_vnode);
> + if (rc) {
> + LOG(ERROR, "%s: xc_domain_getvnuma failed (rc=%d)",
> + __FUNCTION__, rc);
> + return rc;
> + }
> + }
> + else
> + config->hvminfo->nr_vcpus = info.max_vcpu_id + 1;
> +
> + for (i=0; i<config->hvminfo->nr_vcpus; i++)
> + config->hvminfo->vcpu_online[i / 8] |= 1 << (i & 7);
> +
> + return 0;
> +}
> +
> +int libxl__dom_load_acpi(libxl__gc *gc,
> + libxl_domain_build_info *info,
> + struct xc_dom_image *dom)
Indentation.
And please constify stuff that don't get changed -- info.
Wei.
_______________________________________________
Xen-devel mailing list
Xen-devel@lists.xen.org
https://lists.xen.org/xen-devel
next prev parent reply other threads:[~2016-08-11 16:36 UTC|newest]
Thread overview: 69+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-08-04 21:06 [PATCH v2 00/23] Make ACPI builder available to components other than hvmloader Boris Ostrovsky
2016-08-04 21:06 ` [PATCH v2 01/23] hvmloader: Provide hvmloader_acpi_build_tables() Boris Ostrovsky
2016-08-04 21:06 ` [PATCH v2 02/23] acpi/hvmloader: Allow acpi_build_tables() callers specify acpi_info values Boris Ostrovsky
2016-08-09 12:29 ` Jan Beulich
2016-08-04 21:06 ` [PATCH v2 03/23] acpi/hvmloader: Initialize vm_gid data outside ACPI code Boris Ostrovsky
2016-08-09 13:11 ` Jan Beulich
2016-08-09 13:50 ` Boris Ostrovsky
2016-08-09 14:31 ` Jan Beulich
2016-08-09 14:47 ` Andrew Cooper
2016-08-09 15:09 ` Boris Ostrovsky
2016-08-09 15:13 ` Andrew Cooper
2016-08-09 15:15 ` Jan Beulich
2016-08-04 21:06 ` [PATCH v2 04/23] acpi/hvmloader: Decide which SSDTs to install in hvmloader Boris Ostrovsky
2016-08-04 21:06 ` [PATCH v2 05/23] acpi/hvmloader: Move passthrough initialization from ACPI code Boris Ostrovsky
2016-08-09 13:14 ` Jan Beulich
2016-08-04 21:06 ` [PATCH v2 06/23] acpi/hvmloader: Collect processor and NUMA info in hvmloader Boris Ostrovsky
2016-08-09 13:27 ` Jan Beulich
2016-08-09 13:43 ` Boris Ostrovsky
2016-08-09 13:57 ` Boris Ostrovsky
2016-08-09 14:44 ` Jan Beulich
2016-08-04 21:06 ` [PATCH v2 07/23] acpi/hvmloader: Set TIS header address " Boris Ostrovsky
2016-08-04 21:06 ` [PATCH v2 08/23] acpi/hvmloader: Make providing IOAPIC in MADT optional Boris Ostrovsky
2016-08-04 21:06 ` [PATCH v2 09/23] acpi/hvmloader: Build WAET optionally Boris Ostrovsky
2016-08-09 13:29 ` Jan Beulich
2016-08-09 13:51 ` Boris Ostrovsky
2016-08-09 14:48 ` Jan Beulich
2016-08-09 15:13 ` Boris Ostrovsky
2016-08-09 15:17 ` Jan Beulich
2016-08-04 21:06 ` [PATCH v2 10/23] acpi/hvmloader: Replace mem_alloc() and virt_to_phys() with memory ops Boris Ostrovsky
2016-08-09 13:36 ` Jan Beulich
2016-08-04 21:06 ` [PATCH v2 11/23] acpi/hvmloader: Translate all addresses when assigning addresses in ACPI tables Boris Ostrovsky
2016-08-04 21:06 ` [PATCH v2 12/23] acpi/hvmloader: Link ACPI object files directly Boris Ostrovsky
2016-08-10 13:17 ` Jan Beulich
2016-08-10 14:17 ` Boris Ostrovsky
2016-08-04 21:06 ` [PATCH v2 13/23] acpi/hvmloader: Include file/paths adjustments Boris Ostrovsky
2016-08-10 13:30 ` Jan Beulich
2016-08-10 14:20 ` Boris Ostrovsky
2016-08-04 21:06 ` [PATCH v2 14/23] acpi: Move ACPI code to tools/libacpi Boris Ostrovsky
2016-08-05 10:43 ` Jan Beulich
2016-08-05 11:01 ` Wei Liu
2016-08-16 8:13 ` Shannon Zhao
2016-08-16 8:29 ` Wei Liu
2016-08-16 9:36 ` Shannon Zhao
2016-08-16 9:44 ` Wei Liu
2016-08-04 21:06 ` [PATCH v2 15/23] x86: Add more checks verifying that PIT/PIC/IOAPIC are emulated Boris Ostrovsky
2016-08-04 21:06 ` [PATCH v2 16/23] x86: Allow LAPIC-only emulation_flags for HVM guests Boris Ostrovsky
2016-08-04 21:06 ` [PATCH v2 17/23] libacpi: Build DSDT for PVH guests Boris Ostrovsky
2016-08-10 13:50 ` Jan Beulich
2016-08-04 21:06 ` [PATCH v2 18/23] libxc/libxl: Allow multiple ACPI modules Boris Ostrovsky
2016-08-11 16:36 ` Wei Liu
2016-08-04 21:06 ` [PATCH v2 19/23] libxl/acpi: Add ACPI e820 entry Boris Ostrovsky
2016-08-11 16:36 ` Wei Liu
2016-08-04 21:06 ` [PATCH v2 20/23] libxl/pvhv2: Include APIC page in MMIO hole for PVHv2 guests Boris Ostrovsky
2016-08-04 21:06 ` [PATCH v2 21/23] ilibxl: Initialize domain build info before calling libxl__domain_make Boris Ostrovsky
2016-08-04 21:06 ` [PATCH v2 22/23] libxl/acpi: Build ACPI tables for HVMlite guests Boris Ostrovsky
2016-08-09 14:46 ` Jan Beulich
2016-08-09 15:07 ` Boris Ostrovsky
2016-08-11 16:36 ` Wei Liu [this message]
2016-08-11 18:08 ` Boris Ostrovsky
2016-08-04 21:06 ` [PATCH v2 23/23] libxc/xc_dom_core: Copy ACPI tables to guest space Boris Ostrovsky
2016-08-11 16:40 ` Wei Liu
2016-08-11 18:16 ` Boris Ostrovsky
2016-08-11 18:19 ` Andrew Cooper
2016-08-11 18:34 ` Boris Ostrovsky
2016-08-15 7:48 ` Shannon Zhao
2016-08-15 12:49 ` Boris Ostrovsky
2016-08-16 1:07 ` Shannon Zhao
2016-08-15 6:37 ` [PATCH v2 00/23] Make ACPI builder available to components other than hvmloader Shannon Zhao
2016-08-15 12:43 ` Boris Ostrovsky
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20160811163621.GW20641@citrix.com \
--to=wei.liu2@citrix.com \
--cc=andrew.cooper3@citrix.com \
--cc=boris.ostrovsky@oracle.com \
--cc=ian.jackson@eu.citrix.com \
--cc=jbeulich@suse.com \
--cc=julien.grall@arm.com \
--cc=roger.pau@citrix.com \
--cc=xen-devel@lists.xen.org \
--cc=zhaoshenglong@huawei.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).