|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH 02/22] xen/arm: p2m: Pass the vCPU in parameter to get_page_from_gva
On Wed, 20 Jul 2016, Julien Grall wrote:
> The function get_page_from_gva translates a guest virtual address to a
> machine address. The translation involves the register VTTBR_EL2,
> TTBR0_EL1, TTBR1_EL1 and SCTLR_EL1. Whilst the first register is per
> domain (the p2m is common to every vCPUs), the last 3 are per-vCPU.
>
> Therefore, the function should take the vCPU in parameter and not the
> domain. Fixing the actual code path will be done a separate patch.
>
> Signed-off-by: Julien Grall <julien.grall@xxxxxxx>
Reviewed-by: Stefano Stabellini <sstabellini@xxxxxxxxxx>
> xen/arch/arm/guestcopy.c | 6 +++---
> xen/arch/arm/p2m.c | 3 ++-
> xen/arch/arm/traps.c | 2 +-
> xen/include/asm-arm/mm.h | 2 +-
> 4 files changed, 7 insertions(+), 6 deletions(-)
>
> diff --git a/xen/arch/arm/guestcopy.c b/xen/arch/arm/guestcopy.c
> index ce1c3c3..413125f 100644
> --- a/xen/arch/arm/guestcopy.c
> +++ b/xen/arch/arm/guestcopy.c
> @@ -17,7 +17,7 @@ static unsigned long raw_copy_to_guest_helper(void *to,
> const void *from,
> unsigned size = min(len, (unsigned)PAGE_SIZE - offset);
> struct page_info *page;
>
> - page = get_page_from_gva(current->domain, (vaddr_t) to, GV2M_WRITE);
> + page = get_page_from_gva(current, (vaddr_t) to, GV2M_WRITE);
> if ( page == NULL )
> return len;
>
> @@ -64,7 +64,7 @@ unsigned long raw_clear_guest(void *to, unsigned len)
> unsigned size = min(len, (unsigned)PAGE_SIZE - offset);
> struct page_info *page;
>
> - page = get_page_from_gva(current->domain, (vaddr_t) to, GV2M_WRITE);
> + page = get_page_from_gva(current, (vaddr_t) to, GV2M_WRITE);
> if ( page == NULL )
> return len;
>
> @@ -96,7 +96,7 @@ unsigned long raw_copy_from_guest(void *to, const void
> __user *from, unsigned le
> unsigned size = min(len, (unsigned)(PAGE_SIZE - offset));
> struct page_info *page;
>
> - page = get_page_from_gva(current->domain, (vaddr_t) from, GV2M_READ);
> + page = get_page_from_gva(current, (vaddr_t) from, GV2M_READ);
> if ( page == NULL )
> return len;
>
> diff --git a/xen/arch/arm/p2m.c b/xen/arch/arm/p2m.c
> index a4bc55a..1111d6f 100644
> --- a/xen/arch/arm/p2m.c
> +++ b/xen/arch/arm/p2m.c
> @@ -1521,9 +1521,10 @@ err:
> return page;
> }
>
> -struct page_info *get_page_from_gva(struct domain *d, vaddr_t va,
> +struct page_info *get_page_from_gva(struct vcpu *v, vaddr_t va,
> unsigned long flags)
> {
> + struct domain *d = v->domain;
> struct p2m_domain *p2m = &d->arch.p2m;
> struct page_info *page = NULL;
> paddr_t maddr = 0;
> diff --git a/xen/arch/arm/traps.c b/xen/arch/arm/traps.c
> index a2eb1da..06a8ee5 100644
> --- a/xen/arch/arm/traps.c
> +++ b/xen/arch/arm/traps.c
> @@ -955,7 +955,7 @@ static void show_guest_stack(struct vcpu *v, struct
> cpu_user_regs *regs)
> return;
> }
>
> - page = get_page_from_gva(v->domain, sp, GV2M_READ);
> + page = get_page_from_gva(v, sp, GV2M_READ);
> if ( page == NULL )
> {
> printk("Failed to convert stack to physical address\n");
> diff --git a/xen/include/asm-arm/mm.h b/xen/include/asm-arm/mm.h
> index 68cf203..19eadd2 100644
> --- a/xen/include/asm-arm/mm.h
> +++ b/xen/include/asm-arm/mm.h
> @@ -281,7 +281,7 @@ static inline void *page_to_virt(const struct page_info
> *pg)
> return mfn_to_virt(page_to_mfn(pg));
> }
>
> -struct page_info *get_page_from_gva(struct domain *d, vaddr_t va,
> +struct page_info *get_page_from_gva(struct vcpu *v, vaddr_t va,
> unsigned long flags);
>
> /*
> --
> 1.9.1
>
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
https://lists.xen.org/xen-devel
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |