dom->vnode_to_pnode[i] = info->vnuma_nodes[i].pnode;
}
+ rc = libxl__build_dom(gc, domid, info, 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 = libxl__build_dom(gc, domid, info, state, dom);
- if (rc != 0)
- 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,
uint64_t highmem_size =
dom->highmem_end ? dom->highmem_end - (1ull << 32) : 0;
uint32_t lowmem_start = dom->device_model ? GUEST_LOW_MEM_START_DEFAULT : 0;
+ unsigned page_size = XC_DOM_PAGE_SIZE(dom);
/* Add all rdm entries. */
for (i = 0; i < d_config->num_rdms; i++)
if (highmem_size)
e820_entries++;
+ for (i = 0; i < MAX_ACPI_MODULES; i++)
+ if (dom->acpi_modules[i].length)
+ e820_entries++;
+
if (e820_entries >= E820MAX) {
LOG(ERROR, "Ooops! Too many entries in the memory map!");
rc = ERROR_INVAL;
nr++;
}
+ for (i = 0; i < MAX_ACPI_MODULES; i++) {
+ if (dom->acpi_modules[i].length) {
+ e820[nr].addr = dom->acpi_modules[i].guest_addr_out & ~(page_size - 1);
+ e820[nr].size = dom->acpi_modules[i].length +
+ (dom->acpi_modules[i].guest_addr_out & (page_size - 1));
+ e820[nr].type = E820_ACPI;
+ nr++;
+ }
+ }
+
/* High memory */
if (highmem_size) {
e820[nr].addr = ((uint64_t)1 << 32);