From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S933468AbbDWJyK (ORCPT ); Thu, 23 Apr 2015 05:54:10 -0400 Received: from static.88-198-71-155.clients.your-server.de ([88.198.71.155]:56641 "EHLO socrates.bennee.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752117AbbDWJyH (ORCPT ); Thu, 23 Apr 2015 05:54:07 -0400 References: <1427814488-28467-1-git-send-email-alex.bennee@linaro.org> <1427814488-28467-4-git-send-email-alex.bennee@linaro.org> <20150413120813.GN6186@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, Catalin Marinas , Will Deacon , open list Subject: Re: [PATCH v2 03/10] KVM: arm: guest debug, define API headers In-reply-to: <20150413120813.GN6186@cbox> Date: Thu, 23 Apr 2015 10:54:26 +0100 Message-ID: <87zj5z5fvx.fsf@linaro.org> MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-SA-Exim-Connect-IP: 127.0.0.1 X-SA-Exim-Mail-From: alex.bennee@linaro.org X-SA-Exim-Scanned: No (on socrates.bennee.com); SAEximRunCond expanded to false Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Christoffer Dall writes: > On Tue, Mar 31, 2015 at 04:08:01PM +0100, Alex Bennée wrote: >> This commit defines the API headers for guest debugging. There are two >> architecture specific debug structures: >> >> - kvm_guest_debug_arch, allows us to pass in HW debug registers >> - kvm_debug_exit_arch, signals the exact debug exit and pc >> >> The type of debugging being used is control by the architecture specific >> control bits of the kvm_guest_debug->control flags in the ioctl >> structure. >> >> Signed-off-by: Alex Bennée >> >> --- >> v2 >> - expose hsr and pc directly to user-space >> >> diff --git a/arch/arm64/include/uapi/asm/kvm.h b/arch/arm64/include/uapi/asm/kvm.h >> index 3ef77a4..6ee70a0 100644 >> --- a/arch/arm64/include/uapi/asm/kvm.h >> +++ b/arch/arm64/include/uapi/asm/kvm.h >> @@ -100,10 +100,24 @@ struct kvm_sregs { >> struct kvm_fpu { >> }; >> >> +/* >> + * See ARM ARM D7.3: Debug Registers > > see the ARM ARM for ?? > >> + * >> + * The control registers are architecturally defined as 32 bits but are >> + * stored as 64 bit values along side the value registers and aligned > > do you mean alongside? sure. > >> + * with the rest 64 bit registers in the normal CPU context. > > rest of the 64 bit > >> + */ > > why do we store them as 64 bit values? There's nothing prevented us > from defining them as __u32 is there? Is this to make the ONE_REG > interface accessers more convenient? No but it will involve more fiddling when we copy them into the CPU context which keeps everything as 64 bit aligned. Of course if we want to remove the debug registers from the context and put a pointer in place then this is fairly moot as we will need to change the hyp.S code that copies the registers during the world switch. I was trying to minimise the amount of change to the assembler in this series. > >> +#define KVM_ARM_NDBG_REGS 16 > > nit: is NDBG short for something I don't know about or is it > the number of debug registers we are noting here, in which case I think > KVM_ARM_NUM_DBG_REGS is more clear. OK. > >> struct kvm_guest_debug_arch { >> + __u64 dbg_bcr[KVM_ARM_NDBG_REGS]; >> + __u64 dbg_bvr[KVM_ARM_NDBG_REGS]; >> + __u64 dbg_wcr[KVM_ARM_NDBG_REGS]; >> + __u64 dbg_wvr[KVM_ARM_NDBG_REGS]; >> }; >> >> struct kvm_debug_exit_arch { >> + __u64 pc; >> + __u32 hsr; >> }; >> >> struct kvm_sync_regs { >> @@ -207,4 +221,11 @@ struct kvm_arch_memory_slot { >> >> #endif >> >> +/* >> + * Architecture related debug defines - upper 16 bits of >> + * kvm_guest_debug->control >> + */ >> +#define KVM_GUESTDBG_USE_SW_BP __KVM_GUESTDBG_USE_SW_BP >> +#define KVM_GUESTDBG_USE_HW_BP __KVM_GUESTDBG_USE_HW_BP >> + >> #endif /* __ARM_KVM_H__ */ >> -- >> 2.3.4 >> > > Thanks, > -Christoffer -- Alex Bennée From mboxrd@z Thu Jan 1 00:00:00 1970 From: Alex =?utf-8?Q?Benn=C3=A9e?= Subject: Re: [PATCH v2 03/10] KVM: arm: guest debug, define API headers Date: Thu, 23 Apr 2015 10:54:26 +0100 Message-ID: <87zj5z5fvx.fsf@linaro.org> References: <1427814488-28467-1-git-send-email-alex.bennee@linaro.org> <1427814488-28467-4-git-send-email-alex.bennee@linaro.org> <20150413120813.GN6186@cbox> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Cc: Catalin Marinas , kvm@vger.kernel.org, marc.zyngier@arm.com, jan.kiszka@siemens.com, Will Deacon , open list , dahi@linux.vnet.ibm.com, zhichao.huang@linaro.org, r65777@freescale.com, pbonzini@redhat.com, bp@suse.de, kvmarm@lists.cs.columbia.edu, linux-arm-kernel@lists.infradead.org To: Christoffer Dall Return-path: In-reply-to: <20150413120813.GN6186@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 List-Id: kvm.vger.kernel.org CkNocmlzdG9mZmVyIERhbGwgPGNocmlzdG9mZmVyLmRhbGxAbGluYXJvLm9yZz4gd3JpdGVzOgoK PiBPbiBUdWUsIE1hciAzMSwgMjAxNSBhdCAwNDowODowMVBNICswMTAwLCBBbGV4IEJlbm7DqWUg d3JvdGU6Cj4+IFRoaXMgY29tbWl0IGRlZmluZXMgdGhlIEFQSSBoZWFkZXJzIGZvciBndWVzdCBk ZWJ1Z2dpbmcuIFRoZXJlIGFyZSB0d28KPj4gYXJjaGl0ZWN0dXJlIHNwZWNpZmljIGRlYnVnIHN0 cnVjdHVyZXM6Cj4+IAo+PiAgIC0ga3ZtX2d1ZXN0X2RlYnVnX2FyY2gsIGFsbG93cyB1cyB0byBw YXNzIGluIEhXIGRlYnVnIHJlZ2lzdGVycwo+PiAgIC0ga3ZtX2RlYnVnX2V4aXRfYXJjaCwgc2ln bmFscyB0aGUgZXhhY3QgZGVidWcgZXhpdCBhbmQgcGMKPj4gCj4+IFRoZSB0eXBlIG9mIGRlYnVn Z2luZyBiZWluZyB1c2VkIGlzIGNvbnRyb2wgYnkgdGhlIGFyY2hpdGVjdHVyZSBzcGVjaWZpYwo+ PiBjb250cm9sIGJpdHMgb2YgdGhlIGt2bV9ndWVzdF9kZWJ1Zy0+Y29udHJvbCBmbGFncyBpbiB0 aGUgaW9jdGwKPj4gc3RydWN0dXJlLgo+PiAKPj4gU2lnbmVkLW9mZi1ieTogQWxleCBCZW5uw6ll IDxhbGV4LmJlbm5lZUBsaW5hcm8ub3JnPgo+PiAKPj4gLS0tCj4+IHYyCj4+ICAgIC0gZXhwb3Nl IGhzciBhbmQgcGMgZGlyZWN0bHkgdG8gdXNlci1zcGFjZQo+PiAKPj4gZGlmZiAtLWdpdCBhL2Fy Y2gvYXJtNjQvaW5jbHVkZS91YXBpL2FzbS9rdm0uaCBiL2FyY2gvYXJtNjQvaW5jbHVkZS91YXBp L2FzbS9rdm0uaAo+PiBpbmRleCAzZWY3N2E0Li42ZWU3MGEwIDEwMDY0NAo+PiAtLS0gYS9hcmNo L2FybTY0L2luY2x1ZGUvdWFwaS9hc20va3ZtLmgKPj4gKysrIGIvYXJjaC9hcm02NC9pbmNsdWRl L3VhcGkvYXNtL2t2bS5oCj4+IEBAIC0xMDAsMTAgKzEwMCwyNCBAQCBzdHJ1Y3Qga3ZtX3NyZWdz IHsKPj4gIHN0cnVjdCBrdm1fZnB1IHsKPj4gIH07Cj4+ICAKPj4gKy8qCj4+ICsgKiBTZWUgQVJN IEFSTSBENy4zOiBEZWJ1ZyBSZWdpc3RlcnMKPgo+IHNlZSB0aGUgQVJNIEFSTSBmb3IgPz8KPgo+ PiArICoKPj4gKyAqIFRoZSBjb250cm9sIHJlZ2lzdGVycyBhcmUgYXJjaGl0ZWN0dXJhbGx5IGRl ZmluZWQgYXMgMzIgYml0cyBidXQgYXJlCj4+ICsgKiBzdG9yZWQgYXMgNjQgYml0IHZhbHVlcyBh bG9uZyBzaWRlIHRoZSB2YWx1ZSByZWdpc3RlcnMgYW5kIGFsaWduZWQKPgo+IGRvIHlvdSBtZWFu IGFsb25nc2lkZT8KCnN1cmUuCgo+Cj4+ICsgKiB3aXRoIHRoZSByZXN0IDY0IGJpdCByZWdpc3Rl cnMgaW4gdGhlIG5vcm1hbCBDUFUgY29udGV4dC4KPgo+IHJlc3Qgb2YgdGhlIDY0IGJpdAo+Cj4+ ICsgKi8KPgo+IHdoeSBkbyB3ZSBzdG9yZSB0aGVtIGFzIDY0IGJpdCB2YWx1ZXM/ICBUaGVyZSdz IG5vdGhpbmcgcHJldmVudGVkIHVzCj4gZnJvbSBkZWZpbmluZyB0aGVtIGFzIF9fdTMyIGlzIHRo ZXJlPyAgSXMgdGhpcyB0byBtYWtlIHRoZSBPTkVfUkVHCj4gaW50ZXJmYWNlIGFjY2Vzc2VycyBt b3JlIGNvbnZlbmllbnQ/CgpObyBidXQgaXQgd2lsbCBpbnZvbHZlIG1vcmUgZmlkZGxpbmcgd2hl biB3ZSBjb3B5IHRoZW0gaW50byB0aGUgQ1BVCmNvbnRleHQgd2hpY2gga2VlcHMgZXZlcnl0aGlu ZyBhcyA2NCBiaXQgYWxpZ25lZC4gT2YgY291cnNlIGlmIHdlIHdhbnQKdG8gcmVtb3ZlIHRoZSBk ZWJ1ZyByZWdpc3RlcnMgZnJvbSB0aGUgY29udGV4dCBhbmQgcHV0IGEgcG9pbnRlciBpbgpwbGFj ZSB0aGVuIHRoaXMgaXMgZmFpcmx5IG1vb3QgYXMgd2Ugd2lsbCBuZWVkIHRvIGNoYW5nZSB0aGUg aHlwLlMgY29kZQp0aGF0IGNvcGllcyB0aGUgcmVnaXN0ZXJzIGR1cmluZyB0aGUgd29ybGQgc3dp dGNoLiBJIHdhcyB0cnlpbmcgdG8KbWluaW1pc2UgdGhlIGFtb3VudCBvZiBjaGFuZ2UgdG8gdGhl IGFzc2VtYmxlciBpbiB0aGlzIHNlcmllcy4KCj4KPj4gKyNkZWZpbmUgS1ZNX0FSTV9OREJHX1JF R1MgMTYKPgo+IG5pdDogaXMgTkRCRyBzaG9ydCBmb3Igc29tZXRoaW5nIEkgZG9uJ3Qga25vdyBh Ym91dCBvciBpcyBpdAo+IHRoZSBudW1iZXIgb2YgZGVidWcgcmVnaXN0ZXJzIHdlIGFyZSBub3Rp bmcgaGVyZSwgaW4gd2hpY2ggY2FzZSBJIHRoaW5rCj4gS1ZNX0FSTV9OVU1fREJHX1JFR1MgaXMg bW9yZSBjbGVhci4KCk9LLgoKPgo+PiAgc3RydWN0IGt2bV9ndWVzdF9kZWJ1Z19hcmNoIHsKPj4g KwlfX3U2NCBkYmdfYmNyW0tWTV9BUk1fTkRCR19SRUdTXTsKPj4gKwlfX3U2NCBkYmdfYnZyW0tW TV9BUk1fTkRCR19SRUdTXTsKPj4gKwlfX3U2NCBkYmdfd2NyW0tWTV9BUk1fTkRCR19SRUdTXTsK Pj4gKwlfX3U2NCBkYmdfd3ZyW0tWTV9BUk1fTkRCR19SRUdTXTsKPj4gIH07Cj4+ICAKPj4gIHN0 cnVjdCBrdm1fZGVidWdfZXhpdF9hcmNoIHsKPj4gKwlfX3U2NCBwYzsKPj4gKwlfX3UzMiBoc3I7 Cj4+ICB9Owo+PiAgCj4+ICBzdHJ1Y3Qga3ZtX3N5bmNfcmVncyB7Cj4+IEBAIC0yMDcsNCArMjIx LDExIEBAIHN0cnVjdCBrdm1fYXJjaF9tZW1vcnlfc2xvdCB7Cj4+ICAKPj4gICNlbmRpZgo+PiAg Cj4+ICsvKgo+PiArICogQXJjaGl0ZWN0dXJlIHJlbGF0ZWQgZGVidWcgZGVmaW5lcyAtIHVwcGVy IDE2IGJpdHMgb2YKPj4gKyAqIGt2bV9ndWVzdF9kZWJ1Zy0+Y29udHJvbAo+PiArICovCj4+ICsj ZGVmaW5lIEtWTV9HVUVTVERCR19VU0VfU1dfQlAJICAgICAgICBfX0tWTV9HVUVTVERCR19VU0Vf U1dfQlAKPj4gKyNkZWZpbmUgS1ZNX0dVRVNUREJHX1VTRV9IV19CUAkJX19LVk1fR1VFU1REQkdf VVNFX0hXX0JQCj4+ICsKPj4gICNlbmRpZiAvKiBfX0FSTV9LVk1fSF9fICovCj4+IC0tIAo+PiAy LjMuNAo+PiAKPgo+IFRoYW5rcywKPiAtQ2hyaXN0b2ZmZXIKCi0tIApBbGV4IEJlbm7DqWUKX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18Ka3ZtYXJtIG1haWxp bmcgbGlzdAprdm1hcm1AbGlzdHMuY3MuY29sdW1iaWEuZWR1Cmh0dHBzOi8vbGlzdHMuY3MuY29s dW1iaWEuZWR1L21haWxtYW4vbGlzdGluZm8va3ZtYXJtCg== From mboxrd@z Thu Jan 1 00:00:00 1970 From: alex.bennee@linaro.org (Alex =?utf-8?Q?Benn=C3=A9e?=) Date: Thu, 23 Apr 2015 10:54:26 +0100 Subject: [PATCH v2 03/10] KVM: arm: guest debug, define API headers In-Reply-To: <20150413120813.GN6186@cbox> References: <1427814488-28467-1-git-send-email-alex.bennee@linaro.org> <1427814488-28467-4-git-send-email-alex.bennee@linaro.org> <20150413120813.GN6186@cbox> Message-ID: <87zj5z5fvx.fsf@linaro.org> To: linux-arm-kernel@lists.infradead.org List-Id: linux-arm-kernel.lists.infradead.org Christoffer Dall writes: > On Tue, Mar 31, 2015 at 04:08:01PM +0100, Alex Benn?e wrote: >> This commit defines the API headers for guest debugging. There are two >> architecture specific debug structures: >> >> - kvm_guest_debug_arch, allows us to pass in HW debug registers >> - kvm_debug_exit_arch, signals the exact debug exit and pc >> >> The type of debugging being used is control by the architecture specific >> control bits of the kvm_guest_debug->control flags in the ioctl >> structure. >> >> Signed-off-by: Alex Benn?e >> >> --- >> v2 >> - expose hsr and pc directly to user-space >> >> diff --git a/arch/arm64/include/uapi/asm/kvm.h b/arch/arm64/include/uapi/asm/kvm.h >> index 3ef77a4..6ee70a0 100644 >> --- a/arch/arm64/include/uapi/asm/kvm.h >> +++ b/arch/arm64/include/uapi/asm/kvm.h >> @@ -100,10 +100,24 @@ struct kvm_sregs { >> struct kvm_fpu { >> }; >> >> +/* >> + * See ARM ARM D7.3: Debug Registers > > see the ARM ARM for ?? > >> + * >> + * The control registers are architecturally defined as 32 bits but are >> + * stored as 64 bit values along side the value registers and aligned > > do you mean alongside? sure. > >> + * with the rest 64 bit registers in the normal CPU context. > > rest of the 64 bit > >> + */ > > why do we store them as 64 bit values? There's nothing prevented us > from defining them as __u32 is there? Is this to make the ONE_REG > interface accessers more convenient? No but it will involve more fiddling when we copy them into the CPU context which keeps everything as 64 bit aligned. Of course if we want to remove the debug registers from the context and put a pointer in place then this is fairly moot as we will need to change the hyp.S code that copies the registers during the world switch. I was trying to minimise the amount of change to the assembler in this series. > >> +#define KVM_ARM_NDBG_REGS 16 > > nit: is NDBG short for something I don't know about or is it > the number of debug registers we are noting here, in which case I think > KVM_ARM_NUM_DBG_REGS is more clear. OK. > >> struct kvm_guest_debug_arch { >> + __u64 dbg_bcr[KVM_ARM_NDBG_REGS]; >> + __u64 dbg_bvr[KVM_ARM_NDBG_REGS]; >> + __u64 dbg_wcr[KVM_ARM_NDBG_REGS]; >> + __u64 dbg_wvr[KVM_ARM_NDBG_REGS]; >> }; >> >> struct kvm_debug_exit_arch { >> + __u64 pc; >> + __u32 hsr; >> }; >> >> struct kvm_sync_regs { >> @@ -207,4 +221,11 @@ struct kvm_arch_memory_slot { >> >> #endif >> >> +/* >> + * Architecture related debug defines - upper 16 bits of >> + * kvm_guest_debug->control >> + */ >> +#define KVM_GUESTDBG_USE_SW_BP __KVM_GUESTDBG_USE_SW_BP >> +#define KVM_GUESTDBG_USE_HW_BP __KVM_GUESTDBG_USE_HW_BP >> + >> #endif /* __ARM_KVM_H__ */ >> -- >> 2.3.4 >> > > Thanks, > -Christoffer -- Alex Benn?e