From mboxrd@z Thu Jan 1 00:00:00 1970 From: Tim Deegan Subject: Re: [PATCH v2 1/4] xen/arm: implement do_hvm_op for ARM Date: Thu, 12 Jul 2012 12:43:20 +0100 Message-ID: <20120712114320.GB89265@ocelot.phlegethon.org> References: <1341399349-31247-1-git-send-email-stefano.stabellini@eu.citrix.com> Mime-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Return-path: Content-Disposition: inline In-Reply-To: <1341399349-31247-1-git-send-email-stefano.stabellini@eu.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: Stefano Stabellini Cc: xen-devel@lists.xensource.com, Ian.Campbell@citrix.com List-Id: xen-devel@lists.xenproject.org At 11:55 +0100 on 04 Jul (1341402946), Stefano Stabellini wrote: > Signed-off-by: Stefano Stabellini Acked-by: Tim Deegan I think we should look at moving this kind of thing into common code, but that can wait until we have a better idea of how many hvm_ops we want to move (and until after 4.2 branches!) > --- > xen/arch/arm/Makefile | 1 + > xen/arch/arm/hvm.c | 60 ++++++++++++++++++++++++++++++++++++++++++ > xen/arch/arm/traps.c | 1 + > xen/include/asm-arm/domain.h | 7 +++++ > 4 files changed, 69 insertions(+), 0 deletions(-) > create mode 100644 xen/arch/arm/hvm.c > > diff --git a/xen/arch/arm/Makefile b/xen/arch/arm/Makefile > index 5a87ba6..634b620 100644 > --- a/xen/arch/arm/Makefile > +++ b/xen/arch/arm/Makefile > @@ -26,6 +26,7 @@ obj-y += traps.o > obj-y += vgic.o > obj-y += vtimer.o > obj-y += vpl011.o > +obj-y += hvm.o > > #obj-bin-y += ....o > > diff --git a/xen/arch/arm/hvm.c b/xen/arch/arm/hvm.c > new file mode 100644 > index 0000000..c11378d > --- /dev/null > +++ b/xen/arch/arm/hvm.c > @@ -0,0 +1,60 @@ > +#include > +#include > +#include > +#include > +#include > +#include > + > +#include > +#include > +#include > + > +#include > + > +long do_hvm_op(unsigned long op, XEN_GUEST_HANDLE(void) arg) > + > +{ > + long rc = 0; > + > + switch ( op ) > + { > + case HVMOP_set_param: > + case HVMOP_get_param: > + { > + struct xen_hvm_param a; > + struct domain *d; > + > + if ( copy_from_guest(&a, arg, 1) ) > + return -EFAULT; > + > + if ( a.index >= HVM_NR_PARAMS ) > + return -EINVAL; > + > + rc = rcu_lock_target_domain_by_id(a.domid, &d); > + if ( rc != 0 ) > + return rc; > + > + if ( op == HVMOP_set_param ) > + { > + d->arch.hvm_domain.params[a.index] = a.value; > + } > + else > + { > + a.value = d->arch.hvm_domain.params[a.index]; > + rc = copy_to_guest(arg, &a, 1) ? -EFAULT : 0; > + } > + > + rcu_unlock_domain(d); > + break; > + } > + > + default: > + { > + printk("%s: Bad HVM op %ld.\n", __func__, op); > + rc = -ENOSYS; > + break; > + } > + } > + > + return rc; > +} > diff --git a/xen/arch/arm/traps.c b/xen/arch/arm/traps.c > index f5f43da..f6e6807 100644 > --- a/xen/arch/arm/traps.c > +++ b/xen/arch/arm/traps.c > @@ -430,6 +430,7 @@ static arm_hypercall_t *arm_hypercall_table[] = { > HYPERCALL(memory_op), > HYPERCALL(physdev_op), > HYPERCALL(sysctl), > + HYPERCALL(hvm_op), > }; > > static void do_debug_trap(struct cpu_user_regs *regs, unsigned int code) > diff --git a/xen/include/asm-arm/domain.h b/xen/include/asm-arm/domain.h > index 2b14545..114a8f6 100644 > --- a/xen/include/asm-arm/domain.h > +++ b/xen/include/asm-arm/domain.h > @@ -5,6 +5,7 @@ > #include > #include > #include > +#include > > /* Represents state corresponding to a block of 32 interrupts */ > struct vgic_irq_rank { > @@ -28,9 +29,15 @@ struct pending_irq > struct list_head lr_queue; > }; > > +struct hvm_domain > +{ > + uint64_t params[HVM_NR_PARAMS]; > +} __cacheline_aligned; > + > struct arch_domain > { > struct p2m_domain p2m; > + struct hvm_domain hvm_domain; > > struct { > /* > -- > 1.7.2.5 > > > _______________________________________________ > Xen-devel mailing list > Xen-devel@lists.xen.org > http://lists.xen.org/xen-devel