xen-devel.lists.xenproject.org archive mirror
 help / color / mirror / Atom feed
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

  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).