[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH 13/18] arm/altp2m: Make get_page_from_gva ready for altp2m.
Hello Sergej, On 04/07/2016 12:45, Sergej Proskurin wrote: 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 9c8fefd..23b482f 100644 --- a/xen/arch/arm/p2m.c +++ b/xen/arch/arm/p2m.c @@ -1829,10 +1829,11 @@ 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 p2m_domain *p2m = &d->arch.p2m; + struct domain *d = v->domain; + struct p2m_domain *p2m = altp2m_active(d) ? p2m_get_altp2m(v) : p2m_get_hostp2m(d); struct page_info *page = NULL; paddr_t maddr = 0; int rc; @@ -1844,17 +1845,23 @@ struct page_info *get_page_from_gva(struct domain *d, vaddr_t va, unsigned long irq_flags; local_irq_save(irq_flags); - p2m_load_VTTBR(d); + + if ( altp2m_active(d) ) + p2m_load_altp2m_VTTBR(v); + else + p2m_load_VTTBR(d); rc = gvirt_to_maddr(va, &maddr, flags); - p2m_load_VTTBR(current->domain); + if ( altp2m_active(current->domain) ) + p2m_load_altp2m_VTTBR(current); + else + p2m_load_VTTBR(current->domain); + This could be abstracted with a new helper to load the VTTBR for a given vCPU. local_irq_restore(irq_flags); } else - { rc = gvirt_to_maddr(va, &maddr, flags); - } if ( rc ) goto err; Regards, -- Julien Grall _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxx https://lists.xen.org/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |