From mboxrd@z Thu Jan 1 00:00:00 1970 From: Juergen Gross Subject: [PATCH v2 4/5] libxc: split p2m allocation in domain builder from other magic pages Date: Fri, 2 Oct 2015 07:49:46 +0200 Message-ID: <1443764987-23639-5-git-send-email-jgross@suse.com> References: <1443764987-23639-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: <1443764987-23639-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 Cc: Juergen Gross List-Id: xen-devel@lists.xenproject.org Carve out the p2m list allocation from the .alloc_magic_pages hook of the domain builder in order to prepare allocating the p2m list outside of the initial kernel mapping. This will be needed to support loading domains with huge memory (>512 GB). Signed-off-by: Juergen Gross Acked-by: Ian Campbell --- tools/libxc/include/xc_dom.h | 1 + tools/libxc/xc_dom_core.c | 3 +++ tools/libxc/xc_dom_x86.c | 11 ++++++++++- 3 files changed, 14 insertions(+), 1 deletion(-) diff --git a/tools/libxc/include/xc_dom.h b/tools/libxc/include/xc_dom.h index 5eeff15..9117269 100644 --- a/tools/libxc/include/xc_dom.h +++ b/tools/libxc/include/xc_dom.h @@ -197,6 +197,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 (*alloc_p2m_list) (struct xc_dom_image * dom); int (*count_pgtables) (struct xc_dom_image * dom); int (*setup_pgtables) (struct xc_dom_image * dom); diff --git a/tools/libxc/xc_dom_core.c b/tools/libxc/xc_dom_core.c index 85b531a..bd970c5 100644 --- a/tools/libxc/xc_dom_core.c +++ b/tools/libxc/xc_dom_core.c @@ -1047,6 +1047,9 @@ int xc_dom_build_image(struct xc_dom_image *dom) } /* allocate other pages */ + if ( dom->arch_hooks->alloc_p2m_list && + dom->arch_hooks->alloc_p2m_list(dom) != 0 ) + goto err; if ( dom->arch_hooks->alloc_magic_pages(dom) != 0 ) goto err; if ( dom->arch_hooks->count_pgtables ) diff --git a/tools/libxc/xc_dom_x86.c b/tools/libxc/xc_dom_x86.c index e2f3792..972f081 100644 --- a/tools/libxc/xc_dom_x86.c +++ b/tools/libxc/xc_dom_x86.c @@ -439,7 +439,7 @@ pfn_error: /* ------------------------------------------------------------------------ */ -static int alloc_magic_pages(struct xc_dom_image *dom) +static int alloc_p2m_list(struct xc_dom_image *dom) { size_t p2m_alloc_size = dom->p2m_size * dom->arch_hooks->sizeof_pfn; @@ -451,6 +451,13 @@ static int alloc_magic_pages(struct xc_dom_image *dom) if ( dom->p2m_guest == NULL ) return -1; + return 0; +} + +/* ------------------------------------------------------------------------ */ + +static int alloc_magic_pages(struct xc_dom_image *dom) +{ /* allocate special pages */ dom->start_info_pfn = xc_dom_alloc_page(dom, "start info"); dom->xenstore_pfn = xc_dom_alloc_page(dom, "xenstore"); @@ -674,6 +681,7 @@ static struct xc_dom_arch xc_dom_32_pae = { .page_shift = PAGE_SHIFT_X86, .sizeof_pfn = 4, .alloc_magic_pages = alloc_magic_pages, + .alloc_p2m_list = alloc_p2m_list, .count_pgtables = count_pgtables_x86_32_pae, .setup_pgtables = setup_pgtables_x86_32_pae, .start_info = start_info_x86_32, @@ -687,6 +695,7 @@ static struct xc_dom_arch xc_dom_64 = { .page_shift = PAGE_SHIFT_X86, .sizeof_pfn = 8, .alloc_magic_pages = alloc_magic_pages, + .alloc_p2m_list = alloc_p2m_list, .count_pgtables = count_pgtables_x86_64, .setup_pgtables = setup_pgtables_x86_64, .start_info = start_info_x86_64, -- 2.1.4