From patchwork Fri Jul 29 16:28:56 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: =?utf-8?q?Roger_Pau_Monn=C3=A9?= X-Patchwork-Id: 9252677 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork.web.codeaurora.org (Postfix) with ESMTP id EB49260757 for ; Fri, 29 Jul 2016 16:31:45 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id DBE02283E1 for ; Fri, 29 Jul 2016 16:31:45 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id D09C3283E3; Fri, 29 Jul 2016 16:31:45 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-4.2 required=2.0 tests=BAYES_00, RCVD_IN_DNSWL_MED autolearn=ham version=3.3.1 Received: from lists.xenproject.org (lists.xenproject.org [192.237.175.120]) (using TLSv1.2 with cipher AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by mail.wl.linuxfoundation.org (Postfix) with ESMTPS id 5591E283E1 for ; Fri, 29 Jul 2016 16:31:45 +0000 (UTC) Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.84_2) (envelope-from ) id 1bTAey-0003Ol-5x; Fri, 29 Jul 2016 16:29:16 +0000 Received: from mail6.bemta5.messagelabs.com ([195.245.231.135]) by lists.xenproject.org with esmtp (Exim 4.84_2) (envelope-from ) id 1bTAex-0003OC-Bh for xen-devel@lists.xenproject.org; Fri, 29 Jul 2016 16:29:15 +0000 Received: from [85.158.139.211] by server-11.bemta-5.messagelabs.com id 53/BC-12614-A548B975; Fri, 29 Jul 2016 16:29:14 +0000 X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFlrCIsWRWlGSWpSXmKPExsXitHSDvW5Uy+x wgz9fhC2+b5nM5MDocfjDFZYAxijWzLyk/IoE1oy3fbYF2w0qWk/2szUw9qt3MXJySAj4S3RP 3cQKYrMJ6EhcnLuTrYuRg0NEQEXi9l6DLkYuDmaB/YwSx3YcYwOpERZwk3jY+4ERpIZFQFWiZ 60oSJhXwEXi6o1LzBAjdSUenvvNClLCKeAq8X9VNYgpBFTS0BQKUS0ocXLmExYQm1lAU6J1+2 92CFteonnrbLApQgKKEv3zHoAdIyHALfG3234CI/8sJN2zkHTPQtK9gJF5FaNGcWpRWWqRrpG ZXlJRZnpGSW5iZo6uoYGpXm5qcXFiempOYlKxXnJ+7iZGYOjVMzAw7mC8PdnvEKMkB5OSKO+C FbPChfiS8lMqMxKLM+KLSnNSiw8xynBwKEnwJjTPDhcSLEpNT61Iy8wBRgFMWoKDR0mEd0sjU Jq3uCAxtzgzHSJ1ilFRSpxXH6RPACSRUZoH1waLvEuMslLCvIwMDAxCPAWpRbmZJajyrxjFOR iVhHmZQabwZOaVwE1/BbSYCWhxcewMkMUliQgpqQZGsR+nZrRdrTOOzLy21HLj8fPrLj9Y87X 8+ryFZfFVX15YiD+NUgx9Lzr5mtTTgFci/omnlvPuYjn2YK1Qy/4VLX/mVMQqt889sdAqq7Pj MkPa8umXtN+8jTxYNuPC1C+b7I+HZL+f8mTyI+ketd9r9zBwVEQ4RoR87V6xqU9oV6JBCcOmi rlXmZVYijMSDbWYi4oTAarwh6+3AgAA X-Env-Sender: prvs=011b0443a=roger.pau@citrix.com X-Msg-Ref: server-2.tower-206.messagelabs.com!1469809751!36027972!2 X-Originating-IP: [66.165.176.63] X-SpamReason: No, hits=0.0 required=7.0 tests=sa_preprocessor: VHJ1c3RlZCBJUDogNjYuMTY1LjE3Ni42MyA9PiAzMDYwNDg=\n, received_headers: No Received headers X-StarScan-Received: X-StarScan-Version: 8.77; banners=-,-,- X-VirusChecked: Checked Received: (qmail 44828 invoked from network); 29 Jul 2016 16:29:13 -0000 Received: from smtp02.citrix.com (HELO SMTP02.CITRIX.COM) (66.165.176.63) by server-2.tower-206.messagelabs.com with RC4-SHA encrypted SMTP; 29 Jul 2016 16:29:13 -0000 X-IronPort-AV: E=Sophos;i="5.28,440,1464652800"; d="scan'208";a="376340830" From: Roger Pau Monne To: Date: Fri, 29 Jul 2016 18:28:56 +0200 Message-ID: <1469809747-11176-2-git-send-email-roger.pau@citrix.com> X-Mailer: git-send-email 2.7.4 (Apple Git-66) In-Reply-To: <1469809747-11176-1-git-send-email-roger.pau@citrix.com> References: <1469809747-11176-1-git-send-email-roger.pau@citrix.com> MIME-Version: 1.0 X-DLP: MIA1 Cc: George Dunlap , Andrew Cooper , Tim Deegan , Jan Beulich , Roger Pau Monne Subject: [Xen-devel] [PATCH RFC 01/12] x86/paging: introduce paging_set_allocation X-BeenThere: xen-devel@lists.xen.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: Xen developer discussion List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xen.org Sender: "Xen-devel" X-Virus-Scanned: ClamAV using ClamSMTP ... and remove hap_set_alloc_for_pvh_dom0. Signed-off-by: Roger Pau Monné --- Cc: Jan Beulich Cc: Andrew Cooper Cc: George Dunlap Cc: Tim Deegan --- xen/arch/x86/domain_build.c | 7 +++---- xen/arch/x86/mm/hap/hap.c | 14 +------------- xen/arch/x86/mm/paging.c | 16 ++++++++++++++++ xen/arch/x86/mm/shadow/common.c | 5 ++--- xen/include/asm-x86/hap.h | 3 ++- xen/include/asm-x86/paging.h | 3 +++ xen/include/asm-x86/shadow.h | 6 ++++++ 7 files changed, 33 insertions(+), 21 deletions(-) diff --git a/xen/arch/x86/domain_build.c b/xen/arch/x86/domain_build.c index 0a02d65..d7d4afc 100644 --- a/xen/arch/x86/domain_build.c +++ b/xen/arch/x86/domain_build.c @@ -35,7 +35,6 @@ #include #include /* for bzimage_parse */ #include -#include #include #include @@ -1383,15 +1382,15 @@ int __init construct_dom0( nr_pages); } - if ( is_pvh_domain(d) ) - hap_set_alloc_for_pvh_dom0(d, dom0_paging_pages(d, nr_pages)); - /* * We enable paging mode again so guest_physmap_add_page will do the * right thing for us. */ d->arch.paging.mode = save_pvh_pg_mode; + if ( is_pvh_domain(d) ) + paging_set_allocation(d, dom0_paging_pages(d, nr_pages)); + /* Write the phys->machine and machine->phys table entries. */ for ( pfn = 0; pfn < count; pfn++ ) { diff --git a/xen/arch/x86/mm/hap/hap.c b/xen/arch/x86/mm/hap/hap.c index 3218fa2..b49b38f 100644 --- a/xen/arch/x86/mm/hap/hap.c +++ b/xen/arch/x86/mm/hap/hap.c @@ -334,7 +334,7 @@ hap_get_allocation(struct domain *d) /* Set the pool of pages to the required number of pages. * Returns 0 for success, non-zero for failure. */ -static unsigned int +unsigned int hap_set_allocation(struct domain *d, unsigned int pages, int *preempted) { struct page_info *pg; @@ -638,18 +638,6 @@ int hap_domctl(struct domain *d, xen_domctl_shadow_op_t *sc, } } -void __init hap_set_alloc_for_pvh_dom0(struct domain *d, - unsigned long hap_pages) -{ - int rc; - - paging_lock(d); - rc = hap_set_allocation(d, hap_pages, NULL); - paging_unlock(d); - - BUG_ON(rc); -} - static const struct paging_mode hap_paging_real_mode; static const struct paging_mode hap_paging_protected_mode; static const struct paging_mode hap_paging_pae_mode; diff --git a/xen/arch/x86/mm/paging.c b/xen/arch/x86/mm/paging.c index 107fc8c..1b270df 100644 --- a/xen/arch/x86/mm/paging.c +++ b/xen/arch/x86/mm/paging.c @@ -953,6 +953,22 @@ void paging_write_p2m_entry(struct p2m_domain *p2m, unsigned long gfn, safe_write_pte(p, new); } +int paging_set_allocation(struct domain *d, unsigned long pages) +{ + int rc; + + ASSERT(paging_mode_enabled(d)); + + paging_lock(d); + if ( hap_enabled(d) ) + rc = hap_set_allocation(d, pages, NULL); + else + rc = sh_set_allocation(d, pages, NULL); + paging_unlock(d); + + return rc; +} + /* * Local variables: * mode: C diff --git a/xen/arch/x86/mm/shadow/common.c b/xen/arch/x86/mm/shadow/common.c index c22362f..452e22e 100644 --- a/xen/arch/x86/mm/shadow/common.c +++ b/xen/arch/x86/mm/shadow/common.c @@ -1604,9 +1604,8 @@ shadow_free_p2m_page(struct domain *d, struct page_info *pg) * Input will be rounded up to at least shadow_min_acceptable_pages(), * plus space for the p2m table. * Returns 0 for success, non-zero for failure. */ -static unsigned int sh_set_allocation(struct domain *d, - unsigned int pages, - int *preempted) +unsigned int sh_set_allocation(struct domain *d, unsigned int pages, + int *preempted) { struct page_info *sp; unsigned int lower_bound; diff --git a/xen/include/asm-x86/hap.h b/xen/include/asm-x86/hap.h index c613836..e3c9c98 100644 --- a/xen/include/asm-x86/hap.h +++ b/xen/include/asm-x86/hap.h @@ -46,7 +46,8 @@ int hap_track_dirty_vram(struct domain *d, XEN_GUEST_HANDLE_64(uint8) dirty_bitmap); extern const struct paging_mode *hap_paging_get_mode(struct vcpu *); -void hap_set_alloc_for_pvh_dom0(struct domain *d, unsigned long num_pages); +unsigned int hap_set_allocation(struct domain *d, unsigned int pages, + int *preempted); #endif /* XEN_HAP_H */ diff --git a/xen/include/asm-x86/paging.h b/xen/include/asm-x86/paging.h index a1401ab..6598007 100644 --- a/xen/include/asm-x86/paging.h +++ b/xen/include/asm-x86/paging.h @@ -347,6 +347,9 @@ void pagetable_dying(struct domain *d, paddr_t gpa); void paging_dump_domain_info(struct domain *d); void paging_dump_vcpu_info(struct vcpu *v); +/* Set pool of pages for paging. */ +int paging_set_allocation(struct domain *d, unsigned long pages); + #endif /* XEN_PAGING_H */ /* diff --git a/xen/include/asm-x86/shadow.h b/xen/include/asm-x86/shadow.h index 6d0aefb..bc068ec 100644 --- a/xen/include/asm-x86/shadow.h +++ b/xen/include/asm-x86/shadow.h @@ -83,6 +83,10 @@ void sh_remove_shadows(struct domain *d, mfn_t gmfn, int fast, int all); /* Discard _all_ mappings from the domain's shadows. */ void shadow_blow_tables_per_domain(struct domain *d); +/* Set the pool of shadow pages to the required number of pages. */ +unsigned int sh_set_allocation(struct domain *d, unsigned int pages, + int *preempted); + #else /* !CONFIG_SHADOW_PAGING */ #define shadow_teardown(d, p) ASSERT(is_pv_domain(d)) @@ -91,6 +95,8 @@ void shadow_blow_tables_per_domain(struct domain *d); ({ ASSERT(is_pv_domain(d)); -EOPNOTSUPP; }) #define shadow_track_dirty_vram(d, begin_pfn, nr, bitmap) \ ({ ASSERT_UNREACHABLE(); -EOPNOTSUPP; }) +#define sh_set_allocation(d, pages, preempted) \ + ({ ASSERT_UNREACHABLE(); -EOPNOTSUPP; }) static inline void sh_remove_shadows(struct domain *d, mfn_t gmfn, bool_t fast, bool_t all) {}