[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.
Hi Julien, On 07/04/2016 10:34 PM, Julien Grall wrote: > 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. > For my next patch series, I will think about an abstraction of the function p2m_load[_altp2m]_VTTBR or a merge of both functions into one, as discussed in path #11. Thank you. >> local_irq_restore(irq_flags); >> } >> else >> - { >> rc = gvirt_to_maddr(va, &maddr, flags); >> - } >> >> if ( rc ) >> goto err; > > Regards, > Cheers, ~Sergej _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxx https://lists.xen.org/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |