From mboxrd@z Thu Jan 1 00:00:00 1970 From: Alex =?utf-8?Q?Benn=C3=A9e?= Subject: Re: [PATCH v7 08/11] KVM: arm64: introduce vcpu->arch.debug_ptr Date: Fri, 03 Jul 2015 08:14:52 +0100 Message-ID: <87mvzdsoer.fsf@linaro.org> References: <1435775343-20034-1-git-send-email-alex.bennee@linaro.org> <1435775343-20034-9-git-send-email-alex.bennee@linaro.org> <20150702183440.GK11332@cbox> 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 BEAF55789A for ; Fri, 3 Jul 2015 03:03:38 -0400 (EDT) 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 7-Clh3kfhspc for ; Fri, 3 Jul 2015 03:03:37 -0400 (EDT) Received: from mail-wg0-f43.google.com (mail-wg0-f43.google.com [74.125.82.43]) by mm01.cs.columbia.edu (Postfix) with ESMTPS id 6BC2F57895 for ; Fri, 3 Jul 2015 03:03:37 -0400 (EDT) Received: by wgck11 with SMTP id k11so80855198wgc.0 for ; Fri, 03 Jul 2015 00:14:55 -0700 (PDT) In-reply-to: <20150702183440.GK11332@cbox> 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: Christoffer Dall Cc: kvm@vger.kernel.org, jan.kiszka@siemens.com, Will Deacon , kvmarm@lists.cs.columbia.edu, Lorenzo Pieralisi , Russell King , Richard Weinberger , Gleb Natapov , zhichao.huang@linaro.org, Catalin Marinas , bp@suse.de, marc.zyngier@arm.com, Andre Przywara , r65777@freescale.com, linux-arm-kernel@lists.infradead.org, Ard Biesheuvel , open list , dahi@linux.vnet.ibm.com, pbonzini@redhat.com List-Id: kvmarm@lists.cs.columbia.edu CkNocmlzdG9mZmVyIERhbGwgPGNocmlzdG9mZmVyLmRhbGxAbGluYXJvLm9yZz4gd3JpdGVzOgoK PiBPbiBXZWQsIEp1bCAwMSwgMjAxNSBhdCAwNzoyOTowMFBNICswMTAwLCBBbGV4IEJlbm7DqWUg d3JvdGU6Cj4+IFRoaXMgaW50cm9kdWNlcyBhIGxldmVsIG9mIGluZGlyZWN0aW9uIGZvciB0aGUg ZGVidWcgcmVnaXN0ZXJzLiBJbnN0ZWFkCj4+IG9mIHVzaW5nIHRoZSBzeXNfcmVnc1tdIGRpcmVj dGx5IHdlIHN0b3JlIHJlZ2lzdGVycyBpbiBhIHN0cnVjdHVyZSBpbgo+PiB0aGUgdmNwdS4gVGhl IG5ldyBrdm1fYXJtX3Jlc2V0X2RlYnVnX3B0cigpIHNldHMgdGhlIGRlYnVnIHB0ciB0byB0aGUK Pj4gZ3Vlc3QgY29udGV4dC4KPj4gCj4+IFRoaXMgYWxzbyBlbnRhaWxzIHVwZGF0aW5nIHRoZSBz eXNfcmVncyBjb2RlIHRvIGFjY2VzcyB0aGlzIG5ldwo+PiBzdHJ1Y3R1cmUuIE5ldyBhY2Nlc3Mg ZnVuY3Rpb24gaGF2ZSBiZWVuIGFkZGVkIGZvciBlYWNoIHNldCBvZiBkZWJ1Zwo+PiByZWdpc3Rl cnMuIFRoZSBnZW5lcmljIGZ1bmN0aW9ucyBhcmUgc3RpbGwgdXNlZCBmb3IgdGhlIGZldyByZWdp c3RlcnMKPj4gc3RvcmVkIGluIHRoZSBtYWluIGNvbnRleHQuCj4+IAo+PiBOZXcgYWNjZXNzIGZ1 bmN0aW9uIHBvaW50ZXJzIGhhdmUgYmVlbiBhZGRlZCB0byB0aGUgc3lzX3JlZ19kZXNjCj4+IHN0 cnVjdHVyZSB0byBzdXBwb3J0IHRoZSBHRVQvU0VUX09ORV9SRUcgaW9jdGwgb3BlcmF0aW9ucy4K Pgo+IFdoeSBpcyB0aGlzIG5lZWRlZD8KClByZXZpb3VzbHkgSSBoYWQgYSBoYWNreToKCglpZiAo ci0+YWNjZXNzID09IHRyYXBfZGVidWc2NCkKCQlyZXR1cm4gZGVidWdfZ2V0NjQodmNwdSwgciwg cmVnLCB1YWRkcik7CgpXaGljaCB1c2VkIHRoZSBzYW1lIG9mZnNldCBpbmZvcm1hdGlvbi4gTm93 IHdlIGhhdmUgYSBjbGVhbmVyOgoKCWlmIChyLT5zZXQpCgkJcmV0dXJuIChyLT5zZXQpKHZjcHUs IHIsIHJlZywgdWFkZHIpOwoKV2hpY2ggYWNjZXNzZXMgdGhlIHN0cnVjdHVyZSBkaXJlY3RseSwg YXMgdGhlIHRyYXAgZnVuY3Rpb25zIGRvOgoKCV9fdTY0ICpyID0gJnZjcHUtPmFyY2gudmNwdV9k ZWJ1Z19zdGF0ZS5kYmdfYnZyW3JkLT5yZWddOwoJaWYgKGNvcHlfZnJvbV91c2VyKHVhZGRyLCBy LCBLVk1fUkVHX1NJWkUocmVnLT5pZCkpICE9IDApCgkJcmV0dXJuIC1FRkFVTFQ7CglyZXR1cm4g MDsKCjxzbmlwPgo+PiArI2lmIDAKPj4gK3N0YXRpYyBpbnQgZGVidWdfc2V0NjQoc3RydWN0IGt2 bV92Y3B1ICp2Y3B1LCBjb25zdCBzdHJ1Y3Qgc3lzX3JlZ19kZXNjICpyZCwKPj4gKwkJY29uc3Qg c3RydWN0IGt2bV9vbmVfcmVnICpyZWcsIHZvaWQgX191c2VyICp1YWRkcikKPj4gK3sKPj4gKwlf X3U2NCAqciA9IChfX3U2NCAqKSAoKHZvaWQgKiApJnZjcHUtPmFyY2gudmNwdV9kZWJ1Z19zdGF0 ZSArIHJkLT5yZWcpOwo+PiArCWlmIChjb3B5X2Zyb21fdXNlcih1YWRkciwgciwgS1ZNX1JFR19T SVpFKHJlZy0+aWQpKSAhPSAwKQo+PiArCQlyZXR1cm4gLUVGQVVMVDsKPj4gKwlyZXR1cm4gMDsK Pj4gK30KPj4gKwo+PiArc3RhdGljIGludCBkZWJ1Z19nZXQ2NChzdHJ1Y3Qga3ZtX3ZjcHUgKnZj cHUsIGNvbnN0IHN0cnVjdCBzeXNfcmVnX2Rlc2MgKnJkLAo+PiArCWNvbnN0IHN0cnVjdCBrdm1f b25lX3JlZyAqcmVnLCB2b2lkIF9fdXNlciAqdWFkZHIpCj4+ICt7Cj4+ICsJX191NjQgKnIgPSAo X191NjQgKikgKCh2b2lkICogKSZ2Y3B1LT5hcmNoLnZjcHVfZGVidWdfc3RhdGUgKyByZC0+cmVn KTsKPj4gKwlpZiAoY29weV90b191c2VyKHVhZGRyLCByLCBLVk1fUkVHX1NJWkUocmVnLT5pZCkp ICE9IDApCj4+ICsJCXJldHVybiAtRUZBVUxUOwo+PiArCXJldHVybiAwOwo+PiArfQo+PiArI2Vu ZGlmCj4+ICsKPgo+IHdoYXQgaXMgdGhpcyBpZmRlZidlZCBibG9jayBvZiBjb2RlIGRvaW5nIGhl cmU/CgpPb3BzLiBZZWFoIGxvb2tzIGxpa2UgSSBtaXNzZWQgcmVtb3ZpbmcgdGhhdCBhZnRlciBJ IGZpbmlzaGVkIHRoZQpyZS1mYWN0b3IuIFRoZXNlIHdoZXJlIHRoZSBvbGQgZ2V0L3NldCBmdW5j dGlvbnMgSSB1c2VkLgoKPgo+PiAgaW50IGt2bV9hcm1fc3lzX3JlZ19nZXRfcmVnKHN0cnVjdCBr dm1fdmNwdSAqdmNwdSwgY29uc3Qgc3RydWN0IGt2bV9vbmVfcmVnICpyZWcpCj4+ICB7Cj4+ICAJ Y29uc3Qgc3RydWN0IHN5c19yZWdfZGVzYyAqcjsKPj4gQEAgLTEzMDMsNiArMTUzMCw5IEBAIGlu dCBrdm1fYXJtX3N5c19yZWdfZ2V0X3JlZyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGNvbnN0IHN0 cnVjdCBrdm1fb25lX3JlZyAqcmVnCj4+ICAJaWYgKCFyKQo+PiAgCQlyZXR1cm4gZ2V0X2ludmFy aWFudF9zeXNfcmVnKHJlZy0+aWQsIHVhZGRyKTsKPj4gIAo+PiArCWlmIChyLT5nZXQpCj4+ICsJ CXJldHVybiAoci0+Z2V0KSh2Y3B1LCByLCByZWcsIHVhZGRyKTsKPj4gKwo+PiAgCXJldHVybiBy ZWdfdG9fdXNlcih1YWRkciwgJnZjcHVfc3lzX3JlZyh2Y3B1LCByLT5yZWcpLCByZWctPmlkKTsK Pj4gIH0KPj4gIAo+PiBAQCAtMTMyMSw2ICsxNTUxLDkgQEAgaW50IGt2bV9hcm1fc3lzX3JlZ19z ZXRfcmVnKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgY29uc3Qgc3RydWN0IGt2bV9vbmVfcmVnICpy ZWcKPj4gIAlpZiAoIXIpCj4+ICAJCXJldHVybiBzZXRfaW52YXJpYW50X3N5c19yZWcocmVnLT5p ZCwgdWFkZHIpOwo+PiAgCj4+ICsJaWYgKHItPnNldCkKPj4gKwkJcmV0dXJuIChyLT5zZXQpKHZj cHUsIHIsIHJlZywgdWFkZHIpOwo+PiArCj4+ICAJcmV0dXJuIHJlZ19mcm9tX3VzZXIoJnZjcHVf c3lzX3JlZyh2Y3B1LCByLT5yZWcpLCB1YWRkciwgcmVnLT5pZCk7Cj4+ICB9Cj4+ICAKPj4gZGlm ZiAtLWdpdCBhL2FyY2gvYXJtNjQva3ZtL3N5c19yZWdzLmggYi9hcmNoL2FybTY0L2t2bS9zeXNf cmVncy5oCj4+IGluZGV4IGQ0MTFlMjUuLjkyNjVlN2QgMTAwNjQ0Cj4+IC0tLSBhL2FyY2gvYXJt NjQva3ZtL3N5c19yZWdzLmgKPj4gKysrIGIvYXJjaC9hcm02NC9rdm0vc3lzX3JlZ3MuaAo+PiBA QCAtNTUsNiArNTUsMTIgQEAgc3RydWN0IHN5c19yZWdfZGVzYyB7Cj4+ICAKPj4gIAkvKiBWYWx1 ZSAodXN1YWxseSByZXNldCB2YWx1ZSkgKi8KPj4gIAl1NjQgdmFsOwo+PiArCj4+ICsJLyogR2V0 L1NldCBmdW5jdGlvbnMsIGZhbGxiYWNrIGlmIE5VTEwgKi8KPgo+IElzIHRoaXMgb25seSBtZWFu dCBmb3IgdXNlcnNhcGNlIGFjY2VzcyBvciB3aGVuIHNob3VsZCBvbmUgdXNlIHRoZXNlPwoKWWVz IGZvciBHRVQvU0VUCgo+Cj4+ICsJaW50ICgqZ2V0KShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGNv bnN0IHN0cnVjdCBzeXNfcmVnX2Rlc2MgKnJkLAo+PiArCQkgICBjb25zdCBzdHJ1Y3Qga3ZtX29u ZV9yZWcgKnJlZywgdm9pZCBfX3VzZXIgKnVhZGRyKTsKPj4gKwlpbnQgKCpzZXQpKHN0cnVjdCBr dm1fdmNwdSAqdmNwdSwgY29uc3Qgc3RydWN0IHN5c19yZWdfZGVzYyAqcmQsCj4+ICsJCSAgIGNv bnN0IHN0cnVjdCBrdm1fb25lX3JlZyAqcmVnLCB2b2lkIF9fdXNlciAqdWFkZHIpOwo+PiAgfTsK Pj4gIAo+PiAgc3RhdGljIGlubGluZSB2b2lkIHByaW50X3N5c19yZWdfaW5zdHIoY29uc3Qgc3Ry dWN0IHN5c19yZWdfcGFyYW1zICpwKQo+PiAtLSAKPj4gMi40LjUKPj4gCgotLSAKQWxleCBCZW5u w6llCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCmt2bWFy bSBtYWlsaW5nIGxpc3QKa3ZtYXJtQGxpc3RzLmNzLmNvbHVtYmlhLmVkdQpodHRwczovL2xpc3Rz LmNzLmNvbHVtYmlhLmVkdS9tYWlsbWFuL2xpc3RpbmZvL2t2bWFybQo= From mboxrd@z Thu Jan 1 00:00:00 1970 From: alex.bennee@linaro.org (Alex =?utf-8?Q?Benn=C3=A9e?=) Date: Fri, 03 Jul 2015 08:14:52 +0100 Subject: [PATCH v7 08/11] KVM: arm64: introduce vcpu->arch.debug_ptr In-Reply-To: <20150702183440.GK11332@cbox> References: <1435775343-20034-1-git-send-email-alex.bennee@linaro.org> <1435775343-20034-9-git-send-email-alex.bennee@linaro.org> <20150702183440.GK11332@cbox> Message-ID: <87mvzdsoer.fsf@linaro.org> To: linux-arm-kernel@lists.infradead.org List-Id: linux-arm-kernel.lists.infradead.org Christoffer Dall writes: > On Wed, Jul 01, 2015 at 07:29:00PM +0100, Alex Benn?e wrote: >> This introduces a level of indirection for the debug registers. Instead >> of using the sys_regs[] directly we store registers in a structure in >> the vcpu. The new kvm_arm_reset_debug_ptr() sets the debug ptr to the >> guest context. >> >> This also entails updating the sys_regs code to access this new >> structure. New access function have been added for each set of debug >> registers. The generic functions are still used for the few registers >> stored in the main context. >> >> New access function pointers have been added to the sys_reg_desc >> structure to support the GET/SET_ONE_REG ioctl operations. > > Why is this needed? Previously I had a hacky: if (r->access == trap_debug64) return debug_get64(vcpu, r, reg, uaddr); Which used the same offset information. Now we have a cleaner: if (r->set) return (r->set)(vcpu, r, reg, uaddr); Which accesses the structure directly, as the trap functions do: __u64 *r = &vcpu->arch.vcpu_debug_state.dbg_bvr[rd->reg]; if (copy_from_user(uaddr, r, KVM_REG_SIZE(reg->id)) != 0) return -EFAULT; return 0; >> +#if 0 >> +static int debug_set64(struct kvm_vcpu *vcpu, const struct sys_reg_desc *rd, >> + const struct kvm_one_reg *reg, void __user *uaddr) >> +{ >> + __u64 *r = (__u64 *) ((void * )&vcpu->arch.vcpu_debug_state + rd->reg); >> + if (copy_from_user(uaddr, r, KVM_REG_SIZE(reg->id)) != 0) >> + return -EFAULT; >> + return 0; >> +} >> + >> +static int debug_get64(struct kvm_vcpu *vcpu, const struct sys_reg_desc *rd, >> + const struct kvm_one_reg *reg, void __user *uaddr) >> +{ >> + __u64 *r = (__u64 *) ((void * )&vcpu->arch.vcpu_debug_state + rd->reg); >> + if (copy_to_user(uaddr, r, KVM_REG_SIZE(reg->id)) != 0) >> + return -EFAULT; >> + return 0; >> +} >> +#endif >> + > > what is this ifdef'ed block of code doing here? Oops. Yeah looks like I missed removing that after I finished the re-factor. These where the old get/set functions I used. > >> int kvm_arm_sys_reg_get_reg(struct kvm_vcpu *vcpu, const struct kvm_one_reg *reg) >> { >> const struct sys_reg_desc *r; >> @@ -1303,6 +1530,9 @@ int kvm_arm_sys_reg_get_reg(struct kvm_vcpu *vcpu, const struct kvm_one_reg *reg >> if (!r) >> return get_invariant_sys_reg(reg->id, uaddr); >> >> + if (r->get) >> + return (r->get)(vcpu, r, reg, uaddr); >> + >> return reg_to_user(uaddr, &vcpu_sys_reg(vcpu, r->reg), reg->id); >> } >> >> @@ -1321,6 +1551,9 @@ int kvm_arm_sys_reg_set_reg(struct kvm_vcpu *vcpu, const struct kvm_one_reg *reg >> if (!r) >> return set_invariant_sys_reg(reg->id, uaddr); >> >> + if (r->set) >> + return (r->set)(vcpu, r, reg, uaddr); >> + >> return reg_from_user(&vcpu_sys_reg(vcpu, r->reg), uaddr, reg->id); >> } >> >> diff --git a/arch/arm64/kvm/sys_regs.h b/arch/arm64/kvm/sys_regs.h >> index d411e25..9265e7d 100644 >> --- a/arch/arm64/kvm/sys_regs.h >> +++ b/arch/arm64/kvm/sys_regs.h >> @@ -55,6 +55,12 @@ struct sys_reg_desc { >> >> /* Value (usually reset value) */ >> u64 val; >> + >> + /* Get/Set functions, fallback if NULL */ > > Is this only meant for usersapce access or when should one use these? Yes for GET/SET > >> + int (*get)(struct kvm_vcpu *vcpu, const struct sys_reg_desc *rd, >> + const struct kvm_one_reg *reg, void __user *uaddr); >> + int (*set)(struct kvm_vcpu *vcpu, const struct sys_reg_desc *rd, >> + const struct kvm_one_reg *reg, void __user *uaddr); >> }; >> >> static inline void print_sys_reg_instr(const struct sys_reg_params *p) >> -- >> 2.4.5 >> -- Alex Benn?e From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1754758AbbGCHPf (ORCPT ); Fri, 3 Jul 2015 03:15:35 -0400 Received: from mail-wg0-f45.google.com ([74.125.82.45]:35343 "EHLO mail-wg0-f45.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1754565AbbGCHO4 (ORCPT ); Fri, 3 Jul 2015 03:14:56 -0400 References: <1435775343-20034-1-git-send-email-alex.bennee@linaro.org> <1435775343-20034-9-git-send-email-alex.bennee@linaro.org> <20150702183440.GK11332@cbox> From: Alex =?utf-8?Q?Benn=C3=A9e?= To: Christoffer Dall Cc: kvm@vger.kernel.org, linux-arm-kernel@lists.infradead.org, kvmarm@lists.cs.columbia.edu, marc.zyngier@arm.com, peter.maydell@linaro.org, agraf@suse.de, drjones@redhat.com, pbonzini@redhat.com, zhichao.huang@linaro.org, jan.kiszka@siemens.com, dahi@linux.vnet.ibm.com, r65777@freescale.com, bp@suse.de, Gleb Natapov , Russell King , Catalin Marinas , Will Deacon , Ard Biesheuvel , Lorenzo Pieralisi , Richard Weinberger , Andre Przywara , open list Subject: Re: [PATCH v7 08/11] KVM: arm64: introduce vcpu->arch.debug_ptr In-reply-to: <20150702183440.GK11332@cbox> Date: Fri, 03 Jul 2015 08:14:52 +0100 Message-ID: <87mvzdsoer.fsf@linaro.org> MIME-Version: 1.0 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 Christoffer Dall writes: > On Wed, Jul 01, 2015 at 07:29:00PM +0100, Alex Bennée wrote: >> This introduces a level of indirection for the debug registers. Instead >> of using the sys_regs[] directly we store registers in a structure in >> the vcpu. The new kvm_arm_reset_debug_ptr() sets the debug ptr to the >> guest context. >> >> This also entails updating the sys_regs code to access this new >> structure. New access function have been added for each set of debug >> registers. The generic functions are still used for the few registers >> stored in the main context. >> >> New access function pointers have been added to the sys_reg_desc >> structure to support the GET/SET_ONE_REG ioctl operations. > > Why is this needed? Previously I had a hacky: if (r->access == trap_debug64) return debug_get64(vcpu, r, reg, uaddr); Which used the same offset information. Now we have a cleaner: if (r->set) return (r->set)(vcpu, r, reg, uaddr); Which accesses the structure directly, as the trap functions do: __u64 *r = &vcpu->arch.vcpu_debug_state.dbg_bvr[rd->reg]; if (copy_from_user(uaddr, r, KVM_REG_SIZE(reg->id)) != 0) return -EFAULT; return 0; >> +#if 0 >> +static int debug_set64(struct kvm_vcpu *vcpu, const struct sys_reg_desc *rd, >> + const struct kvm_one_reg *reg, void __user *uaddr) >> +{ >> + __u64 *r = (__u64 *) ((void * )&vcpu->arch.vcpu_debug_state + rd->reg); >> + if (copy_from_user(uaddr, r, KVM_REG_SIZE(reg->id)) != 0) >> + return -EFAULT; >> + return 0; >> +} >> + >> +static int debug_get64(struct kvm_vcpu *vcpu, const struct sys_reg_desc *rd, >> + const struct kvm_one_reg *reg, void __user *uaddr) >> +{ >> + __u64 *r = (__u64 *) ((void * )&vcpu->arch.vcpu_debug_state + rd->reg); >> + if (copy_to_user(uaddr, r, KVM_REG_SIZE(reg->id)) != 0) >> + return -EFAULT; >> + return 0; >> +} >> +#endif >> + > > what is this ifdef'ed block of code doing here? Oops. Yeah looks like I missed removing that after I finished the re-factor. These where the old get/set functions I used. > >> int kvm_arm_sys_reg_get_reg(struct kvm_vcpu *vcpu, const struct kvm_one_reg *reg) >> { >> const struct sys_reg_desc *r; >> @@ -1303,6 +1530,9 @@ int kvm_arm_sys_reg_get_reg(struct kvm_vcpu *vcpu, const struct kvm_one_reg *reg >> if (!r) >> return get_invariant_sys_reg(reg->id, uaddr); >> >> + if (r->get) >> + return (r->get)(vcpu, r, reg, uaddr); >> + >> return reg_to_user(uaddr, &vcpu_sys_reg(vcpu, r->reg), reg->id); >> } >> >> @@ -1321,6 +1551,9 @@ int kvm_arm_sys_reg_set_reg(struct kvm_vcpu *vcpu, const struct kvm_one_reg *reg >> if (!r) >> return set_invariant_sys_reg(reg->id, uaddr); >> >> + if (r->set) >> + return (r->set)(vcpu, r, reg, uaddr); >> + >> return reg_from_user(&vcpu_sys_reg(vcpu, r->reg), uaddr, reg->id); >> } >> >> diff --git a/arch/arm64/kvm/sys_regs.h b/arch/arm64/kvm/sys_regs.h >> index d411e25..9265e7d 100644 >> --- a/arch/arm64/kvm/sys_regs.h >> +++ b/arch/arm64/kvm/sys_regs.h >> @@ -55,6 +55,12 @@ struct sys_reg_desc { >> >> /* Value (usually reset value) */ >> u64 val; >> + >> + /* Get/Set functions, fallback if NULL */ > > Is this only meant for usersapce access or when should one use these? Yes for GET/SET > >> + int (*get)(struct kvm_vcpu *vcpu, const struct sys_reg_desc *rd, >> + const struct kvm_one_reg *reg, void __user *uaddr); >> + int (*set)(struct kvm_vcpu *vcpu, const struct sys_reg_desc *rd, >> + const struct kvm_one_reg *reg, void __user *uaddr); >> }; >> >> static inline void print_sys_reg_instr(const struct sys_reg_params *p) >> -- >> 2.4.5 >> -- Alex Bennée