[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-devel] [PATCH RFC 10/15] libxc: allow caller to specify guest rambase rather than hardcoding
It's still hardcoded but it could now be plausibly be made variable. TODO: the #if is a bit lame. Signed-off-by: Ian Campbell <ian.campbell@xxxxxxxxxx> --- tools/libxc/xc_dom.h | 1 + tools/libxc/xc_dom_armzimageloader.c | 12 +----------- tools/libxc/xc_dom_core.c | 8 ++++++++ tools/libxl/libxl_dom.c | 10 ++++++++++ 4 files changed, 20 insertions(+), 11 deletions(-) diff --git a/tools/libxc/xc_dom.h b/tools/libxc/xc_dom.h index 86e23ee..ed49aa7 100644 --- a/tools/libxc/xc_dom.h +++ b/tools/libxc/xc_dom.h @@ -197,6 +197,7 @@ struct xc_dom_image *xc_dom_allocate(xc_interface *xch, const char *cmdline, const char *features); void xc_dom_release_phys(struct xc_dom_image *dom); void xc_dom_release(struct xc_dom_image *dom); +int xc_dom_rambase_init(struct xc_dom_image *dom, uint64_t rambase); int xc_dom_mem_init(struct xc_dom_image *dom, unsigned int mem_mb); /* Set this larger if you have enormous ramdisks/kernels. Note that diff --git a/tools/libxc/xc_dom_armzimageloader.c b/tools/libxc/xc_dom_armzimageloader.c index b693390..4e3f7ae 100644 --- a/tools/libxc/xc_dom_armzimageloader.c +++ b/tools/libxc/xc_dom_armzimageloader.c @@ -30,12 +30,6 @@ #include <arpa/inet.h> /* XXX ntohl is not the right function... */ -/* - * Guest virtual RAM starts here. This must be consistent with the DTB - * appended to the guest kernel. - */ -#define GUEST_RAM_BASE 0x80000000 - struct minimal_dtb_header { uint32_t magic; uint32_t total_size; @@ -103,14 +97,12 @@ static int xc_dom_parse_zimage32_kernel(struct xc_dom_image *dom) uint32_t *zimage; uint32_t start, entry_addr; uint64_t v_start, v_end; - uint64_t rambase = GUEST_RAM_BASE; + uint64_t rambase = dom->rambase_pfn << XC_PAGE_SHIFT; DOMPRINTF_CALLED(dom->xch); zimage = (uint32_t *)dom->kernel_blob; - dom->rambase_pfn = rambase >> XC_PAGE_SHIFT; - /* Do not load kernel at the very first RAM address */ v_start = rambase + 0x8000; v_end = v_start + dom->kernel_size; @@ -130,8 +122,6 @@ static int xc_dom_parse_zimage32_kernel(struct xc_dom_image *dom) dom->parms.virt_base = rambase; dom->guest_type = "xen-3.0-armv7l"; - DOMPRINTF("%s: %s: RAM starts at %"PRI_xen_pfn, - __FUNCTION__, dom->guest_type, dom->rambase_pfn); DOMPRINTF("%s: %s: 0x%" PRIx64 " -> 0x%" PRIx64 "", __FUNCTION__, dom->guest_type, dom->kernel_seg.vstart, dom->kernel_seg.vend); diff --git a/tools/libxc/xc_dom_core.c b/tools/libxc/xc_dom_core.c index 0f367f6..a67f718 100644 --- a/tools/libxc/xc_dom_core.c +++ b/tools/libxc/xc_dom_core.c @@ -785,6 +785,14 @@ int xc_dom_parse_image(struct xc_dom_image *dom) return -1; } +int xc_dom_rambase_init(struct xc_dom_image *dom, uint64_t rambase) +{ + dom->rambase_pfn = rambase >> XC_PAGE_SHIFT; + DOMPRINTF("%s: RAM starts at %"PRI_xen_pfn, + __FUNCTION__, dom->rambase_pfn); + return 0; +} + int xc_dom_mem_init(struct xc_dom_image *dom, unsigned int mem_mb) { unsigned int page_shift; diff --git a/tools/libxl/libxl_dom.c b/tools/libxl/libxl_dom.c index 6e2252a..631cdf5 100644 --- a/tools/libxl/libxl_dom.c +++ b/tools/libxl/libxl_dom.c @@ -24,6 +24,10 @@ #include <xen/hvm/hvm_info_table.h> #include <xen/hvm/hvm_xs_strings.h> +#if defined(__arm__) || defined(__aarch64__) +#define GUEST_RAM_BASE 0x80000000 +#endif + libxl_domain_type libxl__domain_type(libxl__gc *gc, uint32_t domid) { libxl_ctx *ctx = libxl__gc_owner(gc); @@ -380,6 +384,12 @@ int libxl__build_pv(libxl__gc *gc, uint32_t domid, LOGE(ERROR, "xc_dom_boot_xen_init failed"); goto out; } +#ifdef GUEST_RAM_BASE + if ( (ret = xc_dom_rambase_init(dom, GUEST_RAM_BASE)) != 0 ) { + LOGE(ERROR, "xc_dom_rambase failed"); + goto out; + } +#endif if ( (ret = xc_dom_parse_image(dom)) != 0 ) { LOGE(ERROR, "xc_dom_parse_image failed"); goto out; -- 1.7.10.4 _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxx http://lists.xen.org/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |