[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-ia64-devel] [PATCH][RFC]copy_from/to_guest
Hi. Sorry for delayed point out. At first I thought your hack would be replaced with xencomm. However it seems to take a while to merge xencomm for IA64 so that I decided to point it out now. On Fri, Aug 11, 2006 at 07:01:10PM +0900, Kouya SHIMURA wrote: Content-Description: message body text > diff -r fc6c3d866477 xen/arch/ia64/xen/vcpu.c > --- a/xen/arch/ia64/xen/vcpu.c Wed Aug 09 10:32:23 2006 -0600 > +++ b/xen/arch/ia64/xen/vcpu.c Fri Aug 11 18:35:31 2006 +0900 > @@ -2215,3 +2215,27 @@ IA64FAULT vcpu_ptr_i(VCPU *vcpu,UINT64 v > > return IA64_NO_FAULT; > } > + > +int ia64_map_hypercall_param(void) > +{ > + struct vcpu *v = current; > + struct domain *d = current->domain; > + u64 vaddr = v->arch.hypercall_param.va & PAGE_MASK; > + volatile pte_t* pte; > + > + if (v->arch.hypercall_param.va == 0) > + return FALSE; > + pte = lookup_noalloc_domain_pte(d, v->arch.hypercall_param.pa1); > + if (!pte || !pte_present(*pte)) > + return FALSE; > + vcpu_itc_no_srlz(v, 2, vaddr, pte_val(*pte), -1UL, PAGE_SHIFT); > + if (v->arch.hypercall_param.pa2) { > + vaddr += PAGE_SIZE; > + pte = lookup_noalloc_domain_pte(d, v->arch.hypercall_param.pa2); > + if (pte && pte_present(*pte)) { > + vcpu_itc_no_srlz(v, 2, vaddr, pte_val(*pte), -1UL, > PAGE_SHIFT); > + } > + } > + ia64_srlz_d(); > + return TRUE; > +} This isn't SMP-safe. Since the p2m table is locklesss, another vcpu might change the p2m table entry after checking pte_present() but before vcpu_itc_no_srlz(). You must be aware of it. -- yamahata _______________________________________________ Xen-ia64-devel mailing list Xen-ia64-devel@xxxxxxxxxxxxxxxxxxx http://lists.xensource.com/xen-ia64-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |