[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH 34/38] HACK: arm: initial XENMAPSPACE_gmfn_foreign
On Fri, 1 Jun 2012, Ian Campbell wrote: > Should use same interface as hybrid x86. > --- > xen/arch/arm/mm.c | 32 ++++++++++++++++++++++++++------ > xen/arch/x86/mm.c | 2 ++ > xen/include/public/arch-arm.h | 1 + > xen/include/public/memory.h | 12 +++++++----- > 4 files changed, 36 insertions(+), 11 deletions(-) > > diff --git a/xen/arch/arm/mm.c b/xen/arch/arm/mm.c > index ab52171..1832e7f 100644 > --- a/xen/arch/arm/mm.c > +++ b/xen/arch/arm/mm.c > @@ -480,12 +480,32 @@ static int xenmem_add_to_physmap_once( > > switch ( xatp->space ) > { > - case XENMAPSPACE_shared_info: > - if ( xatp->idx == 0 ) > - mfn = virt_to_mfn(d->shared_info); > - break; > - default: > - return -ENOSYS; > + case XENMAPSPACE_shared_info: > + if ( xatp->idx == 0 ) > + mfn = virt_to_mfn(d->shared_info); > + break; > + case XENMAPSPACE_gmfn_foreign: > + { > + paddr_t maddr; > + struct domain *od; > + > + rc = rcu_lock_target_domain_by_id(xatp->foreign_domid, &od); > + if ( rc < 0 ) > + return rc; > + maddr = p2m_lookup(od, xatp->idx << PAGE_SHIFT); > + if ( maddr == INVALID_PADDR ) > + { > + printk("bad p2m lookup\n"); > + dump_p2m_lookup(od, xatp->idx << PAGE_SHIFT); > + rcu_unlock_domain(od); > + return -EINVAL; > + } > + mfn = maddr >> PAGE_SHIFT; > + rcu_unlock_domain(od); > + break; > + } It is probably a good idea at least to test xatp->size and WARN if it is not 1 page. > + default: > + return -ENOSYS; > } > > domain_lock(d); > diff --git a/xen/arch/x86/mm.c b/xen/arch/x86/mm.c > index 876e1ef..d6c90f9 100644 > --- a/xen/arch/x86/mm.c > +++ b/xen/arch/x86/mm.c > @@ -4572,6 +4572,8 @@ static int xenmem_add_to_physmap_once( > mfn = idx; > page = mfn_to_page(mfn); > break; > + case XENMAPSPACE_gmfn_foreign: > + return -ENOSYS; > } > default: > break; > diff --git a/xen/include/public/arch-arm.h b/xen/include/public/arch-arm.h > index e915cbf..b52bfc7 100644 > --- a/xen/include/public/arch-arm.h > +++ b/xen/include/public/arch-arm.h > @@ -121,6 +121,7 @@ typedef uint64_t xen_pfn_t; > #define XEN_LEGACY_MAX_VCPUS 1 > > typedef uint32_t xen_ulong_t; > +#define PRI_xen_ulong PRIx32 > > struct vcpu_guest_context { > struct cpu_user_regs user_regs; /* User-level CPU registers > */ Why did you need to define this here? _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxx http://lists.xen.org/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |