From mboxrd@z Thu Jan 1 00:00:00 1970 From: Marc Zyngier Subject: [PATCH 07/85] KVM: arm/arm64: No need to zero CNTVOFF in kvm_timer_vcpu_put() for VHE Date: Wed, 28 Mar 2018 13:51:36 +0100 Message-ID: <20180328125254.31380-8-marc.zyngier@arm.com> References: <20180328125254.31380-1-marc.zyngier@arm.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Cc: Christoffer Dall , Shunyong Yang , Julien Thierry , Andre Przywara , Will Deacon , Shih-Wei Li , Catalin Marinas , Dave Martin To: Paolo Bonzini , =?UTF-8?q?Radim=20Kr=C4=8Dm=C3=A1=C5=99?= , kvmarm@lists.cs.columbia.edu, linux-arm-kernel@lists.infradead.org, kvm@vger.kernel.org Return-path: In-Reply-To: <20180328125254.31380-1-marc.zyngier@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 List-Id: kvm.vger.kernel.org RnJvbTogU2hhbmtlciBEb250aGluZW5pIDxzaGFua2VyZEBjb2RlYXVyb3JhLm9yZz4KCkluIEFB cmNoNjQvQUFyY2gzMiwgdGhlIHZpcnR1YWwgY291bnRlciB1c2VzIGEgZml4ZWQgdmlydHVhbCBv ZmZzZXQKb2YgemVybyBpbiB0aGUgZm9sbG93aW5nIHNpdHVhdGlvbnMgYXMgcGVyIEFSTXY4IHNw ZWNpZmljYXRpb25zOgoKMSkgSENSX0VMMi5FMkggaXMgMSwgYW5kIENOVFZDVF9FTDAvQ05UVkNU IGFyZSByZWFkIGZyb20gRUwyLgoyKSBIQ1JfRUwyLntFMkgsIFRHRX0gaXMgezEsIDF9LCBhbmQg ZWl0aGVyOgogICDigJQgQ05UVkNUX0VMMCBpcyByZWFkIGZyb20gTm9uLXNlY3VyZSBFTDAgb3Ig RUwyLgogICDigJQgQ05UVkNUIGlzIHJlYWQgZnJvbSBOb24tc2VjdXJlIEVMMC4KClNvLCBubyBu ZWVkIHRvIHplcm8gQ05UVk9GRl9FTDIvQ05UVk9GRiBmb3IgVkhFIGNhc2UuCgpBY2tlZC1ieTog TWFyYyBaeW5naWVyIDxtYXJjLnp5bmdpZXJAYXJtLmNvbT4KQWNrZWQtYnk6IENocmlzdG9mZmVy IERhbGwgPGNocmlzdG9mZmVyLmRhbGxAbGluYXJvLm9yZz4KU2lnbmVkLW9mZi1ieTogU2hhbmtl ciBEb250aGluZW5pIDxzaGFua2VyZEBjb2RlYXVyb3JhLm9yZz4KU2lnbmVkLW9mZi1ieTogQ2hy aXN0b2ZmZXIgRGFsbCA8Y2hyaXN0b2ZmZXIuZGFsbEBsaW5hcm8ub3JnPgotLS0KIHZpcnQva3Zt L2FybS9hcmNoX3RpbWVyLmMgfCA2ICsrKystLQogMSBmaWxlIGNoYW5nZWQsIDQgaW5zZXJ0aW9u cygrKSwgMiBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS92aXJ0L2t2bS9hcm0vYXJjaF90aW1l ci5jIGIvdmlydC9rdm0vYXJtL2FyY2hfdGltZXIuYwppbmRleCA3MDI2OGMwYmVjNzkuLjg2ZWNh MzI0NzRjYyAxMDA2NDQKLS0tIGEvdmlydC9rdm0vYXJtL2FyY2hfdGltZXIuYworKysgYi92aXJ0 L2t2bS9hcm0vYXJjaF90aW1lci5jCkBAIC01NDEsOSArNTQxLDExIEBAIHZvaWQga3ZtX3RpbWVy X3ZjcHVfcHV0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIAkgKiBUaGUga2VybmVsIG1heSBkZWNp ZGUgdG8gcnVuIHVzZXJzcGFjZSBhZnRlciBjYWxsaW5nIHZjcHVfcHV0LCBzbwogCSAqIHdlIHJl c2V0IGNudHZvZmYgdG8gMCB0byBlbnN1cmUgYSBjb25zaXN0ZW50IHJlYWQgYmV0d2VlbiB1c2Vy CiAJICogYWNjZXNzZXMgdG8gdGhlIHZpcnR1YWwgY291bnRlciBhbmQga2VybmVsIGFjY2VzcyB0 byB0aGUgcGh5c2ljYWwKLQkgKiBjb3VudGVyLgorCSAqIGNvdW50ZXIgb2Ygbm9uLVZIRSBjYXNl LiBGb3IgVkhFLCB0aGUgdmlydHVhbCBjb3VudGVyIHVzZXMgYSBmaXhlZAorCSAqIHZpcnR1YWwg b2Zmc2V0IG9mIHplcm8sIHNvIG5vIG5lZWQgdG8gemVybyBDTlRWT0ZGX0VMMiByZWdpc3Rlci4K IAkgKi8KLQlzZXRfY250dm9mZigwKTsKKwlpZiAoIWhhc192aGUoKSkKKwkJc2V0X2NudHZvZmYo MCk7CiB9CiAKIC8qCi0tIAoyLjE0LjIKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fCmt2bWFybSBtYWlsaW5nIGxpc3QKa3ZtYXJtQGxpc3RzLmNzLmNvbHVt YmlhLmVkdQpodHRwczovL2xpc3RzLmNzLmNvbHVtYmlhLmVkdS9tYWlsbWFuL2xpc3RpbmZvL2t2 bWFybQo= From mboxrd@z Thu Jan 1 00:00:00 1970 From: marc.zyngier@arm.com (Marc Zyngier) Date: Wed, 28 Mar 2018 13:51:36 +0100 Subject: [PATCH 07/85] KVM: arm/arm64: No need to zero CNTVOFF in kvm_timer_vcpu_put() for VHE In-Reply-To: <20180328125254.31380-1-marc.zyngier@arm.com> References: <20180328125254.31380-1-marc.zyngier@arm.com> Message-ID: <20180328125254.31380-8-marc.zyngier@arm.com> To: linux-arm-kernel@lists.infradead.org List-Id: linux-arm-kernel.lists.infradead.org From: Shanker Donthineni In AArch64/AArch32, the virtual counter uses a fixed virtual offset of zero in the following situations as per ARMv8 specifications: 1) HCR_EL2.E2H is 1, and CNTVCT_EL0/CNTVCT are read from EL2. 2) HCR_EL2.{E2H, TGE} is {1, 1}, and either: ? CNTVCT_EL0 is read from Non-secure EL0 or EL2. ? CNTVCT is read from Non-secure EL0. So, no need to zero CNTVOFF_EL2/CNTVOFF for VHE case. Acked-by: Marc Zyngier Acked-by: Christoffer Dall Signed-off-by: Shanker Donthineni Signed-off-by: Christoffer Dall --- virt/kvm/arm/arch_timer.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/virt/kvm/arm/arch_timer.c b/virt/kvm/arm/arch_timer.c index 70268c0bec79..86eca32474cc 100644 --- a/virt/kvm/arm/arch_timer.c +++ b/virt/kvm/arm/arch_timer.c @@ -541,9 +541,11 @@ void kvm_timer_vcpu_put(struct kvm_vcpu *vcpu) * The kernel may decide to run userspace after calling vcpu_put, so * we reset cntvoff to 0 to ensure a consistent read between user * accesses to the virtual counter and kernel access to the physical - * counter. + * counter of non-VHE case. For VHE, the virtual counter uses a fixed + * virtual offset of zero, so no need to zero CNTVOFF_EL2 register. */ - set_cntvoff(0); + if (!has_vhe()) + set_cntvoff(0); } /* -- 2.14.2