From mboxrd@z Thu Jan 1 00:00:00 1970 From: Marc Zyngier Subject: Re: [PATCH v2 8/8] arm64: kvm: Check support for AArch32 for 32bit guests Date: Wed, 2 Mar 2016 09:08:02 +0000 Message-ID: <56D6AD72.8010108@arm.com> References: <1456393968-17386-1-git-send-email-suzuki.poulose@arm.com> <1456393968-17386-9-git-send-email-suzuki.poulose@arm.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from localhost (localhost [127.0.0.1]) by mm01.cs.columbia.edu (Postfix) with ESMTP id 10B8B411BE for ; Wed, 2 Mar 2016 04:00:59 -0500 (EST) Received: from mm01.cs.columbia.edu ([127.0.0.1]) by localhost (mm01.cs.columbia.edu [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id BXEek+2XcNGn for ; Wed, 2 Mar 2016 04:00:57 -0500 (EST) Received: from foss.arm.com (foss.arm.com [217.140.101.70]) by mm01.cs.columbia.edu (Postfix) with ESMTP id 593CF410EB for ; Wed, 2 Mar 2016 04:00:56 -0500 (EST) In-Reply-To: <1456393968-17386-9-git-send-email-suzuki.poulose@arm.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: kvmarm-bounces@lists.cs.columbia.edu Sender: kvmarm-bounces@lists.cs.columbia.edu To: Suzuki K Poulose , linux-arm-kernel@lists.infradead.org Cc: catalin.marinas@arm.com, will.deacon@arm.com, linux-kernel@vger.kernel.org, ynorov@caviumnetworks.com, kvmarm@lists.cs.columbia.edu List-Id: kvmarm@lists.cs.columbia.edu T24gMjUvMDIvMTYgMDk6NTIsIFN1enVraSBLIFBvdWxvc2Ugd3JvdGU6Cj4gQWRkIGEgY2hlY2sg dG8gbWFrZSBzdXJlIHRoZSBzeXN0ZW0gc3VwcG9ydHMgQUFyY2gzMiBzdGF0ZQo+IGJlZm9yZSBp bml0aWFsaXNpbmcgYSAzMmJpdCBndWVzdC4KPiAKPiBDYzogQ2hyaXN0b2ZmZXIgRGFsbCA8Y2hy aXN0b2ZmZXIuZGFsbEBsaW5hcm8ub3JnPgo+IENjOiBNYXJjIFp5bmdpZXIgPG1hcmMuenluZ2ll ckBhcm0uY29tPgo+IENjOiBrdm1hcm1AbGlzdHMuY3MuY29sdW1iaWEuZWR1Cj4gU2lnbmVkLW9m Zi1ieTogU3V6dWtpIEsgUG91bG9zZSA8c3V6dWtpLnBvdWxvc2VAYXJtLmNvbT4KPiAKPiAtLS0K PiAKPiBJIHJlYWxseSB3YW50ZWQgdG8gcGFzcyBrdm1fdmNwdSBkb3duIHRvIHRoZSBoZWxwZXJz LiBCdXQgdGhlbiwgSSBjYW4ndAo+IGRlZmluZSB0aGUgYXJjaCBzcGVjaWZpYyBoZWxwZXIgaW4g YXNtL2t2bV9ob3N0LmggZHVlIHRvIGxhY2sgb2Yga3ZtX3ZjcHUncwo+IGRlZmluaXRpb24geWV0 Ogo+IAo+ICBJbiBmaWxlIGluY2x1ZGVkIGZyb20gaW5jbHVkZS9saW51eC9rdm1faG9zdC5oOjM1 OjAsCj4gICAgICAgICAgICAgICAgICAgZnJvbSBhcmNoL2FybTY0L2tlcm5lbC9hc20tb2Zmc2V0 cy5jOjI0Ogo+ICAuL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20va3ZtX2hvc3QuaDogSW4gZnVuY3Rp b24g4oCYa3ZtX2FyY2hfdmNwdV92YWxpZGF0ZV9mZWF0dXJlc+KAmToKPiAgLi9hcmNoL2FybTY0 L2luY2x1ZGUvYXNtL2t2bV9ob3N0Lmg6MzQ0OjQ4OiBlcnJvcjogZGVyZWZlcmVuY2luZyBwb2lu dGVyIHRvIGluY29tcGxldGUgdHlwZQo+ICAgIHJldHVybiAgIXRlc3RfYml0KEtWTV9BUk1fVkNQ VV9FTDFfMzJCSVQsIHZjcHUtPmFyY2guZmVhdHVyZXMpIHx8CgpXaHkgZG9uJ3QgeW91IGp1c3Qg aGF2ZSB0aGUgcHJvdG90eXBlIGluIGt2bV9ob3N0LmgsIGFuZCBtb3ZlIHRoZSBhY3R1YWwKaW1w bGVtZW50YXRpb24gdG8gc29tZXRoaW5nIGxpa2UgZ3Vlc3QuYz8gQnV0IEkgdGhpbmsgdGhlcmUg aXMgYSBiZXR0ZXIKYXBwcm9hY2gsIHNlZSBiZWxvdy4KCj4gLS0tCj4gIGFyY2gvYXJtL2luY2x1 ZGUvYXNtL2t2bV9ob3N0LmggICB8ICAgIDUgKysrKysKPiAgYXJjaC9hcm0va3ZtL2FybS5jICAg ICAgICAgICAgICAgIHwgICAgMyArKysKPiAgYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9rdm1faG9z dC5oIHwgICAgOCArKysrKysrKwo+ICAzIGZpbGVzIGNoYW5nZWQsIDE2IGluc2VydGlvbnMoKykK PiAKPiBkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vaW5jbHVkZS9hc20va3ZtX2hvc3QuaCBiL2FyY2gv YXJtL2luY2x1ZGUvYXNtL2t2bV9ob3N0LmgKPiBpbmRleCBmOWYyNzc5Li45NDVjMjNhIDEwMDY0 NAo+IC0tLSBhL2FyY2gvYXJtL2luY2x1ZGUvYXNtL2t2bV9ob3N0LmgKPiArKysgYi9hcmNoL2Fy bS9pbmNsdWRlL2FzbS9rdm1faG9zdC5oCj4gQEAgLTIzOCw2ICsyMzgsMTEgQEAgc3RhdGljIGlu bGluZSB2b2lkIGt2bV9hcmNoX3N5bmNfZXZlbnRzKHN0cnVjdCBrdm0gKmt2bSkge30KPiAgc3Rh dGljIGlubGluZSB2b2lkIGt2bV9hcmNoX3ZjcHVfdW5pbml0KHN0cnVjdCBrdm1fdmNwdSAqdmNw dSkge30KPiAgc3RhdGljIGlubGluZSB2b2lkIGt2bV9hcmNoX3NjaGVkX2luKHN0cnVjdCBrdm1f dmNwdSAqdmNwdSwgaW50IGNwdSkge30KPiAgCj4gK3N0YXRpYyBpbmxpbmUgYm9vbCBrdm1fYXJj aF92Y3B1X3ZhbGlkYXRlX2ZlYXR1cmVzKHN0cnVjdCBrdm1fdmNwdV9hcmNoICphcmNoX3ZjcHUp Cj4gK3sKPiArCXJldHVybiB0cnVlOwo+ICt9Cj4gKwo+ICBzdGF0aWMgaW5saW5lIHZvaWQga3Zt X2FybV9pbml0X2RlYnVnKHZvaWQpIHt9Cj4gIHN0YXRpYyBpbmxpbmUgdm9pZCBrdm1fYXJtX3Nl dHVwX2RlYnVnKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkge30KPiAgc3RhdGljIGlubGluZSB2b2lk IGt2bV9hcm1fY2xlYXJfZGVidWcoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KSB7fQo+IGRpZmYgLS1n aXQgYS9hcmNoL2FybS9rdm0vYXJtLmMgYi9hcmNoL2FybS9rdm0vYXJtLmMKPiBpbmRleCBkZGEx OTU5Li5mYzRlYTM3IDEwMDY0NAo+IC0tLSBhL2FyY2gvYXJtL2t2bS9hcm0uYwo+ICsrKyBiL2Fy Y2gvYXJtL2t2bS9hcm0uYwo+IEBAIC03ODcsNiArNzg3LDkgQEAgc3RhdGljIGludCBrdm1fdmNw dV9zZXRfdGFyZ2V0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwKPiAgCQkJc2V0X2JpdChpLCB2Y3B1 LT5hcmNoLmZlYXR1cmVzKTsKPiAgCX0KPiAgCj4gKwlpZiAoIWt2bV9hcmNoX3ZjcHVfdmFsaWRh dGVfZmVhdHVyZXMoJnZjcHUtPmFyY2gpKQo+ICsJCXJldHVybiAtRUlOVkFMOwo+ICsKPiAgCXZj cHUtPmFyY2gudGFyZ2V0ID0gcGh5c190YXJnZXQ7Cj4gIAo+ICAJLyogTm93IHdlIGtub3cgd2hh dCBpdCBpcywgd2UgY2FuIHJlc2V0IGl0LiAqLwo+IGRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2lu Y2x1ZGUvYXNtL2t2bV9ob3N0LmggYi9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmgK PiBpbmRleCA2ODlkNGM5Li45ZDYwYTZjIDEwMDY0NAo+IC0tLSBhL2FyY2gvYXJtNjQvaW5jbHVk ZS9hc20va3ZtX2hvc3QuaAo+ICsrKyBiL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20va3ZtX2hvc3Qu aAo+IEBAIC0yNCw2ICsyNCw4IEBACj4gIAo+ICAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KPiAg I2luY2x1ZGUgPGxpbnV4L2t2bV90eXBlcy5oPgo+ICsjaW5jbHVkZSA8YXNtL2NwdWZlYXR1cmUu aD4KPiArI2luY2x1ZGUgPGFzbS9rdm1fYXJtLmg+Cj4gICNpbmNsdWRlIDxhc20va3ZtLmg+Cj4g ICNpbmNsdWRlIDxhc20va3ZtX21taW8uaD4KPiAgCj4gQEAgLTMzOCw2ICszNDAsMTIgQEAgc3Rh dGljIGlubGluZSB2b2lkIGt2bV9hcmNoX3N5bmNfZXZlbnRzKHN0cnVjdCBrdm0gKmt2bSkge30K PiAgc3RhdGljIGlubGluZSB2b2lkIGt2bV9hcmNoX3ZjcHVfdW5pbml0KHN0cnVjdCBrdm1fdmNw dSAqdmNwdSkge30KPiAgc3RhdGljIGlubGluZSB2b2lkIGt2bV9hcmNoX3NjaGVkX2luKHN0cnVj dCBrdm1fdmNwdSAqdmNwdSwgaW50IGNwdSkge30KPiAgCj4gK3N0YXRpYyBpbmxpbmUgYm9vbCBr dm1fYXJjaF92Y3B1X3ZhbGlkYXRlX2ZlYXR1cmVzKHN0cnVjdCBrdm1fdmNwdV9hcmNoICphcmNo X3ZjcHUpCj4gK3sKPiArCXJldHVybiAgIXRlc3RfYml0KEtWTV9BUk1fVkNQVV9FTDFfMzJCSVQs IGFyY2hfdmNwdS0+ZmVhdHVyZXMpIHx8Cj4gKwkJc3lzdGVtX3N1cHBvcnRzXzMyYml0X2VsMCgp Owo+ICt9Cj4gKwoKVGhpcyBpcyByZWFsbHkgY29udm9sdXRlZCAoaXQgdG9vayBtZSA1IG1pbnV0 ZXMgc3RhcmluZyBhdCB0aGUKZXhwcmVzc2lvbiBhbmQgcmVtZW1iZXJpbmcgdGhhdCBBQXJjaDMy IEVMMSBpbXBsaWVzIEFBcmNoMzIgRUwwIHRvIGdldCBpdCkuCgpOb3csIHdlIGFscmVhZHkgaGF2 ZSBrdm1fcmVzZXRfdmNwdSgpIHRoYXQgdmFsaWRhdGVzIEFBcmNoMzIgc3VwcG9ydC4gSXQKd291 bGQgcHJvYmFibHkgYmUgYmV0dGVyIHRvIG1vdmUgdGhpbmdzIHRoZXJlLiBUaG91Z2h0cz8KCj4g IHZvaWQga3ZtX2FybV9pbml0X2RlYnVnKHZvaWQpOwo+ICB2b2lkIGt2bV9hcm1fc2V0dXBfZGVi dWcoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTsKPiAgdm9pZCBrdm1fYXJtX2NsZWFyX2RlYnVnKHN0 cnVjdCBrdm1fdmNwdSAqdmNwdSk7Cj4gCgpUaGFua3MsCgoJTS4KLS0gCkphenogaXMgbm90IGRl YWQuIEl0IGp1c3Qgc21lbGxzIGZ1bm55Li4uCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fCmt2bWFybSBtYWlsaW5nIGxpc3QKa3ZtYXJtQGxpc3RzLmNzLmNv bHVtYmlhLmVkdQpodHRwczovL2xpc3RzLmNzLmNvbHVtYmlhLmVkdS9tYWlsbWFuL2xpc3RpbmZv L2t2bWFybQo= From mboxrd@z Thu Jan 1 00:00:00 1970 From: marc.zyngier@arm.com (Marc Zyngier) Date: Wed, 2 Mar 2016 09:08:02 +0000 Subject: [PATCH v2 8/8] arm64: kvm: Check support for AArch32 for 32bit guests In-Reply-To: <1456393968-17386-9-git-send-email-suzuki.poulose@arm.com> References: <1456393968-17386-1-git-send-email-suzuki.poulose@arm.com> <1456393968-17386-9-git-send-email-suzuki.poulose@arm.com> Message-ID: <56D6AD72.8010108@arm.com> To: linux-arm-kernel@lists.infradead.org List-Id: linux-arm-kernel.lists.infradead.org On 25/02/16 09:52, Suzuki K Poulose wrote: > Add a check to make sure the system supports AArch32 state > before initialising a 32bit guest. > > Cc: Christoffer Dall > Cc: Marc Zyngier > Cc: kvmarm at lists.cs.columbia.edu > Signed-off-by: Suzuki K Poulose > > --- > > I really wanted to pass kvm_vcpu down to the helpers. But then, I can't > define the arch specific helper in asm/kvm_host.h due to lack of kvm_vcpu's > definition yet: > > In file included from include/linux/kvm_host.h:35:0, > from arch/arm64/kernel/asm-offsets.c:24: > ./arch/arm64/include/asm/kvm_host.h: In function ?kvm_arch_vcpu_validate_features?: > ./arch/arm64/include/asm/kvm_host.h:344:48: error: dereferencing pointer to incomplete type > return !test_bit(KVM_ARM_VCPU_EL1_32BIT, vcpu->arch.features) || Why don't you just have the prototype in kvm_host.h, and move the actual implementation to something like guest.c? But I think there is a better approach, see below. > --- > arch/arm/include/asm/kvm_host.h | 5 +++++ > arch/arm/kvm/arm.c | 3 +++ > arch/arm64/include/asm/kvm_host.h | 8 ++++++++ > 3 files changed, 16 insertions(+) > > diff --git a/arch/arm/include/asm/kvm_host.h b/arch/arm/include/asm/kvm_host.h > index f9f2779..945c23a 100644 > --- a/arch/arm/include/asm/kvm_host.h > +++ b/arch/arm/include/asm/kvm_host.h > @@ -238,6 +238,11 @@ static inline void kvm_arch_sync_events(struct kvm *kvm) {} > static inline void kvm_arch_vcpu_uninit(struct kvm_vcpu *vcpu) {} > static inline void kvm_arch_sched_in(struct kvm_vcpu *vcpu, int cpu) {} > > +static inline bool kvm_arch_vcpu_validate_features(struct kvm_vcpu_arch *arch_vcpu) > +{ > + return true; > +} > + > static inline void kvm_arm_init_debug(void) {} > static inline void kvm_arm_setup_debug(struct kvm_vcpu *vcpu) {} > static inline void kvm_arm_clear_debug(struct kvm_vcpu *vcpu) {} > diff --git a/arch/arm/kvm/arm.c b/arch/arm/kvm/arm.c > index dda1959..fc4ea37 100644 > --- a/arch/arm/kvm/arm.c > +++ b/arch/arm/kvm/arm.c > @@ -787,6 +787,9 @@ static int kvm_vcpu_set_target(struct kvm_vcpu *vcpu, > set_bit(i, vcpu->arch.features); > } > > + if (!kvm_arch_vcpu_validate_features(&vcpu->arch)) > + return -EINVAL; > + > vcpu->arch.target = phys_target; > > /* Now we know what it is, we can reset it. */ > diff --git a/arch/arm64/include/asm/kvm_host.h b/arch/arm64/include/asm/kvm_host.h > index 689d4c9..9d60a6c 100644 > --- a/arch/arm64/include/asm/kvm_host.h > +++ b/arch/arm64/include/asm/kvm_host.h > @@ -24,6 +24,8 @@ > > #include > #include > +#include > +#include > #include > #include > > @@ -338,6 +340,12 @@ static inline void kvm_arch_sync_events(struct kvm *kvm) {} > static inline void kvm_arch_vcpu_uninit(struct kvm_vcpu *vcpu) {} > static inline void kvm_arch_sched_in(struct kvm_vcpu *vcpu, int cpu) {} > > +static inline bool kvm_arch_vcpu_validate_features(struct kvm_vcpu_arch *arch_vcpu) > +{ > + return !test_bit(KVM_ARM_VCPU_EL1_32BIT, arch_vcpu->features) || > + system_supports_32bit_el0(); > +} > + This is really convoluted (it took me 5 minutes staring at the expression and remembering that AArch32 EL1 implies AArch32 EL0 to get it). Now, we already have kvm_reset_vcpu() that validates AArch32 support. It would probably be better to move things there. Thoughts? > void kvm_arm_init_debug(void); > void kvm_arm_setup_debug(struct kvm_vcpu *vcpu); > void kvm_arm_clear_debug(struct kvm_vcpu *vcpu); > Thanks, M. -- Jazz is not dead. It just smells funny... From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1754198AbcCBJIV (ORCPT ); Wed, 2 Mar 2016 04:08:21 -0500 Received: from foss.arm.com ([217.140.101.70]:57298 "EHLO foss.arm.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1754445AbcCBJIG (ORCPT ); Wed, 2 Mar 2016 04:08:06 -0500 Subject: Re: [PATCH v2 8/8] arm64: kvm: Check support for AArch32 for 32bit guests To: Suzuki K Poulose , linux-arm-kernel@lists.infradead.org References: <1456393968-17386-1-git-send-email-suzuki.poulose@arm.com> <1456393968-17386-9-git-send-email-suzuki.poulose@arm.com> Cc: christoffer.dall@linaro.org, will.deacon@arm.com, ynorov@caviumnetworks.com, catalin.marinas@arm.com, mark.rutland@arm.com, linux-kernel@vger.kernel.org, kvmarm@lists.cs.columbia.edu From: Marc Zyngier X-Enigmail-Draft-Status: N1110 Organization: ARM Ltd Message-ID: <56D6AD72.8010108@arm.com> Date: Wed, 2 Mar 2016 09:08:02 +0000 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:38.0) Gecko/20100101 Icedove/38.5.0 MIME-Version: 1.0 In-Reply-To: <1456393968-17386-9-git-send-email-suzuki.poulose@arm.com> Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On 25/02/16 09:52, Suzuki K Poulose wrote: > Add a check to make sure the system supports AArch32 state > before initialising a 32bit guest. > > Cc: Christoffer Dall > Cc: Marc Zyngier > Cc: kvmarm@lists.cs.columbia.edu > Signed-off-by: Suzuki K Poulose > > --- > > I really wanted to pass kvm_vcpu down to the helpers. But then, I can't > define the arch specific helper in asm/kvm_host.h due to lack of kvm_vcpu's > definition yet: > > In file included from include/linux/kvm_host.h:35:0, > from arch/arm64/kernel/asm-offsets.c:24: > ./arch/arm64/include/asm/kvm_host.h: In function ‘kvm_arch_vcpu_validate_features’: > ./arch/arm64/include/asm/kvm_host.h:344:48: error: dereferencing pointer to incomplete type > return !test_bit(KVM_ARM_VCPU_EL1_32BIT, vcpu->arch.features) || Why don't you just have the prototype in kvm_host.h, and move the actual implementation to something like guest.c? But I think there is a better approach, see below. > --- > arch/arm/include/asm/kvm_host.h | 5 +++++ > arch/arm/kvm/arm.c | 3 +++ > arch/arm64/include/asm/kvm_host.h | 8 ++++++++ > 3 files changed, 16 insertions(+) > > diff --git a/arch/arm/include/asm/kvm_host.h b/arch/arm/include/asm/kvm_host.h > index f9f2779..945c23a 100644 > --- a/arch/arm/include/asm/kvm_host.h > +++ b/arch/arm/include/asm/kvm_host.h > @@ -238,6 +238,11 @@ static inline void kvm_arch_sync_events(struct kvm *kvm) {} > static inline void kvm_arch_vcpu_uninit(struct kvm_vcpu *vcpu) {} > static inline void kvm_arch_sched_in(struct kvm_vcpu *vcpu, int cpu) {} > > +static inline bool kvm_arch_vcpu_validate_features(struct kvm_vcpu_arch *arch_vcpu) > +{ > + return true; > +} > + > static inline void kvm_arm_init_debug(void) {} > static inline void kvm_arm_setup_debug(struct kvm_vcpu *vcpu) {} > static inline void kvm_arm_clear_debug(struct kvm_vcpu *vcpu) {} > diff --git a/arch/arm/kvm/arm.c b/arch/arm/kvm/arm.c > index dda1959..fc4ea37 100644 > --- a/arch/arm/kvm/arm.c > +++ b/arch/arm/kvm/arm.c > @@ -787,6 +787,9 @@ static int kvm_vcpu_set_target(struct kvm_vcpu *vcpu, > set_bit(i, vcpu->arch.features); > } > > + if (!kvm_arch_vcpu_validate_features(&vcpu->arch)) > + return -EINVAL; > + > vcpu->arch.target = phys_target; > > /* Now we know what it is, we can reset it. */ > diff --git a/arch/arm64/include/asm/kvm_host.h b/arch/arm64/include/asm/kvm_host.h > index 689d4c9..9d60a6c 100644 > --- a/arch/arm64/include/asm/kvm_host.h > +++ b/arch/arm64/include/asm/kvm_host.h > @@ -24,6 +24,8 @@ > > #include > #include > +#include > +#include > #include > #include > > @@ -338,6 +340,12 @@ static inline void kvm_arch_sync_events(struct kvm *kvm) {} > static inline void kvm_arch_vcpu_uninit(struct kvm_vcpu *vcpu) {} > static inline void kvm_arch_sched_in(struct kvm_vcpu *vcpu, int cpu) {} > > +static inline bool kvm_arch_vcpu_validate_features(struct kvm_vcpu_arch *arch_vcpu) > +{ > + return !test_bit(KVM_ARM_VCPU_EL1_32BIT, arch_vcpu->features) || > + system_supports_32bit_el0(); > +} > + This is really convoluted (it took me 5 minutes staring at the expression and remembering that AArch32 EL1 implies AArch32 EL0 to get it). Now, we already have kvm_reset_vcpu() that validates AArch32 support. It would probably be better to move things there. Thoughts? > void kvm_arm_init_debug(void); > void kvm_arm_setup_debug(struct kvm_vcpu *vcpu); > void kvm_arm_clear_debug(struct kvm_vcpu *vcpu); > Thanks, M. -- Jazz is not dead. It just smells funny...