mirror of
https://github.com/xen-project/xen.git
synced 2026-10-29 10:40:03 +01:00
[IA64] Foreign p2m: Fix vti domain builder.
It should set arch_domain::convmem_end. Signed-off-by: Isaku Yamahata <yamahata@valinux.co.jp>
This commit is contained in:
1 parent
b0e541a0ae
commit
6a9db78fbf
4 files changed
+14
-4
No files matched your search
@@ -1028,7 +1028,9 @@ setup_guest(int xc_handle, uint32_t dom, unsigned long memsize,
|
||||
|
||||
domctl.u.arch_setup.flags = XEN_DOMAINSETUP_hvm_guest;
|
||||
domctl.u.arch_setup.bp = 0;
|
||||
domctl.u.arch_setup.maxmem = 0;
|
||||
domctl.u.arch_setup.maxmem = GFW_START + GFW_SIZE;
|
||||
if (dom_memsize > MMIO_START)
|
||||
domctl.u.arch_setup.maxmem = dom_memsize + 1 * MEM_G;
|
||||
domctl.cmd = XEN_DOMCTL_arch_setup;
|
||||
domctl.domain = (domid_t)dom;
|
||||
if (xc_domctl(xc_handle, &domctl))
|
||||
|
||||
@@ -23,6 +23,7 @@
|
||||
#include <xen/iocap.h>
|
||||
#include <xen/errno.h>
|
||||
#include <xen/nodemask.h>
|
||||
#include <asm/dom_fw_utils.h>
|
||||
|
||||
#define get_xen_guest_handle(val, hnd) do { val = (hnd).p; } while (0)
|
||||
|
||||
@@ -104,6 +105,7 @@ long arch_do_domctl(xen_domctl_t *op, XEN_GUEST_HANDLE(xen_domctl_t) u_domctl)
|
||||
} else {
|
||||
d->arch.is_vti = 1;
|
||||
vmx_setup_platform(d);
|
||||
xen_ia64_set_convmem_end(d, ds->maxmem);
|
||||
}
|
||||
}
|
||||
else {
|
||||
|
||||
@@ -60,6 +60,11 @@ int xen_ia64_is_dom0(struct domain *d)
|
||||
return d == dom0;
|
||||
}
|
||||
|
||||
void xen_ia64_set_convmem_end(struct domain *d, uint64_t convmem_end)
|
||||
{
|
||||
d->arch.convmem_end = convmem_end;
|
||||
}
|
||||
|
||||
static void dom_fw_domain_init(struct domain *d, struct fw_tables *tables)
|
||||
{
|
||||
/* Initialise for EFI_SET_VIRTUAL_ADDRESS_MAP emulation */
|
||||
@@ -107,7 +112,7 @@ static int dom_fw_set_convmem_end(struct domain *d)
|
||||
memmap_info->efi_memdesc_size, efi_mdt_cmp, NULL);
|
||||
|
||||
if (d->arch.convmem_end == 0)
|
||||
d->arch.convmem_end = d->max_pages << PAGE_SHIFT;
|
||||
xen_ia64_set_convmem_end(d, d->max_pages << PAGE_SHIFT);
|
||||
|
||||
for (p = memmap_start; p < memmap_end;
|
||||
p += memmap_info->efi_memdesc_size) {
|
||||
@@ -119,7 +124,7 @@ static int dom_fw_set_convmem_end(struct domain *d)
|
||||
if (md->attribute == EFI_MEMORY_WB &&
|
||||
md->type == EFI_CONVENTIONAL_MEMORY &&
|
||||
md->num_pages > 0 && d->arch.convmem_end < end)
|
||||
d->arch.convmem_end = end;
|
||||
xen_ia64_set_convmem_end(d, end);
|
||||
}
|
||||
|
||||
dom_fw_copy_to(d, gpaddr, memmap_info, size);
|
||||
@@ -141,7 +146,7 @@ static void dom_fw_setup_for_domain_restore(domain_t * d, unsigned long maxmem)
|
||||
{
|
||||
assign_new_domain_page(d, FW_HYPERCALL_BASE_PADDR);
|
||||
dom_fw_domain_init(d, domain_mpa_to_imva(d, FW_TABLES_BASE_PADDR));
|
||||
d->arch.convmem_end = maxmem;
|
||||
xen_ia64_set_convmem_end(d, maxmem);
|
||||
}
|
||||
|
||||
/* copy memory range to domain pseudo physical address space */
|
||||
|
||||
@@ -26,6 +26,7 @@ int xen_ia64_fpswa_revision(struct domain *d, unsigned int *revision);
|
||||
int xen_ia64_is_vcpu_allocated(struct domain *d, uint32_t vcpu);
|
||||
int xen_ia64_is_running_on_sim(struct domain *unused);
|
||||
int xen_ia64_is_dom0(struct domain *d);
|
||||
void xen_ia64_set_convmem_end(struct domain *d, uint64_t convmem_end);
|
||||
void dom_fw_copy_to(struct domain *d, unsigned long dest_gpaddr,
|
||||
void *src, size_t size);
|
||||
void dom_fw_copy_from(void* dest, struct domain *d, unsigned long src_gpaddr,
|
||||
|
||||