From mboxrd@z Thu Jan 1 00:00:00 1970 From: Julien Grall Subject: Re: [PATCH v3 05/14] xen: arm: implement XEN_DOMCTL_set_address_size Date: Mon, 11 Nov 2013 12:13:09 +0000 Message-ID: <5280C9D5.4090509@linaro.org> References: <1383842678.3189.15.camel@kazak.uk.xensource.com> <1383842696-8598-5-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: <1383842696-8598-5-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: Ian Campbell Cc: ian.jackson@eu.citrix.com, stefano.stabellini@eu.citrix.com, tim@xen.org, xen-devel@lists.xen.org List-Id: xen-devel@lists.xenproject.org On 11/07/2013 04:44 PM, Ian Campbell wrote: > This is subarch specific to plumb through to arm32 and arm64 versions. > > The toolstack uses this to select 32- vs 64-bit guests (or rather it does on > x86 and soon will for arm too). > > I noticed that domctl.c and sysctl.c weren't including xen/hypercall.h to get > their arch_do_fooctl prototypes, so fix that. > > Signed-off-by: Ian Campbell > --- > xen/arch/arm/arm32/Makefile | 1 + > xen/arch/arm/arm32/domctl.c | 35 +++++++++++++++++++++++ > xen/arch/arm/arm64/Makefile | 1 + > xen/arch/arm/arm64/domctl.c | 59 +++++++++++++++++++++++++++++++++++++++ > xen/arch/arm/domctl.c | 7 ++++- > xen/arch/arm/sysctl.c | 1 + > xen/include/asm-arm/hypercall.h | 3 ++ > 7 files changed, 106 insertions(+), 1 deletion(-) > create mode 100644 xen/arch/arm/arm32/domctl.c > create mode 100644 xen/arch/arm/arm64/domctl.c > > diff --git a/xen/arch/arm/arm32/Makefile b/xen/arch/arm/arm32/Makefile > index aacdcb9..65ecff4 100644 > --- a/xen/arch/arm/arm32/Makefile > +++ b/xen/arch/arm/arm32/Makefile > @@ -7,5 +7,6 @@ obj-y += traps.o > obj-y += domain.o > obj-y += vfp.o > obj-y += smpboot.o > +obj-y += domctl.o > > obj-$(EARLY_PRINTK) += debug.o > diff --git a/xen/arch/arm/arm32/domctl.c b/xen/arch/arm/arm32/domctl.c > new file mode 100644 > index 0000000..c2ca4d3 > --- /dev/null > +++ b/xen/arch/arm/arm32/domctl.c > @@ -0,0 +1,35 @@ > +/****************************************************************************** > + * Subarch-specific domctl.c > + * > + * Copyright (c) 2013, Citrix Systems > + */ > + > +#include > +#include > +#include > +#include > +#include > +#include > +#include > + > +long subarch_do_domctl(struct xen_domctl *domctl, struct domain *d, > + XEN_GUEST_HANDLE_PARAM(xen_domctl_t) u_domctl) > +{ > + switch ( domctl->cmd ) > + { > + case XEN_DOMCTL_set_address_size: > + return domctl->u.address_size.size == 32 ? 0 : -EINVAL; > + default: > + return -ENOSYS; > + } > +} > + > +/* > + * Local variables: > + * mode: C > + * c-file-style: "BSD" > + * c-basic-offset: 4 > + * tab-width: 4 > + * indent-tabs-mode: nil > + * End: > + */ > diff --git a/xen/arch/arm/arm64/Makefile b/xen/arch/arm/arm64/Makefile > index 5d28bad..d2d5875 100644 > --- a/xen/arch/arm/arm64/Makefile > +++ b/xen/arch/arm/arm64/Makefile > @@ -6,5 +6,6 @@ obj-y += traps.o > obj-y += domain.o > obj-y += vfp.o > obj-y += smpboot.o > +obj-y += domctl.o > > obj-$(EARLY_PRINTK) += debug.o > diff --git a/xen/arch/arm/arm64/domctl.c b/xen/arch/arm/arm64/domctl.c > new file mode 100644 > index 0000000..e2b4617 > --- /dev/null > +++ b/xen/arch/arm/arm64/domctl.c > @@ -0,0 +1,59 @@ > +/****************************************************************************** > + * Subarch-specific domctl.c > + * > + * Copyright (c) 2013, Citrix Systems > + */ > + > +#include > +#include > +#include > +#include > +#include > +#include > +#include > + > +static long switch_mode(struct domain *d, enum domain_type type) > +{ > + if ( d == NULL ) > + return -EINVAL; > + if ( d->tot_pages != 0 ) > + return -EBUSY; > + if ( d->arch.type == type ) > + return 0; > + > + d->arch.type = type; > + > + return 0; > +} > + > +long subarch_do_domctl(struct xen_domctl *domctl, struct domain *d, > + XEN_GUEST_HANDLE_PARAM(xen_domctl_t) u_domctl) > +{ > + switch ( domctl->cmd ) > + { > + case XEN_DOMCTL_set_address_size: > + switch ( domctl->u.address_size.size ) > + { > + case 32: > + return switch_mode(d, DOMAIN_PV32); > + case 64: > + return switch_mode(d, DOMAIN_PV64); > + default: > + return -EINVAL; > + } > + break; > + > + default: > + return -ENOSYS; > + } > +} > + > +/* > + * Local variables: > + * mode: C > + * c-file-style: "BSD" > + * c-basic-offset: 4 > + * tab-width: 4 > + * indent-tabs-mode: nil > + * End: > + */ > diff --git a/xen/arch/arm/domctl.c b/xen/arch/arm/domctl.c > index 851ee40..546e86b 100644 > --- a/xen/arch/arm/domctl.c > +++ b/xen/arch/arm/domctl.c > @@ -9,12 +9,17 @@ > #include > #include > #include > +#include > #include > > long arch_do_domctl(struct xen_domctl *domctl, struct domain *d, > XEN_GUEST_HANDLE_PARAM(xen_domctl_t) u_domctl) > { > - return -ENOSYS; > + switch ( domctl->cmd ) > + { > + default: > + return subarch_do_domctl(domctl, d, u_domctl); > + } > } > > void arch_get_info_guest(struct vcpu *v, vcpu_guest_context_u c) > diff --git a/xen/arch/arm/sysctl.c b/xen/arch/arm/sysctl.c > index 6388204..98bab6a 100644 > --- a/xen/arch/arm/sysctl.c > +++ b/xen/arch/arm/sysctl.c > @@ -10,6 +10,7 @@ > #include > #include > #include > +#include I think this line should be in a separate patch. The other part looks good: Acked-by: Julien Grall -- Julien Grall