[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-devel] [PATCH v4 06/31] 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> Reviewed-by: Andrew Cooper <andrew.cooper3@xxxxxxxxxx> Acked-by: Wei Liu <wei.liu2@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> --- Changes since v3: - Add Andrew Cooper Reviewed-by. - Move xc_dom_arch definitions to the end of the xc_dom_<arch>.c files in order to reduce the spurious diffs in the comming patches. - Add Wei Acked-by. --- 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 02d9d5c..c4b994f 100644 --- a/tools/libxc/include/xc_dom.h +++ b/tools/libxc/include/xc_dom.h @@ -223,6 +223,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; @@ -400,7 +403,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 b00d667..24776ba 100644 --- a/tools/libxc/xc_dom_arm.c +++ b/tools/libxc/xc_dom_arm.c @@ -194,38 +194,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 { @@ -384,7 +352,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; @@ -542,6 +510,42 @@ int xc_dom_feature_translated(struct xc_dom_image *dom) return 1; } +/* ------------------------------------------------------------------------ */ + +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); +} + /* * Local variables: * mode: C diff --git a/tools/libxc/xc_dom_boot.c b/tools/libxc/xc_dom_boot.c index 7c30f96..bf2cd7b 100644 --- a/tools/libxc/xc_dom_boot.c +++ b/tools/libxc/xc_dom_boot.c @@ -146,7 +146,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 c7bfc0c..07170c1 100644 --- a/tools/libxc/xc_dom_x86.c +++ b/tools/libxc/xc_dom_x86.c @@ -670,38 +670,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 { @@ -733,7 +701,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; @@ -757,7 +724,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; @@ -1078,6 +1045,42 @@ int xc_dom_feature_translated(struct xc_dom_image *dom) return elf_xen_feature_get(XENFEAT_auto_translated_physmap, dom->f_active); } +/* ------------------------------------------------------------------------ */ + +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); +} + /* * Local variables: * mode: C -- 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 |