From mboxrd@z Thu Jan 1 00:00:00 1970 From: vijay.kilari@gmail.com Subject: [RFC PATCH] xen/arm: check on domain type against hardware support Date: Thu, 18 Sep 2014 17:43:47 +0530 Message-ID: <1411042429-17108-2-git-send-email-vijay.kilari@gmail.com> References: <1411042429-17108-1-git-send-email-vijay.kilari@gmail.com> Mime-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Return-path: In-Reply-To: <1411042429-17108-1-git-send-email-vijay.kilari@gmail.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@citrix.com, julien.grall@linaro.org, stefano.stabellini@eu.citrix.com, stefano.stabellini@citrix.com, tim@xen.org, xen-devel@lists.xen.org Cc: Prasun.Kapoor@caviumnetworks.com, Vijaya Kumar K , manish.jaggi@caviumnetworks.com, vijay.kilari@gmail.com List-Id: xen-devel@lists.xenproject.org From: Vijaya Kumar K Some arm64 platforms implement only aarch64 mode. So allow domains that are only 64-bit Signed-off-by: Vijaya Kumar K --- xen/arch/arm/arm64/domctl.c | 6 +++++- xen/arch/arm/domain_build.c | 7 +++++++ xen/arch/arm/setup.c | 7 +++++-- 3 files changed, 17 insertions(+), 3 deletions(-) diff --git a/xen/arch/arm/arm64/domctl.c b/xen/arch/arm/arm64/domctl.c index 41e2562..b2f64ae 100644 --- a/xen/arch/arm/arm64/domctl.c +++ b/xen/arch/arm/arm64/domctl.c @@ -11,6 +11,7 @@ #include #include #include +#include static long switch_mode(struct domain *d, enum domain_type type) { @@ -35,7 +36,10 @@ long subarch_do_domctl(struct xen_domctl *domctl, struct domain *d, switch ( domctl->u.address_size.size ) { case 32: - return switch_mode(d, DOMAIN_32BIT); + if ( cpu_has_el1_32 ) + return switch_mode(d, DOMAIN_32BIT); + else + return -EINVAL; case 64: return switch_mode(d, DOMAIN_64BIT); default: diff --git a/xen/arch/arm/domain_build.c b/xen/arch/arm/domain_build.c index 90abc3a..8782185 100644 --- a/xen/arch/arm/domain_build.c +++ b/xen/arch/arm/domain_build.c @@ -17,6 +17,7 @@ #include #include #include +#include #include #include @@ -1274,6 +1275,12 @@ int construct_dom0(struct domain *d) return rc; #ifdef CONFIG_ARM_64 + /* if aarch32 mode is not supported at EL1 do not allow 32-bit domain */ + if ( (!(cpu_has_el1_32)) && kinfo.type == DOMAIN_32BIT ) + { + printk("Platform does not support 32-bit domain\n"); + return -EINVAL; + } d->arch.type = kinfo.type; #endif diff --git a/xen/arch/arm/setup.c b/xen/arch/arm/setup.c index 2e80b5a..9fbd315 100644 --- a/xen/arch/arm/setup.c +++ b/xen/arch/arm/setup.c @@ -883,8 +883,11 @@ void arch_get_xen_caps(xen_capabilities_info_t *info) snprintf(s, sizeof(s), "xen-%d.%d-aarch64 ", major, minor); safe_strcat(*info, s); #endif - snprintf(s, sizeof(s), "xen-%d.%d-armv7l ", major, minor); - safe_strcat(*info, s); + if ( cpu_has_aarch32 ) + { + snprintf(s, sizeof(s), "xen-%d.%d-armv7l ", major, minor); + safe_strcat(*info, s); + } } /* -- 1.7.9.5