Since hvm_start_info has now been expanded to include memory map (i.e.
e820) we need to know size of this map by the time we create
dom->start_info_seg in alloc_magic_pages_hvm().
To do so we have to call libxl__arch_domain_construct_memmap() earlier,
before xc_dom_build_image(). And since libxl__arch_domain_construct_memmap()
is only used by for x86 we can make this call from x86's
libxl__arch_domain_finalise_hw_description(), at the same time removing
its NOP definition from ARM code and renaming and making it static in
libxl_x86.c
Signed-off-by: Boris Ostrovsky <boris.ostrovsky@oracle.com>
Reviewed-by: Roger Pau Monné <roger.pau@citrix.com>
Reviewed-by: Wei Liu <wei.liu2@citrix.com>
/* finalize arch specific hardware description. */
_hidden
int libxl__arch_domain_finalise_hw_description(libxl__gc *gc,
- libxl_domain_build_info *info,
+ uint32_t domid,
+ libxl_domain_config *d_config,
struct xc_dom_image *dom);
/* perform any pending hardware initialization */
_hidden
int libxl__arch_domain_map_irq(libxl__gc *gc, uint32_t domid, int irq);
-/* arch specific to construct memory mapping function */
-_hidden
-int libxl__arch_domain_construct_memmap(libxl__gc *gc,
- libxl_domain_config *d_config,
- uint32_t domid,
- struct xc_dom_image *dom);
-
_hidden
void libxl__arch_domain_build_info_acpi_setdefault(
libxl_domain_build_info *b_info);
}
int libxl__arch_domain_finalise_hw_description(libxl__gc *gc,
- libxl_domain_build_info *info,
+ uint32_t domid,
+ libxl_domain_config *d_config,
struct xc_dom_image *dom)
{
void *fdt = dom->devicetree_blob;
return xc_domain_bind_pt_spi_irq(CTX->xch, domid, irq, irq);
}
-int libxl__arch_domain_construct_memmap(libxl__gc *gc,
- libxl_domain_config *d_config,
- uint32_t domid,
- struct xc_dom_image *dom)
-{
- return 0;
-}
-
void libxl__arch_domain_build_info_acpi_setdefault(
libxl_domain_build_info *b_info)
{
break;
case LIBXL_DOMAIN_TYPE_PV:
- ret = libxl__build_pv(gc, domid, info, state);
+ ret = libxl__build_pv(gc, domid, d_config, state);
if (ret)
goto out;
}
static int libxl__build_dom(libxl__gc *gc, uint32_t domid,
- libxl_domain_build_info *info, libxl__domain_build_state *state,
+ libxl_domain_config *d_config, libxl__domain_build_state *state,
struct xc_dom_image *dom)
{
+ libxl_domain_build_info *const info = &d_config->b_info;
uint64_t mem_kb;
int ret;
LOGE(ERROR, "xc_dom_boot_mem_init failed");
goto out;
}
- if ( (ret = libxl__arch_domain_finalise_hw_description(gc, info, dom)) != 0 ) {
+ if ( (ret = libxl__arch_domain_finalise_hw_description(gc, domid, d_config, dom)) != 0 ) {
LOGE(ERROR, "libxl__arch_domain_finalise_hw_description failed");
goto out;
}
}
int libxl__build_pv(libxl__gc *gc, uint32_t domid,
- libxl_domain_build_info *info, libxl__domain_build_state *state)
+ libxl_domain_config *d_config, libxl__domain_build_state *state)
{
libxl_ctx *ctx = libxl__gc_owner(gc);
+ libxl_domain_build_info *const info = &d_config->b_info;
struct xc_dom_image *dom;
int ret;
int flags = 0;
dom->vnode_to_pnode[i] = info->vnuma_nodes[i].pnode;
}
- ret = libxl__build_dom(gc, domid, info, state, dom);
+ ret = libxl__build_dom(gc, domid, d_config, state, dom);
if (ret != 0)
goto out;
dom->vnode_to_pnode[i] = info->vnuma_nodes[i].pnode;
}
- rc = libxl__build_dom(gc, domid, info, state, dom);
+ rc = libxl__build_dom(gc, domid, d_config, state, dom);
if (rc != 0)
goto out;
- rc = libxl__arch_domain_construct_memmap(gc, d_config, domid, dom);
- if (rc != 0) {
- LOG(ERROR, "setting domain memory map failed");
- goto out;
- }
-
rc = hvm_build_set_params(ctx->xch, domid, info, state->store_port,
&state->store_mfn, state->console_port,
&state->console_mfn, state->store_domid,
char **vms_ents, char **local_ents);
_hidden int libxl__build_pv(libxl__gc *gc, uint32_t domid,
- libxl_domain_build_info *info, libxl__domain_build_state *state);
+ libxl_domain_config *const d_config, libxl__domain_build_state *state);
_hidden int libxl__build_hvm(libxl__gc *gc, uint32_t domid,
libxl_domain_config *d_config,
libxl__domain_build_state *state);
return 0;
}
-int libxl__arch_domain_finalise_hw_description(libxl__gc *gc,
- libxl_domain_build_info *info,
- struct xc_dom_image *dom)
-{
- int rc = 0;
-
- if (info->type == LIBXL_DOMAIN_TYPE_PVH) {
- rc = libxl__dom_load_acpi(gc, info, dom);
- if (rc != 0)
- LOGE(ERROR, "libxl_dom_load_acpi failed");
- }
-
- return rc;
-}
-
int libxl__arch_build_dom_finish(libxl__gc *gc,
libxl_domain_build_info *info,
struct xc_dom_image *dom,
* to adjust them. Please refer to libxl__domain_device_construct_rdm().
*/
#define GUEST_LOW_MEM_START_DEFAULT 0x100000
-int libxl__arch_domain_construct_memmap(libxl__gc *gc,
- libxl_domain_config *d_config,
- uint32_t domid,
- struct xc_dom_image *dom)
+static int domain_construct_memmap(libxl__gc *gc,
+ libxl_domain_config *d_config,
+ uint32_t domid,
+ struct xc_dom_image *dom)
{
int rc = 0;
unsigned int nr = 0, i;
return rc;
}
+int libxl__arch_domain_finalise_hw_description(libxl__gc *gc,
+ uint32_t domid,
+ libxl_domain_config *d_config,
+ struct xc_dom_image *dom)
+{
+ libxl_domain_build_info *const info = &d_config->b_info;
+ int rc;
+
+ if (info->type == LIBXL_DOMAIN_TYPE_PV)
+ return 0;
+
+ if (info->type == LIBXL_DOMAIN_TYPE_PVH) {
+ rc = libxl__dom_load_acpi(gc, info, dom);
+ if (rc != 0) {
+ LOGE(ERROR, "libxl_dom_load_acpi failed");
+ return rc;
+ }
+ }
+
+ rc = domain_construct_memmap(gc, d_config, domid, dom);
+ if (rc != 0)
+ LOGE(ERROR, "setting domain memory map failed");
+
+ return rc;
+}
+
void libxl__arch_domain_build_info_acpi_setdefault(
libxl_domain_build_info *b_info)
{