From mboxrd@z Thu Jan 1 00:00:00 1970 From: Juergen Gross Subject: [PATCH v4 3/9] libxc: rename domain builder count_pgtables to alloc_pgtables Date: Thu, 5 Nov 2015 15:36:29 +0100 Message-ID: <1446734195-20257-4-git-send-email-jgross@suse.com> References: <1446734195-20257-1-git-send-email-jgross@suse.com> Mime-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Return-path: In-Reply-To: <1446734195-20257-1-git-send-email-jgross@suse.com> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Sender: xen-devel-bounces@lists.xen.org Errors-To: xen-devel-bounces@lists.xen.org To: xen-devel@lists.xen.org, Ian.Campbell@citrix.com, ian.jackson@eu.citrix.com, stefano.stabellini@eu.citrix.com, wei.liu2@citrix.com, roger.pau@citrix.com Cc: Juergen Gross List-Id: xen-devel@lists.xenproject.org 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 Acked-by: Wei Liu --- 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 68d6848..19d45f4 100644 --- a/tools/libxc/include/xc_dom.h +++ b/tools/libxc/include/xc_dom.h @@ -220,7 +220,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 a14d477..74de3c3 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 ed43c28..ea32b00 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, @@ -1620,6 +1622,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__); @@ -1643,7 +1651,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, @@ -1659,7 +1667,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, @@ -1675,7 +1683,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