From mboxrd@z Thu Jan 1 00:00:00 1970 From: Ian Campbell Subject: [PATCH 16/21] HACK: arm: initial XENMAPSPACE_gmfn_foreign Date: Thu, 28 Jun 2012 14:48:04 +0000 Message-ID: <1340894890-4369-16-git-send-email-ian.campbell@citrix.com> References: <1340894870.10942.63.camel@zakaz.uk.xensource.com> <1340894890-4369-1-git-send-email-ian.campbell@citrix.com> Mime-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Return-path: In-Reply-To: <1340894890-4369-1-git-send-email-ian.campbell@citrix.com> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Sender: xen-devel-bounces@lists.xen.org Errors-To: xen-devel-bounces@lists.xen.org To: xen-devel@lists.xen.org Cc: Ian Campbell List-Id: xen-devel@lists.xenproject.org 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 40ac176..d369ee3 100644 --- a/xen/arch/arm/mm.c +++ b/xen/arch/arm/mm.c @@ -470,12 +470,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; + } + default: + return -ENOSYS; } domain_lock(d); diff --git a/xen/arch/x86/mm.c b/xen/arch/x86/mm.c index c543f03..8190fa0 100644 --- a/xen/arch/x86/mm.c +++ b/xen/arch/x86/mm.c @@ -4573,6 +4573,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 eb1add9..7ebe966 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 */ diff --git a/xen/include/public/memory.h b/xen/include/public/memory.h index 86d02c8..b2adfbe 100644 --- a/xen/include/public/memory.h +++ b/xen/include/public/memory.h @@ -212,11 +212,13 @@ struct xen_add_to_physmap { uint16_t size; /* Source mapping space. */ -#define XENMAPSPACE_shared_info 0 /* shared info page */ -#define XENMAPSPACE_grant_table 1 /* grant table page */ -#define XENMAPSPACE_gmfn 2 /* GMFN */ -#define XENMAPSPACE_gmfn_range 3 /* GMFN range */ - unsigned int space; +#define XENMAPSPACE_shared_info 0 /* shared info page */ +#define XENMAPSPACE_grant_table 1 /* grant table page */ +#define XENMAPSPACE_gmfn 2 /* GMFN */ +#define XENMAPSPACE_gmfn_range 3 /* GMFN range */ +#define XENMAPSPACE_gmfn_foreign 4 /* GMFN from another guest */ + uint16_t space; + domid_t foreign_domid; /* IFF gmfn_foreign */ #define XENMAPIDX_grant_table_status 0x80000000 -- 1.7.9.1