From mboxrd@z Thu Jan 1 00:00:00 1970 From: Alex =?utf-8?Q?Benn=C3=A9e?= Subject: Re: [PATCH v5 10/12] KVM: arm64: guest debug, HW assisted debug support Date: Mon, 01 Jun 2015 13:41:22 +0100 Message-ID: <87y4k3bnyl.fsf@linaro.org> References: <1432891828-4816-1-git-send-email-alex.bennee@linaro.org> <1432891828-4816-11-git-send-email-alex.bennee@linaro.org> <20150601091552.GA1641@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 85D2B52A43 for ; Mon, 1 Jun 2015 08:32:16 -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 jMpqIIXnNmxI for ; Mon, 1 Jun 2015 08:32:14 -0400 (EDT) Received: from socrates.bennee.com (static.88-198-71-155.clients.your-server.de [88.198.71.155]) by mm01.cs.columbia.edu (Postfix) with ESMTPS id D26C452A1E for ; Mon, 1 Jun 2015 08:32:13 -0400 (EDT) In-reply-to: <20150601091552.GA1641@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: Will Deacon Cc: "kvm@vger.kernel.org" , "open list:DOCUMENTA TION" , Peter Zijlstra , "jan.kiszka@siemens.com" , Ingo Molnar , Lorenzo Pieralisi , Russell King , Jonathan Corbet , "kvmarm@lists.cs.columbia.edu" , Gleb Natapov , "zhichao.huang@linaro.org" , Catalin Marinas , "bp@suse.de" , Marc Zyngier , "r65777@freescale.com" , "linux-arm-kernel@lists.infradead.org" , "open list:ABI/API" , open list , "dahi@linux.vnet.ibm.com" , pbonzini@r List-Id: kvmarm@lists.cs.columbia.edu CldpbGwgRGVhY29uIDx3aWxsLmRlYWNvbkBhcm0uY29tPiB3cml0ZXM6Cgo+IEhpIEFsZXgsCj4K PiBPbiBGcmksIE1heSAyOSwgMjAxNSBhdCAxMDozMDoyNkFNICswMTAwLCBBbGV4IEJlbm7DqWUg d3JvdGU6Cj4+IFRoaXMgYWRkcyBzdXBwb3J0IGZvciB1c2Vyc3BhY2UgdG8gY29udHJvbCB0aGUg SFcgZGVidWcgcmVnaXN0ZXJzIGZvcgo+PiBndWVzdCBkZWJ1Zy4gSW4gdGhlIGRlYnVnIGlvY3Rs IHdlIGNvcHkgdGhlIElNUERFRiBkZWZpbmVkIG51bWJlciBvZgo+PiByZWdpc3RlcnMgaW50byBh IG5ldyByZWdpc3RlciBzZXQgY2FsbGVkIGhvc3RfZGVidWdfc3RhdGUuIFRoZXJlIGlzIG5vdwo+ PiBhIG5ldyB2Y3B1IHBhcmFtZXRlciBjYWxsZWQgZGVidWdfcHRyIHdoaWNoIHNlbGVjdHMgd2hp Y2ggcmVnaXN0ZXIgc2V0Cj4+IGlzIHRvIGNvcGllZCBpbnRvIHRoZSByZWFsIHJlZ2lzdGVycyB3 aGVuIHdvcmxkIHN3aXRjaCBvY2N1cnMuCj4+IAo+PiBJJ3ZlIG1vdmVkIHNvbWUgaGVscGVyIGZ1 bmN0aW9ucyBpbnRvIHRoZSBod19icmVha3BvaW50LmggaGVhZGVyIGZvcgo+PiByZS11c2UuCj4+ IAo+PiBBcyB3aXRoIHNpbmdsZSBzdGVwIHdlIG5lZWQgdG8gdHdlYWsgdGhlIGd1ZXN0IHJlZ2lz dGVycyB0byBlbmFibGUgdGhlCj4+IGV4Y2VwdGlvbnMgc28gd2UgbmVlZCB0byBzYXZlIGFuZCBy ZXN0b3JlIHRob3NlIGJpdHMuCj4+IAo+PiBUd28gbmV3IGNhcGFiaWxpdGllcyBoYXZlIGJlZW4g YWRkZWQgdG8gdGhlIEtWTV9FWFRFTlNJT04gaW9jdGwgdG8gYWxsb3cKPj4gdXNlcnNwYWNlIHRv IHF1ZXJ5IHRoZSBudW1iZXIgb2YgaGFyZHdhcmUgYnJlYWsgYW5kIHdhdGNoIHBvaW50cwo+PiBh dmFpbGFibGUgb24gdGhlIGhvc3QgaGFyZHdhcmUuCj4+IAo+PiBTaWduZWQtb2ZmLWJ5OiBBbGV4 IEJlbm7DqWUgPGFsZXguYmVubmVlQGxpbmFyby5vcmc+Cj4KPiBbLi4uXQo+Cj4+IGRpZmYgLS1n aXQgYS9Eb2N1bWVudGF0aW9uL3ZpcnR1YWwva3ZtL2FwaS50eHQgYi9Eb2N1bWVudGF0aW9uL3Zp cnR1YWwva3ZtL2FwaS50eHQKPj4gaW5kZXggMzNjODE0My4uYWRhNTdkZiAxMDA2NDQKPj4gLS0t IGEvRG9jdW1lbnRhdGlvbi92aXJ0dWFsL2t2bS9hcGkudHh0Cj4+ICsrKyBiL0RvY3VtZW50YXRp b24vdmlydHVhbC9rdm0vYXBpLnR4dAo+PiBAQCAtMjY2OCw3ICsyNjY4LDcgQEAgVGhlIHRvcCAx NiBiaXRzIG9mIHRoZSBjb250cm9sIGZpZWxkIGFyZSBhcmNoaXRlY3R1cmUgc3BlY2lmaWMgY29u dHJvbAo+PiAgZmxhZ3Mgd2hpY2ggY2FuIGluY2x1ZGUgdGhlIGZvbGxvd2luZzoKPj4gIAo+PiAg ICAtIEtWTV9HVUVTVERCR19VU0VfU1dfQlA6ICAgICB1c2luZyBzb2Z0d2FyZSBicmVha3BvaW50 cyBbeDg2LCBhcm02NF0KPj4gLSAgLSBLVk1fR1VFU1REQkdfVVNFX0hXX0JQOiAgICAgdXNpbmcg aGFyZHdhcmUgYnJlYWtwb2ludHMgW3g4NiwgczM5MF0KPj4gKyAgLSBLVk1fR1VFU1REQkdfVVNF X0hXX0JQOiAgICAgdXNpbmcgaGFyZHdhcmUgYnJlYWtwb2ludHMgW3g4NiwgczM5MCwgYXJtNjRd Cj4+ICAgIC0gS1ZNX0dVRVNUREJHX0lOSkVDVF9EQjogICAgIGluamVjdCBEQiB0eXBlIGV4Y2Vw dGlvbiBbeDg2XQo+PiAgICAtIEtWTV9HVUVTVERCR19JTkpFQ1RfQlA6ICAgICBpbmplY3QgQlAg dHlwZSBleGNlcHRpb24gW3g4Nl0KPj4gICAgLSBLVk1fR1VFU1REQkdfRVhJVF9QRU5ESU5HOiAg dHJpZ2dlciBhbiBpbW1lZGlhdGUgZ3Vlc3QgZXhpdCBbczM5MF0KPj4gQEAgLTI2ODMsNiArMjY4 MywxMSBAQCB1cGRhdGVkIHRvIHRoZSBjb3JyZWN0IChzdXBwbGllZCkgdmFsdWVzLgo+PiAgVGhl IHNlY29uZCBwYXJ0IG9mIHRoZSBzdHJ1Y3R1cmUgaXMgYXJjaGl0ZWN0dXJlIHNwZWNpZmljIGFu ZAo+PiAgdHlwaWNhbGx5IGNvbnRhaW5zIGEgc2V0IG9mIGRlYnVnIHJlZ2lzdGVycy4KPj4gIAo+ PiArRm9yIGFybTY0IHRoZSBudW1iZXIgb2YgZGVidWcgcmVnaXN0ZXJzIGlzIGltcGxlbWVudGF0 aW9uIGRlZmluZWQgYW5kCj4+ICtjYW4gYmUgZGV0ZXJtaW5lZCBieSBxdWVyeWluZyB0aGUgS1ZN X0NBUF9HVUVTVF9ERUJVR19IV19CUFMgYW5kCj4+ICtLVk1fQ0FQX0dVRVNUX0RFQlVHX0hXX1dQ UyBjYXBhYmlsaXRpZXMgd2hpY2ggcmV0dXJuIGEgcG9zaXRpdmUgbnVtYmVyCj4+ICtpbmRpY2F0 aW5nIHRoZSBudW1iZXIgb2Ygc3VwcG9ydGVkIHJlZ2lzdGVycy4KPj4gKwo+PiAgV2hlbiBkZWJ1 ZyBldmVudHMgZXhpdCB0aGUgbWFpbiBydW4gbG9vcCB3aXRoIHRoZSByZWFzb24KPj4gIEtWTV9F WElUX0RFQlVHIHdpdGggdGhlIGt2bV9kZWJ1Z19leGl0X2FyY2ggcGFydCBvZiB0aGUga3ZtX3J1 bgo+PiAgc3RydWN0dXJlIGNvbnRhaW5pbmcgYXJjaGl0ZWN0dXJlIHNwZWNpZmljIGRlYnVnIGlu Zm9ybWF0aW9uLgo+PiBkaWZmIC0tZ2l0IGEvYXJjaC9hcm0va3ZtL2FybS5jIGIvYXJjaC9hcm0v a3ZtL2FybS5jCj4+IGluZGV4IDBkMTdjN2IuLjZkZjQ3YzEgMTAwNjQ0Cj4+IC0tLSBhL2FyY2gv YXJtL2t2bS9hcm0uYwo+PiArKysgYi9hcmNoL2FybS9rdm0vYXJtLmMKPj4gQEAgLTMwNyw2ICsz MDcsNyBAQCB2b2lkIGt2bV9hcmNoX3ZjcHVfcHV0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKPj4g IAo+PiAgI2RlZmluZSBLVk1fR1VFU1REQkdfVkFMSURfTUFTSyAoS1ZNX0dVRVNUREJHX0VOQUJM RSB8ICAgIFwKPj4gIAkJCSAgICBLVk1fR1VFU1REQkdfVVNFX1NXX0JQIHwgXAo+PiArCQkJICAg IEtWTV9HVUVTVERCR19VU0VfSFdfQlAgfCBcCj4+ICAJCQkgICAgS1ZNX0dVRVNUREJHX1NJTkdM RVNURVApCj4+ICAKPj4gIC8qKgo+PiBAQCAtMzI3LDYgKzMyOCwxMiBAQCBpbnQga3ZtX2FyY2hf dmNwdV9pb2N0bF9zZXRfZ3Vlc3RfZGVidWcoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LAo+PiAgCj4+ ICAJaWYgKGRiZy0+Y29udHJvbCAmIEtWTV9HVUVTVERCR19FTkFCTEUpIHsKPj4gIAkJdmNwdS0+ Z3Vlc3RfZGVidWcgPSBkYmctPmNvbnRyb2w7Cj4+ICsKPj4gKwkJLyogSGFyZHdhcmUgYXNzaXN0 ZWQgQnJlYWsgYW5kIFdhdGNoIHBvaW50cyAqLwo+PiArCQlpZiAodmNwdS0+Z3Vlc3RfZGVidWcg JiBLVk1fR1VFU1REQkdfVVNFX0hXX0JQKSB7Cj4+ICsJCQl2Y3B1LT5hcmNoLmV4dGVybmFsX2Rl YnVnX3N0YXRlID0gZGJnLT5hcmNoOwo+PiArCQl9Cj4+ICsKPj4gIAl9IGVsc2Ugewo+PiAgCQkv KiBJZiBub3QgZW5hYmxlZCBjbGVhciBhbGwgZmxhZ3MgKi8KPj4gIAkJdmNwdS0+Z3Vlc3RfZGVi dWcgPSAwOwo+PiBkaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9od19icmVha3Bv aW50LmggYi9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2h3X2JyZWFrcG9pbnQuaAo+PiBpbmRleCA1 MmI0ODRiLi5jNDUwNTUyIDEwMDY0NAo+PiAtLS0gYS9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2h3 X2JyZWFrcG9pbnQuaAo+PiArKysgYi9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2h3X2JyZWFrcG9p bnQuaAo+PiBAQCAtMTMwLDYgKzEzMCwxOCBAQCBzdGF0aWMgaW5saW5lIHZvaWQgcHRyYWNlX2h3 X2NvcHlfdGhyZWFkKHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaykKPj4gIH0KPj4gICNlbmRpZgo+ PiAgCj4+ICsvKiBEZXRlcm1pbmUgbnVtYmVyIG9mIEJSUCByZWdpc3RlcnMgYXZhaWxhYmxlLiAq Lwo+PiArc3RhdGljIGlubGluZSBpbnQgZ2V0X251bV9icnBzKHZvaWQpCj4+ICt7Cj4+ICsJcmV0 dXJuICgocmVhZF9jcHVpZChJRF9BQTY0REZSMF9FTDEpID4+IDEyKSAmIDB4ZikgKyAxOwo+PiAr fQo+PiArCj4+ICsvKiBEZXRlcm1pbmUgbnVtYmVyIG9mIFdSUCByZWdpc3RlcnMgYXZhaWxhYmxl LiAqLwo+PiArc3RhdGljIGlubGluZSBpbnQgZ2V0X251bV93cnBzKHZvaWQpCj4+ICt7Cj4+ICsJ cmV0dXJuICgocmVhZF9jcHVpZChJRF9BQTY0REZSMF9FTDEpID4+IDIwKSAmIDB4ZikgKyAxOwo+ PiArfQo+Cj4gSSdtIGZpbmUgd2l0aCBtb3ZpbmcgdGhlc2UgaW50byB0aGUgaGVhZGVyIGZpbGUs IGJ1dCB3ZSBzaG91bGQgcHJvYmFibHkKPiByZXZpc2l0IHRoaXMgYXQgc29tZSBwb2ludCBzbyB0 aGF0IHdlIHVzZSBhIHNoYWRvdyB2YWx1ZSB0byBpbmRpY2F0ZSB0aGUKPiBtaW5pbXVtIG51bWJl ciBvZiByZWdpc3RlcnMgYWNyb3NzIHRoZSBzeXN0ZW0gZm9yIGUuZy4gYmlnLkxJVFRMRSBwbGF0 Zm9ybXMKPiB0aGF0IGRvbid0IGhhdmUgdW5pZm9ybSBkZWJ1ZyByZXNvdXJjZXMuCgpUaGVyZSBp cyB3b3JrIGdvaW5nIGZvcndhcmQgaW4gUUVNVSB0byBzcGVjaWZ5IHRoaXMgbGltaXRhdGlvbiB3 aGVuCmNyZWF0aW5nIHZjcHVzLiBBdCB0aGUgbW9tZW50IHRoZSBrZXJuZWwgc2FuaXR5IGNoZWNr cyB0aGVzZSBhcmUgYWxsIHRoZQpzYW1lIG9uIGJvb3QgdXAgYnV0IEkgZ3Vlc3Mgd2Ugd2lsbCBo YXZlIHRvIGRlY2lkZSB3aGVyZSB0aGUgc21hcnRzIHdpbGwKZW5kIHVwLiBEbyB3ZToKCiAgLSBy ZXBvcnQgdGhlIHJlYWwgbnVtYmVyIHBlciByZWFsLWNwdSAoUUVNVSBmaWd1cmVzIG91dCB2Y3B1 ICBjb25maWcpCgogIG9yCgogIC0gcmVwb3J0IHRoZSBsb3dlc3QgY29tbW9uIGRlbm9taW5hdG9y CiAgCgo+Cj4+ICBleHRlcm4gc3RydWN0IHBtdSBwZXJmX29wc19icDsKPj4gIAo+PiAgI2VuZGlm CS8qIF9fS0VSTkVMX18gKi8KPj4gZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20v a3ZtX2hvc3QuaCBiL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20va3ZtX2hvc3QuaAo+PiBpbmRleCBl NTA0MGI2Li40OThkNGY3IDEwMDY0NAo+PiAtLS0gYS9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2t2 bV9ob3N0LmgKPj4gKysrIGIvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9rdm1faG9zdC5oCj4+IEBA IC0xMTMsMTIgKzExMywxMyBAQCBzdHJ1Y3Qga3ZtX3ZjcHVfYXJjaCB7Cj4+ICAKPj4gIAkvKgo+ PiAgCSAqIEZvciBkZWJ1Z2dpbmcgdGhlIGd1ZXN0IHdlIG5lZWQgdG8ga2VlcCBhIHNldCBvZiBk ZWJ1Zwo+PiAtCSAqIHJlZ2lzdGVycyB3aGljaCBjYW4gb3ZlcnJpZGUgdGhlIGd1ZXN0cyBvd24g ZGVidWcgc3RhdGUKPj4gKwkgKiByZWdpc3RlcnMgd2hpY2ggY2FuIG92ZXJyaWRlIHRoZSBndWVz dCdzIG93biBkZWJ1ZyBzdGF0ZQo+PiAgCSAqIHdoaWxlIGJlaW5nIHVzZWQuIFRoZXNlIGFyZSBz ZXQgdmlhIHRoZSBLVk1fU0VUX0dVRVNUX0RFQlVHCj4+ICAJICogaW9jdGwuCj4+ICAJICovCj4+ ICAJc3RydWN0IGt2bV9ndWVzdF9kZWJ1Z19hcmNoICpkZWJ1Z19wdHI7Cj4+ICAJc3RydWN0IGt2 bV9ndWVzdF9kZWJ1Z19hcmNoIHZjcHVfZGVidWdfc3RhdGU7Cj4+ICsJc3RydWN0IGt2bV9ndWVz dF9kZWJ1Z19hcmNoIGV4dGVybmFsX2RlYnVnX3N0YXRlOwo+PiAgCj4+ICAJLyogUG9pbnRlciB0 byBob3N0IENQVSBjb250ZXh0ICovCj4+ICAJa3ZtX2NwdV9jb250ZXh0X3QgKmhvc3RfY3B1X2Nv bnRleHQ7Cj4+IGRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2luY2x1ZGUvdWFwaS9hc20va3ZtLmgg Yi9hcmNoL2FybTY0L2luY2x1ZGUvdWFwaS9hc20va3ZtLmgKPj4gaW5kZXggNDM3NThlNy4uOTUx NjhjMiAxMDA2NDQKPj4gLS0tIGEvYXJjaC9hcm02NC9pbmNsdWRlL3VhcGkvYXNtL2t2bS5oCj4+ ICsrKyBiL2FyY2gvYXJtNjQvaW5jbHVkZS91YXBpL2FzbS9rdm0uaAo+PiBAQCAtMTE2LDcgKzEx Niw3IEBAIHN0cnVjdCBrdm1fZ3Vlc3RfZGVidWdfYXJjaCB7Cj4+ICAKPj4gIHN0cnVjdCBrdm1f ZGVidWdfZXhpdF9hcmNoIHsKPj4gIAlfX3UzMiBoc3I7Cj4+IC0JX191NjQgZmFyOwo+PiArCV9f dTY0IGZhcjsJLyogdXNlZCBmb3Igd2F0Y2hwb2ludHMgKi8KPgo+IFdoeSBub3QganVzdCBhZGQg dGhlIGNvbW1lbnQgd2l0aCB0aGUgZmllbGQgaW4geW91ciBlYXJsaWVyIHBhdGNoPwoKSSBjYW4g Zml4IHRoYXQgdXAgaWYgdGhlcmUgaXMgbmVlZCB0byBhIHJlLXNwaW4uCgotLSAKQWxleCBCZW5u 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: Mon, 01 Jun 2015 13:41:22 +0100 Subject: [PATCH v5 10/12] KVM: arm64: guest debug, HW assisted debug support In-Reply-To: <20150601091552.GA1641@arm.com> References: <1432891828-4816-1-git-send-email-alex.bennee@linaro.org> <1432891828-4816-11-git-send-email-alex.bennee@linaro.org> <20150601091552.GA1641@arm.com> Message-ID: <87y4k3bnyl.fsf@linaro.org> To: linux-arm-kernel@lists.infradead.org List-Id: linux-arm-kernel.lists.infradead.org Will Deacon writes: > Hi Alex, > > On Fri, May 29, 2015 at 10:30:26AM +0100, Alex Benn?e wrote: >> This adds support for userspace to control the HW debug registers for >> guest debug. In the debug ioctl we copy the IMPDEF defined number of >> registers into a new register set called host_debug_state. There is now >> a new vcpu parameter called debug_ptr which selects which register set >> is to copied into the real registers when world switch occurs. >> >> I've moved some helper functions into the hw_breakpoint.h header for >> re-use. >> >> As with single step we need to tweak the guest registers to enable the >> exceptions so we need to save and restore those bits. >> >> Two new capabilities have been added to the KVM_EXTENSION ioctl to allow >> userspace to query the number of hardware break and watch points >> available on the host hardware. >> >> Signed-off-by: Alex Benn?e > > [...] > >> diff --git a/Documentation/virtual/kvm/api.txt b/Documentation/virtual/kvm/api.txt >> index 33c8143..ada57df 100644 >> --- a/Documentation/virtual/kvm/api.txt >> +++ b/Documentation/virtual/kvm/api.txt >> @@ -2668,7 +2668,7 @@ The top 16 bits of the control field are architecture specific control >> flags which can include the following: >> >> - KVM_GUESTDBG_USE_SW_BP: using software breakpoints [x86, arm64] >> - - KVM_GUESTDBG_USE_HW_BP: using hardware breakpoints [x86, s390] >> + - KVM_GUESTDBG_USE_HW_BP: using hardware breakpoints [x86, s390, arm64] >> - KVM_GUESTDBG_INJECT_DB: inject DB type exception [x86] >> - KVM_GUESTDBG_INJECT_BP: inject BP type exception [x86] >> - KVM_GUESTDBG_EXIT_PENDING: trigger an immediate guest exit [s390] >> @@ -2683,6 +2683,11 @@ updated to the correct (supplied) values. >> The second part of the structure is architecture specific and >> typically contains a set of debug registers. >> >> +For arm64 the number of debug registers is implementation defined and >> +can be determined by querying the KVM_CAP_GUEST_DEBUG_HW_BPS and >> +KVM_CAP_GUEST_DEBUG_HW_WPS capabilities which return a positive number >> +indicating the number of supported registers. >> + >> When debug events exit the main run loop with the reason >> KVM_EXIT_DEBUG with the kvm_debug_exit_arch part of the kvm_run >> structure containing architecture specific debug information. >> diff --git a/arch/arm/kvm/arm.c b/arch/arm/kvm/arm.c >> index 0d17c7b..6df47c1 100644 >> --- a/arch/arm/kvm/arm.c >> +++ b/arch/arm/kvm/arm.c >> @@ -307,6 +307,7 @@ void kvm_arch_vcpu_put(struct kvm_vcpu *vcpu) >> >> #define KVM_GUESTDBG_VALID_MASK (KVM_GUESTDBG_ENABLE | \ >> KVM_GUESTDBG_USE_SW_BP | \ >> + KVM_GUESTDBG_USE_HW_BP | \ >> KVM_GUESTDBG_SINGLESTEP) >> >> /** >> @@ -327,6 +328,12 @@ int kvm_arch_vcpu_ioctl_set_guest_debug(struct kvm_vcpu *vcpu, >> >> if (dbg->control & KVM_GUESTDBG_ENABLE) { >> vcpu->guest_debug = dbg->control; >> + >> + /* Hardware assisted Break and Watch points */ >> + if (vcpu->guest_debug & KVM_GUESTDBG_USE_HW_BP) { >> + vcpu->arch.external_debug_state = dbg->arch; >> + } >> + >> } else { >> /* If not enabled clear all flags */ >> vcpu->guest_debug = 0; >> diff --git a/arch/arm64/include/asm/hw_breakpoint.h b/arch/arm64/include/asm/hw_breakpoint.h >> index 52b484b..c450552 100644 >> --- a/arch/arm64/include/asm/hw_breakpoint.h >> +++ b/arch/arm64/include/asm/hw_breakpoint.h >> @@ -130,6 +130,18 @@ static inline void ptrace_hw_copy_thread(struct task_struct *task) >> } >> #endif >> >> +/* Determine number of BRP registers available. */ >> +static inline int get_num_brps(void) >> +{ >> + return ((read_cpuid(ID_AA64DFR0_EL1) >> 12) & 0xf) + 1; >> +} >> + >> +/* Determine number of WRP registers available. */ >> +static inline int get_num_wrps(void) >> +{ >> + return ((read_cpuid(ID_AA64DFR0_EL1) >> 20) & 0xf) + 1; >> +} > > I'm fine with moving these into the header file, but we should probably > revisit this at some point so that we use a shadow value to indicate the > minimum number of registers across the system for e.g. big.LITTLE platforms > that don't have uniform debug resources. There is work going forward in QEMU to specify this limitation when creating vcpus. At the moment the kernel sanity checks these are all the same on boot up but I guess we will have to decide where the smarts will end up. Do we: - report the real number per real-cpu (QEMU figures out vcpu config) or - report the lowest common denominator > >> extern struct pmu perf_ops_bp; >> >> #endif /* __KERNEL__ */ >> diff --git a/arch/arm64/include/asm/kvm_host.h b/arch/arm64/include/asm/kvm_host.h >> index e5040b6..498d4f7 100644 >> --- a/arch/arm64/include/asm/kvm_host.h >> +++ b/arch/arm64/include/asm/kvm_host.h >> @@ -113,12 +113,13 @@ struct kvm_vcpu_arch { >> >> /* >> * For debugging the guest we need to keep a set of debug >> - * registers which can override the guests own debug state >> + * registers which can override the guest's own debug state >> * while being used. These are set via the KVM_SET_GUEST_DEBUG >> * ioctl. >> */ >> struct kvm_guest_debug_arch *debug_ptr; >> struct kvm_guest_debug_arch vcpu_debug_state; >> + struct kvm_guest_debug_arch external_debug_state; >> >> /* Pointer to host CPU context */ >> kvm_cpu_context_t *host_cpu_context; >> diff --git a/arch/arm64/include/uapi/asm/kvm.h b/arch/arm64/include/uapi/asm/kvm.h >> index 43758e7..95168c2 100644 >> --- a/arch/arm64/include/uapi/asm/kvm.h >> +++ b/arch/arm64/include/uapi/asm/kvm.h >> @@ -116,7 +116,7 @@ struct kvm_guest_debug_arch { >> >> struct kvm_debug_exit_arch { >> __u32 hsr; >> - __u64 far; >> + __u64 far; /* used for watchpoints */ > > Why not just add the comment with the field in your earlier patch? I can fix that up if there is need to a re-spin. -- 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 S1752754AbbFAMmq (ORCPT ); Mon, 1 Jun 2015 08:42:46 -0400 Received: from static.88-198-71-155.clients.your-server.de ([88.198.71.155]:37892 "EHLO socrates.bennee.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751332AbbFAMmh (ORCPT ); Mon, 1 Jun 2015 08:42:37 -0400 References: <1432891828-4816-1-git-send-email-alex.bennee@linaro.org> <1432891828-4816-11-git-send-email-alex.bennee@linaro.org> <20150601091552.GA1641@arm.com> From: Alex =?utf-8?Q?Benn=C3=A9e?= To: Will Deacon Cc: "kvm\@vger.kernel.org" , "linux-arm-kernel\@lists.infradead.org" , "kvmarm\@lists.cs.columbia.edu" , "christoffer.dall\@linaro.org" , Marc Zyngier , "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 , Jonathan Corbet , Russell King , Catalin Marinas , Ingo Molnar , Peter Zijlstra , Lorenzo Pieralisi , "open list\:DOCUMENTATION" , open list , "open list\:ABI\/API" Subject: Re: [PATCH v5 10/12] KVM: arm64: guest debug, HW assisted debug support In-reply-to: <20150601091552.GA1641@arm.com> Date: Mon, 01 Jun 2015 13:41:22 +0100 Message-ID: <87y4k3bnyl.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 Will Deacon writes: > Hi Alex, > > On Fri, May 29, 2015 at 10:30:26AM +0100, Alex Bennée wrote: >> This adds support for userspace to control the HW debug registers for >> guest debug. In the debug ioctl we copy the IMPDEF defined number of >> registers into a new register set called host_debug_state. There is now >> a new vcpu parameter called debug_ptr which selects which register set >> is to copied into the real registers when world switch occurs. >> >> I've moved some helper functions into the hw_breakpoint.h header for >> re-use. >> >> As with single step we need to tweak the guest registers to enable the >> exceptions so we need to save and restore those bits. >> >> Two new capabilities have been added to the KVM_EXTENSION ioctl to allow >> userspace to query the number of hardware break and watch points >> available on the host hardware. >> >> Signed-off-by: Alex Bennée > > [...] > >> diff --git a/Documentation/virtual/kvm/api.txt b/Documentation/virtual/kvm/api.txt >> index 33c8143..ada57df 100644 >> --- a/Documentation/virtual/kvm/api.txt >> +++ b/Documentation/virtual/kvm/api.txt >> @@ -2668,7 +2668,7 @@ The top 16 bits of the control field are architecture specific control >> flags which can include the following: >> >> - KVM_GUESTDBG_USE_SW_BP: using software breakpoints [x86, arm64] >> - - KVM_GUESTDBG_USE_HW_BP: using hardware breakpoints [x86, s390] >> + - KVM_GUESTDBG_USE_HW_BP: using hardware breakpoints [x86, s390, arm64] >> - KVM_GUESTDBG_INJECT_DB: inject DB type exception [x86] >> - KVM_GUESTDBG_INJECT_BP: inject BP type exception [x86] >> - KVM_GUESTDBG_EXIT_PENDING: trigger an immediate guest exit [s390] >> @@ -2683,6 +2683,11 @@ updated to the correct (supplied) values. >> The second part of the structure is architecture specific and >> typically contains a set of debug registers. >> >> +For arm64 the number of debug registers is implementation defined and >> +can be determined by querying the KVM_CAP_GUEST_DEBUG_HW_BPS and >> +KVM_CAP_GUEST_DEBUG_HW_WPS capabilities which return a positive number >> +indicating the number of supported registers. >> + >> When debug events exit the main run loop with the reason >> KVM_EXIT_DEBUG with the kvm_debug_exit_arch part of the kvm_run >> structure containing architecture specific debug information. >> diff --git a/arch/arm/kvm/arm.c b/arch/arm/kvm/arm.c >> index 0d17c7b..6df47c1 100644 >> --- a/arch/arm/kvm/arm.c >> +++ b/arch/arm/kvm/arm.c >> @@ -307,6 +307,7 @@ void kvm_arch_vcpu_put(struct kvm_vcpu *vcpu) >> >> #define KVM_GUESTDBG_VALID_MASK (KVM_GUESTDBG_ENABLE | \ >> KVM_GUESTDBG_USE_SW_BP | \ >> + KVM_GUESTDBG_USE_HW_BP | \ >> KVM_GUESTDBG_SINGLESTEP) >> >> /** >> @@ -327,6 +328,12 @@ int kvm_arch_vcpu_ioctl_set_guest_debug(struct kvm_vcpu *vcpu, >> >> if (dbg->control & KVM_GUESTDBG_ENABLE) { >> vcpu->guest_debug = dbg->control; >> + >> + /* Hardware assisted Break and Watch points */ >> + if (vcpu->guest_debug & KVM_GUESTDBG_USE_HW_BP) { >> + vcpu->arch.external_debug_state = dbg->arch; >> + } >> + >> } else { >> /* If not enabled clear all flags */ >> vcpu->guest_debug = 0; >> diff --git a/arch/arm64/include/asm/hw_breakpoint.h b/arch/arm64/include/asm/hw_breakpoint.h >> index 52b484b..c450552 100644 >> --- a/arch/arm64/include/asm/hw_breakpoint.h >> +++ b/arch/arm64/include/asm/hw_breakpoint.h >> @@ -130,6 +130,18 @@ static inline void ptrace_hw_copy_thread(struct task_struct *task) >> } >> #endif >> >> +/* Determine number of BRP registers available. */ >> +static inline int get_num_brps(void) >> +{ >> + return ((read_cpuid(ID_AA64DFR0_EL1) >> 12) & 0xf) + 1; >> +} >> + >> +/* Determine number of WRP registers available. */ >> +static inline int get_num_wrps(void) >> +{ >> + return ((read_cpuid(ID_AA64DFR0_EL1) >> 20) & 0xf) + 1; >> +} > > I'm fine with moving these into the header file, but we should probably > revisit this at some point so that we use a shadow value to indicate the > minimum number of registers across the system for e.g. big.LITTLE platforms > that don't have uniform debug resources. There is work going forward in QEMU to specify this limitation when creating vcpus. At the moment the kernel sanity checks these are all the same on boot up but I guess we will have to decide where the smarts will end up. Do we: - report the real number per real-cpu (QEMU figures out vcpu config) or - report the lowest common denominator > >> extern struct pmu perf_ops_bp; >> >> #endif /* __KERNEL__ */ >> diff --git a/arch/arm64/include/asm/kvm_host.h b/arch/arm64/include/asm/kvm_host.h >> index e5040b6..498d4f7 100644 >> --- a/arch/arm64/include/asm/kvm_host.h >> +++ b/arch/arm64/include/asm/kvm_host.h >> @@ -113,12 +113,13 @@ struct kvm_vcpu_arch { >> >> /* >> * For debugging the guest we need to keep a set of debug >> - * registers which can override the guests own debug state >> + * registers which can override the guest's own debug state >> * while being used. These are set via the KVM_SET_GUEST_DEBUG >> * ioctl. >> */ >> struct kvm_guest_debug_arch *debug_ptr; >> struct kvm_guest_debug_arch vcpu_debug_state; >> + struct kvm_guest_debug_arch external_debug_state; >> >> /* Pointer to host CPU context */ >> kvm_cpu_context_t *host_cpu_context; >> diff --git a/arch/arm64/include/uapi/asm/kvm.h b/arch/arm64/include/uapi/asm/kvm.h >> index 43758e7..95168c2 100644 >> --- a/arch/arm64/include/uapi/asm/kvm.h >> +++ b/arch/arm64/include/uapi/asm/kvm.h >> @@ -116,7 +116,7 @@ struct kvm_guest_debug_arch { >> >> struct kvm_debug_exit_arch { >> __u32 hsr; >> - __u64 far; >> + __u64 far; /* used for watchpoints */ > > Why not just add the comment with the field in your earlier patch? I can fix that up if there is need to a re-spin. -- Alex Bennée