[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH v2 6/6] xen/arm: grant table
On Fri, 2012-07-20 at 16:05 +0100, Stefano Stabellini wrote: > Implement XENMAPSPACE_grant_table and grant_table_op. > > Introduce an HVM_PARAM to tell the guest where to map the grant table > (HVM_PARAM_GRANT_START_PFN), similarly to what we do with > HVM_PARAM_CONSOLE_PFN and HVM_PARAM_STORE_PFN. > However HVM_PARAM_GRANT_START_PFN is also going to be used by dom0, so > we set the parameter in Xen rather than libxc. > Using HVM_PARAM_GRANT_START_PFN removes the need for a platform pci > device. In principal the guest can use whatever free (or not free) PFN space it wants for this region, right? I suspect hybrid on x86 has a similar requirement and if we are going to add this sort of thing we should make sure that we can satisfy both architectures. Or would it be better to use existing per-arch mechanisms to describe the memory map (E820 on x86 and DTB on ARM)? They already describe the rest of the memory layout. The foreign page mapping stuff also needs to find a similar PFN region to use. > > Statically set HVM_PARAM_GRANT_START_PFN to 0xb0000000 for now. > > Signed-off-by: Stefano Stabellini <stefano.stabellini@xxxxxxxxxxxxx> > Acked-by: Tim Deegan <tim@xxxxxxx> > --- > xen/arch/arm/domain.c | 3 +++ > xen/arch/arm/mm.c | 29 ++++++++++++++++++++++++++++- > xen/arch/arm/traps.c | 1 + > xen/include/public/hvm/params.h | 4 +++- > 4 files changed, 35 insertions(+), 2 deletions(-) > > diff --git a/xen/arch/arm/domain.c b/xen/arch/arm/domain.c > index 6e1e08a..7c56cf3 100644 > --- a/xen/arch/arm/domain.c > +++ b/xen/arch/arm/domain.c > @@ -345,6 +345,9 @@ int arch_domain_create(struct domain *d, unsigned int > domcr_flags) > > if ( (rc = p2m_alloc_table(d)) != 0 ) > goto fail; > + > + /* XXX: select this dynamically */ > + d->arch.hvm_domain.params[HVM_PARAM_GRANT_START_PFN] = 0xb0000; > } > > if ( (rc = domain_vgic_init(d)) != 0 ) > diff --git a/xen/arch/arm/mm.c b/xen/arch/arm/mm.c > index 7033023..2f28a18 100644 > --- a/xen/arch/arm/mm.c > +++ b/xen/arch/arm/mm.c > @@ -25,6 +25,7 @@ > #include <xen/mm.h> > #include <xen/preempt.h> > #include <xen/errno.h> > +#include <xen/grant_table.h> > #include <xen/guest_access.h> > #include <asm/page.h> > #include <asm/current.h> > @@ -477,7 +478,7 @@ static int xenmem_add_to_physmap_once( > struct domain *d, > const struct xen_add_to_physmap *xatp) > { > - unsigned long mfn = 0; > + unsigned long mfn = 0, idx = 0; > int rc; > > switch ( xatp->space ) > @@ -506,6 +507,32 @@ static int xenmem_add_to_physmap_once( > rcu_unlock_domain(od); > break; > } > + case XENMAPSPACE_grant_table: > + spin_lock(&d->grant_table->lock); > + > + if ( d->grant_table->gt_version == 0 ) > + d->grant_table->gt_version = 1; > + > + idx = xatp->idx; > + if ( d->grant_table->gt_version == 2 && > + (xatp->idx & XENMAPIDX_grant_table_status) ) > + { > + idx &= ~XENMAPIDX_grant_table_status; > + if ( idx < nr_status_frames(d->grant_table) ) > + mfn = virt_to_mfn(d->grant_table->status[idx]); > + } > + else > + { > + if ( (idx >= nr_grant_frames(d->grant_table)) && > + (idx < max_nr_grant_frames) ) > + gnttab_grow_table(d, idx + 1); > + > + if ( idx < nr_grant_frames(d->grant_table) ) > + mfn = virt_to_mfn(d->grant_table->shared_raw[idx]); > + } > + > + spin_unlock(&d->grant_table->lock); > + break; > default: > return -ENOSYS; > } > diff --git a/xen/arch/arm/traps.c b/xen/arch/arm/traps.c > index 3900545..cdbd11f 100644 > --- a/xen/arch/arm/traps.c > +++ b/xen/arch/arm/traps.c > @@ -431,6 +431,7 @@ static arm_hypercall_t *arm_hypercall_table[] = { > HYPERCALL(physdev_op), > HYPERCALL(sysctl), > HYPERCALL(hvm_op), > + HYPERCALL(grant_table_op), > }; > > static void do_debug_trap(struct cpu_user_regs *regs, unsigned int code) > diff --git a/xen/include/public/hvm/params.h b/xen/include/public/hvm/params.h > index 55c1b57..a2da05d 100644 > --- a/xen/include/public/hvm/params.h > +++ b/xen/include/public/hvm/params.h > @@ -147,6 +147,8 @@ > #define HVM_PARAM_ACCESS_RING_PFN 28 > #define HVM_PARAM_SHARING_RING_PFN 29 > > -#define HVM_NR_PARAMS 30 > +#define HVM_PARAM_GRANT_START_PFN 30 > + > +#define HVM_NR_PARAMS 31 > > #endif /* __XEN_PUBLIC_HVM_PARAMS_H__ */ _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxx http://lists.xen.org/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |