|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH for-4.12 v2 2/8] xen/arm: p2m: Introduce p2m_get_page_from_gfn
On Thu, 20 Dec 2018, Julien Grall wrote:
> In a follow-up patches, we will need to handle get_page_from_gfn
^ remove a
Aside from that:
Reviewed-by: Stefano Stabellini <sstabellini@xxxxxxxxxx>
> differently for DOMID_XEN. To keep the code simple move the current
> content in a new separate helper p2m_get_page_from_gfn.
>
> Note the new helper is a not anymore a static inline function as the helper
> is quite complex.
>
> Finally, take the opportunity to use typesafe gfn as the change is
> minor.
>
> Signed-off-by: Julien Grall <julien.grall@xxxxxxx>
> Reviewed-by: Andrii Anisov <andrii_anisov@xxxxxxxx>
>
> ---
> Changes in v2:
> - Add Andrii's reviewed-by
> ---
> xen/arch/arm/p2m.c | 32 ++++++++++++++++++++++++++++++++
> xen/include/asm-arm/p2m.h | 33 ++++-----------------------------
> 2 files changed, 36 insertions(+), 29 deletions(-)
>
> diff --git a/xen/arch/arm/p2m.c b/xen/arch/arm/p2m.c
> index 2b5e43f50a..cd34149d13 100644
> --- a/xen/arch/arm/p2m.c
> +++ b/xen/arch/arm/p2m.c
> @@ -406,6 +406,38 @@ mfn_t p2m_lookup(struct domain *d, gfn_t gfn, p2m_type_t
> *t)
> return mfn;
> }
>
> +struct page_info *p2m_get_page_from_gfn(struct domain *d, gfn_t gfn,
> + p2m_type_t *t)
> +{
> + struct page_info *page;
> + p2m_type_t p2mt;
> + mfn_t mfn = p2m_lookup(d, gfn, &p2mt);
> +
> + if (t)
> + *t = p2mt;
> +
> + if ( !p2m_is_any_ram(p2mt) )
> + return NULL;
> +
> + if ( !mfn_valid(mfn) )
> + return NULL;
> + page = mfn_to_page(mfn);
> +
> + /*
> + * get_page won't work on foreign mapping because the page doesn't
> + * belong to the current domain.
> + */
> + if ( p2m_is_foreign(p2mt) )
> + {
> + struct domain *fdom = page_get_owner_and_reference(page);
> + ASSERT(fdom != NULL);
> + ASSERT(fdom != d);
> + return page;
> + }
> +
> + return (get_page(page, d) ? page: NULL);
> +}
> +
> int guest_physmap_mark_populate_on_demand(struct domain *d,
> unsigned long gfn,
> unsigned int order)
> diff --git a/xen/include/asm-arm/p2m.h b/xen/include/asm-arm/p2m.h
> index 01cd3ee4b5..4db8e8709d 100644
> --- a/xen/include/asm-arm/p2m.h
> +++ b/xen/include/asm-arm/p2m.h
> @@ -289,38 +289,13 @@ typedef unsigned int p2m_query_t;
> #define P2M_ALLOC (1u<<0) /* Populate PoD and paged-out entries */
> #define P2M_UNSHARE (1u<<1) /* Break CoW sharing */
>
> +struct page_info *p2m_get_page_from_gfn(struct domain *d, gfn_t gfn,
> + p2m_type_t *t);
> +
> static inline struct page_info *get_page_from_gfn(
> struct domain *d, unsigned long gfn, p2m_type_t *t, p2m_query_t q)
> {
> - struct page_info *page;
> - p2m_type_t p2mt;
> - mfn_t mfn = p2m_lookup(d, _gfn(gfn), &p2mt);
> -
> - if (t)
> - *t = p2mt;
> -
> - if ( !p2m_is_any_ram(p2mt) )
> - return NULL;
> -
> - if ( !mfn_valid(mfn) )
> - return NULL;
> - page = mfn_to_page(mfn);
> -
> - /*
> - * get_page won't work on foreign mapping because the page doesn't
> - * belong to the current domain.
> - */
> - if ( p2m_is_foreign(p2mt) )
> - {
> - struct domain *fdom = page_get_owner_and_reference(page);
> - ASSERT(fdom != NULL);
> - ASSERT(fdom != d);
> - return page;
> - }
> -
> - if ( !get_page(page, d) )
> - return NULL;
> - return page;
> + return p2m_get_page_from_gfn(d, _gfn(gfn), t);
> }
>
> int get_page_type(struct page_info *page, unsigned long type);
> --
> 2.11.0
>
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxxx
https://lists.xenproject.org/mailman/listinfo/xen-devel
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |