[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-changelog] [xen staging] x86/mm: make guest_physmap_add_entry() HVM-only
commit cf7de5d9543bba1076fe8ede57b0d314394c943a Author: Jan Beulich <jbeulich@xxxxxxxx> AuthorDate: Tue May 14 16:20:06 2019 +0200 Commit: Jan Beulich <jbeulich@xxxxxxxx> CommitDate: Tue May 14 16:20:06 2019 +0200 x86/mm: make guest_physmap_add_entry() HVM-only Lift its !paging_mode_translate() part into guest_physmap_add_page() (which is what common code calls), eliminating the dummy use of a (HVM-only really) P2M type in the PV case. Suggested-by: George Dunlap <George.Dunlap@xxxxxxxxxxxxx> Signed-off-by: Jan Beulich <jbeulich@xxxxxxxx> Reviewed-by: Wei Liu <wei.liu2@xxxxxxxxxx> Reviewed-by: George Dunlap <george.dunlap@xxxxxxxxxx> --- xen/arch/x86/mm/p2m.c | 43 ++++++++++++++++++++++++++++--------------- xen/include/asm-x86/p2m.h | 11 +++-------- 2 files changed, 31 insertions(+), 23 deletions(-) diff --git a/xen/arch/x86/mm/p2m.c b/xen/arch/x86/mm/p2m.c index 278e1c114e..5ae25a9be5 100644 --- a/xen/arch/x86/mm/p2m.c +++ b/xen/arch/x86/mm/p2m.c @@ -849,22 +849,14 @@ guest_physmap_remove_page(struct domain *d, gfn_t gfn, } int -guest_physmap_add_entry(struct domain *d, gfn_t gfn, mfn_t mfn, - unsigned int page_order, p2m_type_t t) +guest_physmap_add_page(struct domain *d, gfn_t gfn, mfn_t mfn, + unsigned int page_order) { - struct p2m_domain *p2m = p2m_get_hostp2m(d); - unsigned long i; - gfn_t ogfn; - p2m_type_t ot; - p2m_access_t a; - mfn_t omfn; - int pod_count = 0; - int rc = 0; - /* IOMMU for PV guests is handled in get_page_type() and put_page(). */ if ( !paging_mode_translate(d) ) { struct page_info *page = mfn_to_page(mfn); + unsigned long i; /* * Our interface for PV guests wrt IOMMU entries hasn't been very @@ -877,7 +869,7 @@ guest_physmap_add_entry(struct domain *d, gfn_t gfn, mfn_t mfn, * any guest-requested type changes succeed and remove the IOMMU * entry). */ - if ( !need_iommu_pt_sync(d) || t != p2m_ram_rw ) + if ( !need_iommu_pt_sync(d) ) return 0; for ( i = 0; i < (1UL << page_order); ++i, ++page ) @@ -891,6 +883,29 @@ guest_physmap_add_entry(struct domain *d, gfn_t gfn, mfn_t mfn, return 0; } + return guest_physmap_add_entry(d, gfn, mfn, page_order, p2m_ram_rw); +} + +#ifdef CONFIG_HVM +int +guest_physmap_add_entry(struct domain *d, gfn_t gfn, mfn_t mfn, + unsigned int page_order, p2m_type_t t) +{ + struct p2m_domain *p2m = p2m_get_hostp2m(d); + unsigned long i; + gfn_t ogfn; + p2m_type_t ot; + p2m_access_t a; + mfn_t omfn; + int pod_count = 0; + int rc = 0; + + if ( !paging_mode_translate(d) ) + { + ASSERT_UNREACHABLE(); + return -EPERM; + } + /* foreign pages are added thru p2m_add_foreign */ if ( p2m_is_foreign(t) ) return -EINVAL; @@ -1014,7 +1029,6 @@ guest_physmap_add_entry(struct domain *d, gfn_t gfn, mfn_t mfn, gfn_x(gfn), mfn_x(mfn)); rc = p2m_set_entry(p2m, gfn, INVALID_MFN, page_order, p2m_invalid, p2m->default_access); -#ifdef CONFIG_HVM if ( rc == 0 ) { pod_lock(p2m); @@ -1022,7 +1036,6 @@ guest_physmap_add_entry(struct domain *d, gfn_t gfn, mfn_t mfn, BUG_ON(p2m->pod.entry_count < 0); pod_unlock(p2m); } -#endif } out: @@ -1030,7 +1043,7 @@ out: return rc; } - +#endif /* * Modify the p2m type of a single gfn from ot to nt. diff --git a/xen/include/asm-x86/p2m.h b/xen/include/asm-x86/p2m.h index 719513f4ba..2d0bda176f 100644 --- a/xen/include/asm-x86/p2m.h +++ b/xen/include/asm-x86/p2m.h @@ -599,14 +599,9 @@ int guest_physmap_add_entry(struct domain *d, gfn_t gfn, mfn_t mfn, unsigned int page_order, p2m_type_t t); -/* Untyped version for RAM only, for compatibility */ -static inline int guest_physmap_add_page(struct domain *d, - gfn_t gfn, - mfn_t mfn, - unsigned int page_order) -{ - return guest_physmap_add_entry(d, gfn, mfn, page_order, p2m_ram_rw); -} +/* Untyped version for RAM only, for compatibility and PV. */ +int guest_physmap_add_page(struct domain *d, gfn_t gfn, mfn_t mfn, + unsigned int page_order); /* Set a p2m range as populate-on-demand */ int guest_physmap_mark_populate_on_demand(struct domain *d, unsigned long gfn, -- generated by git-patchbot for /home/xen/git/xen.git#staging _______________________________________________ Xen-changelog mailing list Xen-changelog@xxxxxxxxxxxxxxxxxxxx https://lists.xenproject.org/xen-changelog
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |