[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-devel] [PATCH v2 05/22] libxc: make arch_setup_meminit a xc_dom_arch hook
This allows having different arch_setup_meminit implementations based on the guest type. It should not introduce any functional changes. Signed-off-by: Roger Pau Monnà <roger.pau@xxxxxxxxxx> Cc: Ian Jackson <ian.jackson@xxxxxxxxxxxxx> Cc: Stefano Stabellini <stefano.stabellini@xxxxxxxxxxxxx> Cc: Ian Campbell <ian.campbell@xxxxxxxxxx> Cc: Wei Liu <wei.liu2@xxxxxxxxxx> --- tools/libxc/include/xc_dom.h | 4 ++- tools/libxc/xc_dom_arm.c | 70 +++++++++++++++++++++++-------------------- tools/libxc/xc_dom_boot.c | 2 +- tools/libxc/xc_dom_x86.c | 71 +++++++++++++++++++++++--------------------- 4 files changed, 78 insertions(+), 69 deletions(-) diff --git a/tools/libxc/include/xc_dom.h b/tools/libxc/include/xc_dom.h index d61482c..b461f19 100644 --- a/tools/libxc/include/xc_dom.h +++ b/tools/libxc/include/xc_dom.h @@ -224,6 +224,9 @@ struct xc_dom_arch { int (*shared_info) (struct xc_dom_image * dom, void *shared_info); int (*vcpu) (struct xc_dom_image * dom, void *vcpu_ctxt); + /* arch-specific memory initialization. */ + int (*meminit) (struct xc_dom_image * dom); + char *guest_type; char *native_protocol; int page_shift; @@ -401,7 +404,6 @@ static inline xen_pfn_t xc_dom_p2m(struct xc_dom_image *dom, xen_pfn_t pfn) /* --- arch bits --------------------------------------------------- */ -int arch_setup_meminit(struct xc_dom_image *dom); int arch_setup_bootearly(struct xc_dom_image *dom); int arch_setup_bootlate(struct xc_dom_image *dom); diff --git a/tools/libxc/xc_dom_arm.c b/tools/libxc/xc_dom_arm.c index 065debb..1f00d05 100644 --- a/tools/libxc/xc_dom_arm.c +++ b/tools/libxc/xc_dom_arm.c @@ -195,38 +195,6 @@ static int vcpu_arm64(struct xc_dom_image *dom, void *ptr) /* ------------------------------------------------------------------------ */ -static struct xc_dom_arch xc_dom_32 = { - .guest_type = "xen-3.0-armv7l", - .native_protocol = XEN_IO_PROTO_ABI_ARM, - .page_shift = PAGE_SHIFT_ARM, - .sizeof_pfn = 8, - .alloc_magic_pages = alloc_magic_pages, - .count_pgtables = count_pgtables_arm, - .setup_pgtables = setup_pgtables_arm, - .start_info = start_info_arm, - .shared_info = shared_info_arm, - .vcpu = vcpu_arm32, -}; - -static struct xc_dom_arch xc_dom_64 = { - .guest_type = "xen-3.0-aarch64", - .native_protocol = XEN_IO_PROTO_ABI_ARM, - .page_shift = PAGE_SHIFT_ARM, - .sizeof_pfn = 8, - .alloc_magic_pages = alloc_magic_pages, - .count_pgtables = count_pgtables_arm, - .setup_pgtables = setup_pgtables_arm, - .start_info = start_info_arm, - .shared_info = shared_info_arm, - .vcpu = vcpu_arm64, -}; - -static void __init register_arch_hooks(void) -{ - xc_dom_register_arch_hooks(&xc_dom_32); - xc_dom_register_arch_hooks(&xc_dom_64); -} - static int set_mode(xc_interface *xch, domid_t domid, char *guest_type) { static const struct { @@ -385,7 +353,7 @@ out: return rc < 0 ? rc : 0; } -int arch_setup_meminit(struct xc_dom_image *dom) +static int meminit(struct xc_dom_image *dom) { int i, rc; xen_pfn_t pfn; @@ -522,6 +490,42 @@ int arch_setup_meminit(struct xc_dom_image *dom) return 0; } +/* ------------------------------------------------------------------------ */ + +static struct xc_dom_arch xc_dom_32 = { + .guest_type = "xen-3.0-armv7l", + .native_protocol = XEN_IO_PROTO_ABI_ARM, + .page_shift = PAGE_SHIFT_ARM, + .sizeof_pfn = 8, + .alloc_magic_pages = alloc_magic_pages, + .count_pgtables = count_pgtables_arm, + .setup_pgtables = setup_pgtables_arm, + .start_info = start_info_arm, + .shared_info = shared_info_arm, + .vcpu = vcpu_arm32, + .meminit = meminit, +}; + +static struct xc_dom_arch xc_dom_64 = { + .guest_type = "xen-3.0-aarch64", + .native_protocol = XEN_IO_PROTO_ABI_ARM, + .page_shift = PAGE_SHIFT_ARM, + .sizeof_pfn = 8, + .alloc_magic_pages = alloc_magic_pages, + .count_pgtables = count_pgtables_arm, + .setup_pgtables = setup_pgtables_arm, + .start_info = start_info_arm, + .shared_info = shared_info_arm, + .vcpu = vcpu_arm64, + .meminit = meminit, +}; + +static void __init register_arch_hooks(void) +{ + xc_dom_register_arch_hooks(&xc_dom_32); + xc_dom_register_arch_hooks(&xc_dom_64); +} + int arch_setup_bootearly(struct xc_dom_image *dom) { DOMPRINTF("%s: doing nothing", __FUNCTION__); diff --git a/tools/libxc/xc_dom_boot.c b/tools/libxc/xc_dom_boot.c index fda9e52..3ef7e6c 100644 --- a/tools/libxc/xc_dom_boot.c +++ b/tools/libxc/xc_dom_boot.c @@ -147,7 +147,7 @@ int xc_dom_boot_mem_init(struct xc_dom_image *dom) DOMPRINTF_CALLED(dom->xch); - rc = arch_setup_meminit(dom); + rc = dom->arch_hooks->meminit(dom); if ( rc != 0 ) { xc_dom_panic(dom->xch, XC_OUT_OF_MEMORY, diff --git a/tools/libxc/xc_dom_x86.c b/tools/libxc/xc_dom_x86.c index b89f5c2..6fb4aee 100644 --- a/tools/libxc/xc_dom_x86.c +++ b/tools/libxc/xc_dom_x86.c @@ -671,38 +671,6 @@ static int vcpu_x86_64(struct xc_dom_image *dom, void *ptr) /* ------------------------------------------------------------------------ */ -static struct xc_dom_arch xc_dom_32_pae = { - .guest_type = "xen-3.0-x86_32p", - .native_protocol = XEN_IO_PROTO_ABI_X86_32, - .page_shift = PAGE_SHIFT_X86, - .sizeof_pfn = 4, - .alloc_magic_pages = alloc_magic_pages, - .count_pgtables = count_pgtables_x86_32_pae, - .setup_pgtables = setup_pgtables_x86_32_pae, - .start_info = start_info_x86_32, - .shared_info = shared_info_x86_32, - .vcpu = vcpu_x86_32, -}; - -static struct xc_dom_arch xc_dom_64 = { - .guest_type = "xen-3.0-x86_64", - .native_protocol = XEN_IO_PROTO_ABI_X86_64, - .page_shift = PAGE_SHIFT_X86, - .sizeof_pfn = 8, - .alloc_magic_pages = alloc_magic_pages, - .count_pgtables = count_pgtables_x86_64, - .setup_pgtables = setup_pgtables_x86_64, - .start_info = start_info_x86_64, - .shared_info = shared_info_x86_64, - .vcpu = vcpu_x86_64, -}; - -static void __init register_arch_hooks(void) -{ - xc_dom_register_arch_hooks(&xc_dom_32_pae); - xc_dom_register_arch_hooks(&xc_dom_64); -} - static int x86_compat(xc_interface *xch, domid_t domid, char *guest_type) { static const struct { @@ -734,7 +702,6 @@ static int x86_compat(xc_interface *xch, domid_t domid, char *guest_type) return rc; } - static int x86_shadow(xc_interface *xch, domid_t domid) { int rc, mode; @@ -758,7 +725,7 @@ static int x86_shadow(xc_interface *xch, domid_t domid) return rc; } -int arch_setup_meminit(struct xc_dom_image *dom) +static int meminit_pv(struct xc_dom_image *dom) { int rc; xen_pfn_t pfn, allocsz, mfn, total, pfn_base; @@ -957,6 +924,42 @@ int arch_setup_meminit(struct xc_dom_image *dom) return rc; } +/* ------------------------------------------------------------------------ */ + +static struct xc_dom_arch xc_dom_32_pae = { + .guest_type = "xen-3.0-x86_32p", + .native_protocol = XEN_IO_PROTO_ABI_X86_32, + .page_shift = PAGE_SHIFT_X86, + .sizeof_pfn = 4, + .alloc_magic_pages = alloc_magic_pages, + .count_pgtables = count_pgtables_x86_32_pae, + .setup_pgtables = setup_pgtables_x86_32_pae, + .start_info = start_info_x86_32, + .shared_info = shared_info_x86_32, + .vcpu = vcpu_x86_32, + .meminit = meminit_pv, +}; + +static struct xc_dom_arch xc_dom_64 = { + .guest_type = "xen-3.0-x86_64", + .native_protocol = XEN_IO_PROTO_ABI_X86_64, + .page_shift = PAGE_SHIFT_X86, + .sizeof_pfn = 8, + .alloc_magic_pages = alloc_magic_pages, + .count_pgtables = count_pgtables_x86_64, + .setup_pgtables = setup_pgtables_x86_64, + .start_info = start_info_x86_64, + .shared_info = shared_info_x86_64, + .vcpu = vcpu_x86_64, + .meminit = meminit_pv, +}; + +static void __init register_arch_hooks(void) +{ + xc_dom_register_arch_hooks(&xc_dom_32_pae); + xc_dom_register_arch_hooks(&xc_dom_64); +} + int arch_setup_bootearly(struct xc_dom_image *dom) { DOMPRINTF("%s: doing nothing", __FUNCTION__); -- 1.9.5 (Apple Git-50.3) _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxx http://lists.xen.org/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |