[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-devel] [PATCH v3 3/9] libxc: rename domain builder count_pgtables to alloc_pgtables
Rename the count_pgtables hook of the domain builder to alloc_pgtables and do the allocation of the guest memory for page tables inside this hook. This will remove the need for accessing the x86 specific pgtables member of struct xc_dom_image in the generic domain builder code. Signed-off-by: Juergen Gross <jgross@xxxxxxxx> --- tools/libxc/include/xc_dom.h | 2 +- tools/libxc/xc_dom_arm.c | 6 +++--- tools/libxc/xc_dom_core.c | 11 ++--------- tools/libxc/xc_dom_x86.c | 26 +++++++++++++++++--------- 4 files changed, 23 insertions(+), 22 deletions(-) diff --git a/tools/libxc/include/xc_dom.h b/tools/libxc/include/xc_dom.h index 878dc52..03d5407 100644 --- a/tools/libxc/include/xc_dom.h +++ b/tools/libxc/include/xc_dom.h @@ -221,7 +221,7 @@ void xc_dom_register_loader(struct xc_dom_loader *loader); struct xc_dom_arch { /* pagetable setup */ int (*alloc_magic_pages) (struct xc_dom_image * dom); - int (*count_pgtables) (struct xc_dom_image * dom); + int (*alloc_pgtables) (struct xc_dom_image * dom); int (*setup_pgtables) (struct xc_dom_image * dom); /* arch-specific data structs setup */ diff --git a/tools/libxc/xc_dom_arm.c b/tools/libxc/xc_dom_arm.c index 397eef0..d9a6371 100644 --- a/tools/libxc/xc_dom_arm.c +++ b/tools/libxc/xc_dom_arm.c @@ -49,7 +49,7 @@ const char *xc_domain_get_native_protocol(xc_interface *xch, * arm guests are hybrid and start off with paging disabled, therefore no * pagetables and nothing to do here. */ -static int count_pgtables_arm(struct xc_dom_image *dom) +static int alloc_pgtables_arm(struct xc_dom_image *dom) { DOMPRINTF_CALLED(dom->xch); return 0; @@ -534,7 +534,7 @@ static struct xc_dom_arch xc_dom_32 = { .page_shift = PAGE_SHIFT_ARM, .sizeof_pfn = 8, .alloc_magic_pages = alloc_magic_pages, - .count_pgtables = count_pgtables_arm, + .alloc_pgtables = alloc_pgtables_arm, .setup_pgtables = setup_pgtables_arm, .start_info = start_info_arm, .shared_info = shared_info_arm, @@ -550,7 +550,7 @@ static struct xc_dom_arch xc_dom_64 = { .page_shift = PAGE_SHIFT_ARM, .sizeof_pfn = 8, .alloc_magic_pages = alloc_magic_pages, - .count_pgtables = count_pgtables_arm, + .alloc_pgtables = alloc_pgtables_arm, .setup_pgtables = setup_pgtables_arm, .start_info = start_info_arm, .shared_info = shared_info_arm, diff --git a/tools/libxc/xc_dom_core.c b/tools/libxc/xc_dom_core.c index b1d7890..4b6eb9b 100644 --- a/tools/libxc/xc_dom_core.c +++ b/tools/libxc/xc_dom_core.c @@ -1082,15 +1082,8 @@ int xc_dom_build_image(struct xc_dom_image *dom) /* allocate other pages */ if ( dom->arch_hooks->alloc_magic_pages(dom) != 0 ) goto err; - if ( dom->arch_hooks->count_pgtables ) - { - if ( dom->arch_hooks->count_pgtables(dom) != 0 ) - goto err; - if ( (dom->pgtables > 0) && - (xc_dom_alloc_segment(dom, &dom->pgtables_seg, "page tables", 0, - dom->pgtables * page_size) != 0) ) - goto err; - } + if ( dom->arch_hooks->alloc_pgtables(dom) != 0 ) + goto err; if ( dom->alloc_bootstack ) dom->bootstack_pfn = xc_dom_alloc_page(dom, "boot stack"); DOMPRINTF("%-20s: virt_alloc_end : 0x%" PRIx64 "", diff --git a/tools/libxc/xc_dom_x86.c b/tools/libxc/xc_dom_x86.c index dd331bf..7eda047 100644 --- a/tools/libxc/xc_dom_x86.c +++ b/tools/libxc/xc_dom_x86.c @@ -126,7 +126,7 @@ nr_page_tables(struct xc_dom_image *dom, return tables; } -static int count_pgtables(struct xc_dom_image *dom, int pae, +static int alloc_pgtables(struct xc_dom_image *dom, int pae, int l4_bits, int l3_bits, int l2_bits, int l1_bits) { int pages, extra_pages; @@ -172,7 +172,9 @@ static int count_pgtables(struct xc_dom_image *dom, int pae, break; } dom->virt_pgtab_end = try_virt_end + 1; - return 0; + + return xc_dom_alloc_segment(dom, &dom->pgtables_seg, "page tables", 0, + dom->pgtables * PAGE_SIZE_X86); } /* ------------------------------------------------------------------------ */ @@ -182,9 +184,9 @@ static int count_pgtables(struct xc_dom_image *dom, int pae, #define L2_PROT (_PAGE_PRESENT|_PAGE_RW|_PAGE_ACCESSED|_PAGE_DIRTY|_PAGE_USER) #define L3_PROT (_PAGE_PRESENT) -static int count_pgtables_x86_32_pae(struct xc_dom_image *dom) +static int alloc_pgtables_x86_32_pae(struct xc_dom_image *dom) { - return count_pgtables(dom, 1, 0, 32, + return alloc_pgtables(dom, 1, 0, 32, L3_PAGETABLE_SHIFT_PAE, L2_PAGETABLE_SHIFT_PAE); } @@ -355,9 +357,9 @@ pfn_error: /* ------------------------------------------------------------------------ */ /* x86_64 pagetables */ -static int count_pgtables_x86_64(struct xc_dom_image *dom) +static int alloc_pgtables_x86_64(struct xc_dom_image *dom) { - return count_pgtables(dom, 0, + return alloc_pgtables(dom, 0, L4_PAGETABLE_SHIFT_X86_64 + 9, L4_PAGETABLE_SHIFT_X86_64, L3_PAGETABLE_SHIFT_X86_64, @@ -1623,6 +1625,12 @@ static int bootlate_pv(struct xc_dom_image *dom) return 0; } +static int alloc_pgtables_hvm(struct xc_dom_image *dom) +{ + DOMPRINTF("%s: doing nothing", __func__); + return 0; +} + static int bootlate_hvm(struct xc_dom_image *dom) { DOMPRINTF("%s: doing nothing", __func__); @@ -1646,7 +1654,7 @@ static struct xc_dom_arch xc_dom_32_pae = { .page_shift = PAGE_SHIFT_X86, .sizeof_pfn = 4, .alloc_magic_pages = alloc_magic_pages, - .count_pgtables = count_pgtables_x86_32_pae, + .alloc_pgtables = alloc_pgtables_x86_32_pae, .setup_pgtables = setup_pgtables_x86_32_pae, .start_info = start_info_x86_32, .shared_info = shared_info_x86_32, @@ -1662,7 +1670,7 @@ static struct xc_dom_arch xc_dom_64 = { .page_shift = PAGE_SHIFT_X86, .sizeof_pfn = 8, .alloc_magic_pages = alloc_magic_pages, - .count_pgtables = count_pgtables_x86_64, + .alloc_pgtables = alloc_pgtables_x86_64, .setup_pgtables = setup_pgtables_x86_64, .start_info = start_info_x86_64, .shared_info = shared_info_x86_64, @@ -1678,7 +1686,7 @@ static struct xc_dom_arch xc_hvm_32 = { .page_shift = PAGE_SHIFT_X86, .sizeof_pfn = 4, .alloc_magic_pages = alloc_magic_pages_hvm, - .count_pgtables = NULL, + .alloc_pgtables = alloc_pgtables_hvm, .setup_pgtables = NULL, .start_info = NULL, .shared_info = NULL, -- 2.1.4 _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxx http://lists.xen.org/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |