From mboxrd@z Thu Jan 1 00:00:00 1970 From: Alex =?utf-8?Q?Benn=C3=A9e?= Subject: Re: [RFC PATCH v2 09/23] KVM: arm64: Propagate vcpu into read_id_reg() Date: Thu, 15 Nov 2018 15:56:21 +0000 Message-ID: <87ftw2cp22.fsf@linaro.org> References: <1538141967-15375-1-git-send-email-Dave.Martin@arm.com> <1538141967-15375-10-git-send-email-Dave.Martin@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 B89DB4A357 for ; Thu, 15 Nov 2018 10:56:25 -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 NjkXL9Ph+d7F for ; Thu, 15 Nov 2018 10:56:24 -0500 (EST) Received: from mail-wm1-f68.google.com (mail-wm1-f68.google.com [209.85.128.68]) by mm01.cs.columbia.edu (Postfix) with ESMTPS id A485C4A352 for ; Thu, 15 Nov 2018 10:56:24 -0500 (EST) Received: by mail-wm1-f68.google.com with SMTP id q26so8413565wmf.5 for ; Thu, 15 Nov 2018 07:56:24 -0800 (PST) In-reply-to: <1538141967-15375-10-git-send-email-Dave.Martin@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: Dave Martin Cc: Okamoto Takayuki , Christoffer Dall , Ard Biesheuvel , Marc Zyngier , Catalin Marinas , Will Deacon , kvmarm@lists.cs.columbia.edu, linux-arm-kernel@lists.infradead.org List-Id: kvmarm@lists.cs.columbia.edu CkRhdmUgTWFydGluIDxEYXZlLk1hcnRpbkBhcm0uY29tPiB3cml0ZXM6Cgo+IEFyY2hpdGVjdHVy ZSBmZWF0dXJlcyB0aGF0IGFyZSBjb25kaXRpb25hbGx5IHZpc2libGUgdG8gdGhlIGd1ZXN0Cj4g d2lsbCByZXF1aXJlIHJ1bi10aW1lIGNoZWNrcyBpbiB0aGUgSUQgcmVnaXN0ZXIgYWNjZXNzb3Ig ZnVuY3Rpb25zLgo+IEluIHBhcnRpY3VsYXIsIHJlYWRfaWRfcmVnKCkgd2lsbCBuZWVkIHRvIHBl cmZvcm0gY2hlY2tzIGluIG9yZGVyCj4gdG8gZ2VuZXJhdGUgdGhlIGNvcnJlY3QgZW11bGF0ZWQg dmFsdWUgZm9yIGNlcnRhaW4gSUQgcmVnaXN0ZXIKPiBmaWVsZHMgc3VjaCBhcyBJRF9BQTY0UEZS MF9FTDEuU1ZFIGZvciBleGFtcGxlLgo+Cj4gVGhpcyBwYXRjaCBwcm9wYWdhdGVzIHZjcHUgaW50 byByZWFkX2lkX3JlZygpIHNvIHRoYXQgZnV0dXJlCj4gcGF0Y2hlcyBjYW4gYWRkIHJ1bi10aW1l IGNoZWNrcyBvbiB0aGUgZ3Vlc3QgY29uZmlndXJhdGlvbiBoZXJlLgo+Cj4gRm9yIG5vdywgdGhl cmUgaXMgbm8gZnVuY3Rpb25hbCBjaGFuZ2UuCj4KPiBTaWduZWQtb2ZmLWJ5OiBEYXZlIE1hcnRp biA8RGF2ZS5NYXJ0aW5AYXJtLmNvbT4KClJldmlld2VkLWJ5OiBBbGV4IEJlbm7DqWUgPGFsZXgu YmVubmVlQGxpbmFyby5vcmc+Cgo+IC0tLQo+ICBhcmNoL2FybTY0L2t2bS9zeXNfcmVncy5jIHwg MjMgKysrKysrKysrKysrKy0tLS0tLS0tLS0KPiAgMSBmaWxlIGNoYW5nZWQsIDEzIGluc2VydGlv bnMoKyksIDEwIGRlbGV0aW9ucygtKQo+Cj4gZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQva3ZtL3N5 c19yZWdzLmMgYi9hcmNoL2FybTY0L2t2bS9zeXNfcmVncy5jCj4gaW5kZXggMjJmYmJkYi4uMGRm ZDA2NCAxMDA2NDQKPiAtLS0gYS9hcmNoL2FybTY0L2t2bS9zeXNfcmVncy5jCj4gKysrIGIvYXJj aC9hcm02NC9rdm0vc3lzX3JlZ3MuYwo+IEBAIC0xMDI5LDcgKzEwMjksOCBAQCBzdGF0aWMgYm9v bCBhY2Nlc3NfY250cF9jdmFsKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwKPiAgfQo+Cj4gIC8qIFJl YWQgYSBzYW5pdGlzZWQgY3B1ZmVhdHVyZSBJRCByZWdpc3RlciBieSBzeXNfcmVnX2Rlc2MgKi8K PiAtc3RhdGljIHU2NCByZWFkX2lkX3JlZyhzdHJ1Y3Qgc3lzX3JlZ19kZXNjIGNvbnN0ICpyLCBi b29sIHJheikKPiArc3RhdGljIHU2NCByZWFkX2lkX3JlZyhjb25zdCBzdHJ1Y3Qga3ZtX3ZjcHUg KnZjcHUsCj4gKwkJc3RydWN0IHN5c19yZWdfZGVzYyBjb25zdCAqciwgYm9vbCByYXopCj4gIHsK PiAgCXUzMiBpZCA9IHN5c19yZWcoKHUzMilyLT5PcDAsICh1MzIpci0+T3AxLAo+ICAJCQkgKHUz MilyLT5DUm4sICh1MzIpci0+Q1JtLCAodTMyKXItPk9wMik7Cj4gQEAgLTEwNjAsNyArMTA2MSw3 IEBAIHN0YXRpYyBib29sIF9fYWNjZXNzX2lkX3JlZyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsCj4g IAlpZiAocC0+aXNfd3JpdGUpCj4gIAkJcmV0dXJuIHdyaXRlX3RvX3JlYWRfb25seSh2Y3B1LCBw LCByKTsKPgo+IC0JcC0+cmVndmFsID0gcmVhZF9pZF9yZWcociwgcmF6KTsKPiArCXAtPnJlZ3Zh bCA9IHJlYWRfaWRfcmVnKHZjcHUsIHIsIHJheik7Cj4gIAlyZXR1cm4gdHJ1ZTsKPiAgfQo+Cj4g QEAgLTEwODksMTYgKzEwOTAsMTggQEAgc3RhdGljIHU2NCBzeXNfcmVnX3RvX2luZGV4KGNvbnN0 IHN0cnVjdCBzeXNfcmVnX2Rlc2MgKnJlZyk7Cj4gICAqIGFyZSBzdG9yZWQsIGFuZCBmb3Igc2V0 X2lkX3JlZygpIHdlIGRvbid0IGFsbG93IHRoZSBlZmZlY3RpdmUgdmFsdWUKPiAgICogdG8gYmUg Y2hhbmdlZC4KPiAgICovCj4gLXN0YXRpYyBpbnQgX19nZXRfaWRfcmVnKGNvbnN0IHN0cnVjdCBz eXNfcmVnX2Rlc2MgKnJkLCB2b2lkIF9fdXNlciAqdWFkZHIsCj4gK3N0YXRpYyBpbnQgX19nZXRf aWRfcmVnKGNvbnN0IHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwKPiArCQkJY29uc3Qgc3RydWN0IHN5 c19yZWdfZGVzYyAqcmQsIHZvaWQgX191c2VyICp1YWRkciwKPiAgCQkJYm9vbCByYXopCj4gIHsK PiAgCWNvbnN0IHU2NCBpZCA9IHN5c19yZWdfdG9faW5kZXgocmQpOwo+IC0JY29uc3QgdTY0IHZh bCA9IHJlYWRfaWRfcmVnKHJkLCByYXopOwo+ICsJY29uc3QgdTY0IHZhbCA9IHJlYWRfaWRfcmVn KHZjcHUsIHJkLCByYXopOwo+Cj4gIAlyZXR1cm4gcmVnX3RvX3VzZXIodWFkZHIsICZ2YWwsIGlk KTsKPiAgfQo+Cj4gLXN0YXRpYyBpbnQgX19zZXRfaWRfcmVnKGNvbnN0IHN0cnVjdCBzeXNfcmVn X2Rlc2MgKnJkLCB2b2lkIF9fdXNlciAqdWFkZHIsCj4gK3N0YXRpYyBpbnQgX19zZXRfaWRfcmVn KGNvbnN0IHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwKPiArCQkJY29uc3Qgc3RydWN0IHN5c19yZWdf ZGVzYyAqcmQsIHZvaWQgX191c2VyICp1YWRkciwKPiAgCQkJYm9vbCByYXopCj4gIHsKPiAgCWNv bnN0IHU2NCBpZCA9IHN5c19yZWdfdG9faW5kZXgocmQpOwo+IEBAIC0xMTEwLDcgKzExMTMsNyBA QCBzdGF0aWMgaW50IF9fc2V0X2lkX3JlZyhjb25zdCBzdHJ1Y3Qgc3lzX3JlZ19kZXNjICpyZCwg dm9pZCBfX3VzZXIgKnVhZGRyLAo+ICAJCXJldHVybiBlcnI7Cj4KPiAgCS8qIFRoaXMgaXMgd2hh dCB3ZSBtZWFuIGJ5IGludmFyaWFudDogeW91IGNhbid0IGNoYW5nZSBpdC4gKi8KPiAtCWlmICh2 YWwgIT0gcmVhZF9pZF9yZWcocmQsIHJheikpCj4gKwlpZiAodmFsICE9IHJlYWRfaWRfcmVnKHZj cHUsIHJkLCByYXopKQo+ICAJCXJldHVybiAtRUlOVkFMOwo+Cj4gIAlyZXR1cm4gMDsKPiBAQCAt MTExOSwyNSArMTEyMiwyNSBAQCBzdGF0aWMgaW50IF9fc2V0X2lkX3JlZyhjb25zdCBzdHJ1Y3Qg c3lzX3JlZ19kZXNjICpyZCwgdm9pZCBfX3VzZXIgKnVhZGRyLAo+ICBzdGF0aWMgaW50IGdldF9p ZF9yZWcoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBjb25zdCBzdHJ1Y3Qgc3lzX3JlZ19kZXNjICpy ZCwKPiAgCQkgICAgICBjb25zdCBzdHJ1Y3Qga3ZtX29uZV9yZWcgKnJlZywgdm9pZCBfX3VzZXIg KnVhZGRyKQo+ICB7Cj4gLQlyZXR1cm4gX19nZXRfaWRfcmVnKHJkLCB1YWRkciwgZmFsc2UpOwo+ ICsJcmV0dXJuIF9fZ2V0X2lkX3JlZyh2Y3B1LCByZCwgdWFkZHIsIGZhbHNlKTsKPiAgfQo+Cj4g IHN0YXRpYyBpbnQgc2V0X2lkX3JlZyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGNvbnN0IHN0cnVj dCBzeXNfcmVnX2Rlc2MgKnJkLAo+ICAJCSAgICAgIGNvbnN0IHN0cnVjdCBrdm1fb25lX3JlZyAq cmVnLCB2b2lkIF9fdXNlciAqdWFkZHIpCj4gIHsKPiAtCXJldHVybiBfX3NldF9pZF9yZWcocmQs IHVhZGRyLCBmYWxzZSk7Cj4gKwlyZXR1cm4gX19zZXRfaWRfcmVnKHZjcHUsIHJkLCB1YWRkciwg ZmFsc2UpOwo+ICB9Cj4KPiAgc3RhdGljIGludCBnZXRfcmF6X2lkX3JlZyhzdHJ1Y3Qga3ZtX3Zj cHUgKnZjcHUsIGNvbnN0IHN0cnVjdCBzeXNfcmVnX2Rlc2MgKnJkLAo+ICAJCQkgIGNvbnN0IHN0 cnVjdCBrdm1fb25lX3JlZyAqcmVnLCB2b2lkIF9fdXNlciAqdWFkZHIpCj4gIHsKPiAtCXJldHVy biBfX2dldF9pZF9yZWcocmQsIHVhZGRyLCB0cnVlKTsKPiArCXJldHVybiBfX2dldF9pZF9yZWco dmNwdSwgcmQsIHVhZGRyLCB0cnVlKTsKPiAgfQo+Cj4gIHN0YXRpYyBpbnQgc2V0X3Jhel9pZF9y ZWcoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBjb25zdCBzdHJ1Y3Qgc3lzX3JlZ19kZXNjICpyZCwK PiAgCQkJICBjb25zdCBzdHJ1Y3Qga3ZtX29uZV9yZWcgKnJlZywgdm9pZCBfX3VzZXIgKnVhZGRy KQo+ICB7Cj4gLQlyZXR1cm4gX19zZXRfaWRfcmVnKHJkLCB1YWRkciwgdHJ1ZSk7Cj4gKwlyZXR1 cm4gX19zZXRfaWRfcmVnKHZjcHUsIHJkLCB1YWRkciwgdHJ1ZSk7Cj4gIH0KPgo+ICAvKiBzeXNf cmVnX2Rlc2MgaW5pdGlhbGlzZXIgZm9yIGtub3duIGNwdWZlYXR1cmUgSUQgcmVnaXN0ZXJzICov CgoKLS0KQWxleCBCZW5uw6llCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fCmt2bWFybSBtYWlsaW5nIGxpc3QKa3ZtYXJtQGxpc3RzLmNzLmNvbHVtYmlhLmVk dQpodHRwczovL2xpc3RzLmNzLmNvbHVtYmlhLmVkdS9tYWlsbWFuL2xpc3RpbmZvL2t2bWFybQo= From mboxrd@z Thu Jan 1 00:00:00 1970 From: alex.bennee@linaro.org (Alex =?utf-8?Q?Benn=C3=A9e?=) Date: Thu, 15 Nov 2018 15:56:21 +0000 Subject: [RFC PATCH v2 09/23] KVM: arm64: Propagate vcpu into read_id_reg() In-Reply-To: <1538141967-15375-10-git-send-email-Dave.Martin@arm.com> References: <1538141967-15375-1-git-send-email-Dave.Martin@arm.com> <1538141967-15375-10-git-send-email-Dave.Martin@arm.com> Message-ID: <87ftw2cp22.fsf@linaro.org> To: linux-arm-kernel@lists.infradead.org List-Id: linux-arm-kernel.lists.infradead.org Dave Martin writes: > Architecture features that are conditionally visible to the guest > will require run-time checks in the ID register accessor functions. > In particular, read_id_reg() will need to perform checks in order > to generate the correct emulated value for certain ID register > fields such as ID_AA64PFR0_EL1.SVE for example. > > This patch propagates vcpu into read_id_reg() so that future > patches can add run-time checks on the guest configuration here. > > For now, there is no functional change. > > Signed-off-by: Dave Martin Reviewed-by: Alex Benn?e > --- > arch/arm64/kvm/sys_regs.c | 23 +++++++++++++---------- > 1 file changed, 13 insertions(+), 10 deletions(-) > > diff --git a/arch/arm64/kvm/sys_regs.c b/arch/arm64/kvm/sys_regs.c > index 22fbbdb..0dfd064 100644 > --- a/arch/arm64/kvm/sys_regs.c > +++ b/arch/arm64/kvm/sys_regs.c > @@ -1029,7 +1029,8 @@ static bool access_cntp_cval(struct kvm_vcpu *vcpu, > } > > /* Read a sanitised cpufeature ID register by sys_reg_desc */ > -static u64 read_id_reg(struct sys_reg_desc const *r, bool raz) > +static u64 read_id_reg(const struct kvm_vcpu *vcpu, > + struct sys_reg_desc const *r, bool raz) > { > u32 id = sys_reg((u32)r->Op0, (u32)r->Op1, > (u32)r->CRn, (u32)r->CRm, (u32)r->Op2); > @@ -1060,7 +1061,7 @@ static bool __access_id_reg(struct kvm_vcpu *vcpu, > if (p->is_write) > return write_to_read_only(vcpu, p, r); > > - p->regval = read_id_reg(r, raz); > + p->regval = read_id_reg(vcpu, r, raz); > return true; > } > > @@ -1089,16 +1090,18 @@ static u64 sys_reg_to_index(const struct sys_reg_desc *reg); > * are stored, and for set_id_reg() we don't allow the effective value > * to be changed. > */ > -static int __get_id_reg(const struct sys_reg_desc *rd, void __user *uaddr, > +static int __get_id_reg(const struct kvm_vcpu *vcpu, > + const struct sys_reg_desc *rd, void __user *uaddr, > bool raz) > { > const u64 id = sys_reg_to_index(rd); > - const u64 val = read_id_reg(rd, raz); > + const u64 val = read_id_reg(vcpu, rd, raz); > > return reg_to_user(uaddr, &val, id); > } > > -static int __set_id_reg(const struct sys_reg_desc *rd, void __user *uaddr, > +static int __set_id_reg(const struct kvm_vcpu *vcpu, > + const struct sys_reg_desc *rd, void __user *uaddr, > bool raz) > { > const u64 id = sys_reg_to_index(rd); > @@ -1110,7 +1113,7 @@ static int __set_id_reg(const struct sys_reg_desc *rd, void __user *uaddr, > return err; > > /* This is what we mean by invariant: you can't change it. */ > - if (val != read_id_reg(rd, raz)) > + if (val != read_id_reg(vcpu, rd, raz)) > return -EINVAL; > > return 0; > @@ -1119,25 +1122,25 @@ static int __set_id_reg(const struct sys_reg_desc *rd, void __user *uaddr, > static int get_id_reg(struct kvm_vcpu *vcpu, const struct sys_reg_desc *rd, > const struct kvm_one_reg *reg, void __user *uaddr) > { > - return __get_id_reg(rd, uaddr, false); > + return __get_id_reg(vcpu, rd, uaddr, false); > } > > static int set_id_reg(struct kvm_vcpu *vcpu, const struct sys_reg_desc *rd, > const struct kvm_one_reg *reg, void __user *uaddr) > { > - return __set_id_reg(rd, uaddr, false); > + return __set_id_reg(vcpu, rd, uaddr, false); > } > > static int get_raz_id_reg(struct kvm_vcpu *vcpu, const struct sys_reg_desc *rd, > const struct kvm_one_reg *reg, void __user *uaddr) > { > - return __get_id_reg(rd, uaddr, true); > + return __get_id_reg(vcpu, rd, uaddr, true); > } > > static int set_raz_id_reg(struct kvm_vcpu *vcpu, const struct sys_reg_desc *rd, > const struct kvm_one_reg *reg, void __user *uaddr) > { > - return __set_id_reg(rd, uaddr, true); > + return __set_id_reg(vcpu, rd, uaddr, true); > } > > /* sys_reg_desc initialiser for known cpufeature ID registers */ -- Alex Benn?e