From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:42439) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1gLbec-0002Yi-DJ for qemu-devel@nongnu.org; Sat, 10 Nov 2018 17:23:01 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1gLbah-00067r-Fy for qemu-devel@nongnu.org; Sat, 10 Nov 2018 17:18:59 -0500 Received: from mail-eopbgr680081.outbound.protection.outlook.com ([40.107.68.81]:60960 helo=NAM04-BN3-obe.outbound.protection.outlook.com) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1gLbah-00062x-68 for qemu-devel@nongnu.org; Sat, 10 Nov 2018 17:18:55 -0500 From: Manish Jaggi Date: Sat, 10 Nov 2018 22:18:47 +0000 Message-ID: <4bbb4e76-b714-eafe-f95b-aca1a258e9fe@caviumnetworks.com> References: <1540290099-146109-1-git-send-email-mjaggi@caviumnetworks.com> In-Reply-To: <1540290099-146109-1-git-send-email-mjaggi@caviumnetworks.com> Content-Language: en-US Content-Type: text/plain; charset="utf-8" Content-ID: Content-Transfer-Encoding: base64 MIME-Version: 1.0 Subject: Re: [Qemu-devel] [RFC] [PATCH] kvm: arm: Introduce error code KVM_EINVARIANT List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: "Jaggi, Manish" , "quintela@redhat.com" , "dgilbert@redhat.com" , "eric.auger@redhat.com" , "qemu-devel@nongnu.org" , "peter.maydell@linaro.org" , "Nair, Jayachandran" , "Nowicki, Tomasz" , Christoffer Dall , Marc Zyngier , Catalin Marinas , Will Deacon , "linux-arm-kernel@lists.infradead.org" , "kvmarm@lists.cs.columbia.edu" DQpDQ2luZyBhIGxhcmdlciBhdWRpZW5jZS4NClBsZWFzZSByZXZpZXcuDQoNCk9uIDEwLzIzLzIw MTggMDM6NTEgUE0sIEphZ2dpLCBNYW5pc2ggd3JvdGU6DQo+IEZyb206IE1hbmlzaCBKYWdnaSA8 bWFuaXNoLmphZ2dpQGNhdml1bS5jb20+DQo+DQo+IFRoaXMgcGF0Y2ggaW50cm9kdWNlcyBhbiBl cnJvciBjb2RlIEtWTV9FSU5WQVJJQU5UIHdoaWNoIGlzIHJldHVybmVkDQo+IGJ5IEtWTSB3aGVu IHVzZXJsYW5kIHRyaWVzIHRvIHNldCBhbiBpbnZhcmlhbnQgcmVnaXN0ZXIuDQo+DQo+IFRoZSBu ZWVkIGZvciB0aGlzIGVycm9yIGNvZGUgaXMgaW4gVk0gTWlncmF0aW9uIGZvciBhcm02NC4NCj4g QVJNNjQgc3lzdGVtcyB1c2UgbWFpbmx5IC1tYWNoaW5lIHZpcnQgLWNwdSBob3N0IGFzIHBhcmFt ZXRlciB0byBxZW11Lg0KPiBNaWdyYXRpb24gcmVxdWlyZXMgYm90aCBTb3VyY2UgYW5kIGRlc3Rp bmF0aW9uIG1hY2hpbmVzIHRvIGhhdmUgc2FtZQ0KPiBwaHlzaWNhbCBjcHUuIFRoZXJlIGFyZSBj YXNlcyB3aGVyZSB0aGUgb3ZlcmFsbCBhcmNoaXRlY3R1cmUgb2YgQ1BVIGlzDQo+IHNhbWUgYnV0 IHRoZSBuZXh0IHZlcnNpb24gb2YgdGhlIGNoaXAgd2l0aCBzb21lIGJ1ZyBmaXhlcyB3aGljaCBo YXZlIG5vDQo+IGVmZmVjdCBvbiBxZW11IG9wZXJhdGlvbi4gSW4gc3VjaCBjYXNlcyBpbnZhcmlh bnQgcmVnaXN0ZXJzIGxpa2UgTUlEUg0KPiBoYXZlIGEgZGlmZmVyZW50IHZhbHVlLg0KPiBDdXJy ZW50bHkgTWlncmF0aW9uIGZhaWxzIGluIHN1Y2ggY2FzZXMuDQo+DQo+IFJhdGhlciB0aGFuIHNl bmRpbmcgYSBFSU5WQUwsIGEgc3BlY2lmYyBlcnJvciBjb2RlIHdpbGwgaGVscA0KPiB1c2VybGFu ZCBwcm9ncmFtIHRoZSBndWVzdCBpbnZhcmlhbnQgcmVnaXN0ZXIgYnkgcXVlcnlpbmcgdGhlIG1p Z3JhdGVkDQo+IGhvc3QgbWFjaGluZXMgaW52YXJpYW50IHJlZ2lzdGVycy4NCj4NCj4gUWVtdSB3 aWxsIGhhdmUgYSBwYXJhbWV0ZXIgLWhvc3RpbnZhcmlhbnQgYWxvbmcgd2l0aCBjaGVja2luZyBv ZiB0aGlzDQo+IGVycm9yIGNvZGUuIFNvIGl0IGNhbiBiZSBzYWZlbHkgYXNzdW1lZCB0aGF0IHRo ZSBmZWF0dXJlIGlzIG9wdC1pbg0KPg0KPiBDb3JyZXNwb25kaW5nIFFlbXUgcGF0Y2hzZXQgY2Fu IGJlIGZvdW5kIGF0IDoNCj4gaHR0cHM6Ly9saXN0cy5nbnUub3JnL2FyY2hpdmUvaHRtbC9xZW11 LWRldmVsLzIwMTgtMTAvbXNnMDUwNDguaHRtbA0KPg0KPg0KPiBTaWduZWQtb2ZmLWJ5OiBNYW5p c2ggSmFnZ2kgPG1hbmlzaC5qYWdnaUBjYXZpdW0uY29tPg0KPiAtLS0NCj4gICBhcmNoL2FybTY0 L2t2bS9zeXNfcmVncy5jICAgICB8IDkgKysrKy0tLS0tDQo+ICAgaW5jbHVkZS91YXBpL2xpbnV4 L2t2bV9wYXJhLmggfCAxICsNCj4gICAyIGZpbGVzIGNoYW5nZWQsIDUgaW5zZXJ0aW9ucygrKSwg NSBkZWxldGlvbnMoLSkNCj4NCj4gZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQva3ZtL3N5c19yZWdz LmMgYi9hcmNoL2FybTY0L2t2bS9zeXNfcmVncy5jDQo+IGluZGV4IDIyZmJiZGIuLjc4ZmZjMDIg MTAwNjQ0DQo+IC0tLSBhL2FyY2gvYXJtNjQva3ZtL3N5c19yZWdzLmMNCj4gKysrIGIvYXJjaC9h cm02NC9rdm0vc3lzX3JlZ3MuYw0KPiBAQCAtMTExMSw3ICsxMTExLDcgQEAgc3RhdGljIGludCBf X3NldF9pZF9yZWcoY29uc3Qgc3RydWN0IHN5c19yZWdfZGVzYyAqcmQsIHZvaWQgX191c2VyICp1 YWRkciwNCj4gICANCj4gICAJLyogVGhpcyBpcyB3aGF0IHdlIG1lYW4gYnkgaW52YXJpYW50OiB5 b3UgY2FuJ3QgY2hhbmdlIGl0LiAqLw0KPiAgIAlpZiAodmFsICE9IHJlYWRfaWRfcmVnKHJkLCBy YXopKQ0KPiAtCQlyZXR1cm4gLUVJTlZBTDsNCj4gKwkJcmV0dXJuIC1LVk1fRUlOVkFSSUFOVDsN Cj4gICANCj4gICAJcmV0dXJuIDA7DQo+ICAgfQ0KPiBAQCAtMjI1NCw5ICsyMjU0LDggQEAgc3Rh dGljIGludCBzZXRfaW52YXJpYW50X3N5c19yZWcodTY0IGlkLCB2b2lkIF9fdXNlciAqdWFkZHIp DQo+ICAgCQlyZXR1cm4gZXJyOw0KPiAgIA0KPiAgIAkvKiBUaGlzIGlzIHdoYXQgd2UgbWVhbiBi eSBpbnZhcmlhbnQ6IHlvdSBjYW4ndCBjaGFuZ2UgaXQuICovDQo+IC0JaWYgKHItPnZhbCAhPSB2 YWwpDQo+IC0JCXJldHVybiAtRUlOVkFMOw0KPiAtDQo+ICsJaWYgKHItPnZhbCAhPSB2YWwpCQ0K PiArCQlyZXR1cm4gLUtWTV9FSU5WQVJJQU5UOw0KPiAgIAlyZXR1cm4gMDsNCj4gICB9DQo+ICAg DQo+IEBAIC0yMzM1LDcgKzIzMzQsNyBAQCBzdGF0aWMgaW50IGRlbXV4X2MxNV9zZXQodTY0IGlk LCB2b2lkIF9fdXNlciAqdWFkZHIpDQo+ICAgDQo+ICAgCQkvKiBUaGlzIGlzIGFsc28gaW52YXJp YW50OiB5b3UgY2FuJ3QgY2hhbmdlIGl0LiAqLw0KPiAgIAkJaWYgKG5ld3ZhbCAhPSBnZXRfY2Nz aWRyKHZhbCkpDQo+IC0JCQlyZXR1cm4gLUVJTlZBTDsNCj4gKwkJCXJldHVybiAtS1ZNX0VJTlZB UklBTlQ7DQo+ICAgCQlyZXR1cm4gMDsNCj4gICAJZGVmYXVsdDoNCj4gICAJCXJldHVybiAtRU5P RU5UOw0KPiBkaWZmIC0tZ2l0IGEvaW5jbHVkZS91YXBpL2xpbnV4L2t2bV9wYXJhLmggYi9pbmNs dWRlL3VhcGkvbGludXgva3ZtX3BhcmEuaA0KPiBpbmRleCA2YzBjZTQ5Li40MzU4NjY5IDEwMDY0 NA0KPiAtLS0gYS9pbmNsdWRlL3VhcGkvbGludXgva3ZtX3BhcmEuaA0KPiArKysgYi9pbmNsdWRl L3VhcGkvbGludXgva3ZtX3BhcmEuaA0KPiBAQCAtMTcsNiArMTcsNyBAQA0KPiAgICNkZWZpbmUg S1ZNX0UyQklHCQlFMkJJRw0KPiAgICNkZWZpbmUgS1ZNX0VQRVJNCQlFUEVSTQ0KPiAgICNkZWZp bmUgS1ZNX0VPUE5PVFNVUFAJCTk1DQo+ICsjZGVmaW5lIEtWTV9FSU5WQVJJQU5UICAgICAgICAg IDk2DQo+ICAgDQo+ICAgI2RlZmluZSBLVk1fSENfVkFQSUNfUE9MTF9JUlEJCTENCj4gICAjZGVm aW5lIEtWTV9IQ19NTVVfT1AJCQkyDQoNCg== From mboxrd@z Thu Jan 1 00:00:00 1970 From: Manish Jaggi Subject: Re: [RFC] [PATCH] kvm: arm: Introduce error code KVM_EINVARIANT Date: Sat, 10 Nov 2018 22:18:47 +0000 Message-ID: <4bbb4e76-b714-eafe-f95b-aca1a258e9fe@caviumnetworks.com> References: <1540290099-146109-1-git-send-email-mjaggi@caviumnetworks.com> Mime-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Return-path: In-Reply-To: <1540290099-146109-1-git-send-email-mjaggi@caviumnetworks.com> Content-Language: en-US Content-ID: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=m.gmane.org@lists.infradead.org To: "Jaggi, Manish" , "quintela@redhat.com" , "dgilbert@redhat.com" , "eric.auger@redhat.com" , "qemu-devel@nongnu.org" , "peter.maydell@linaro.org" , "Nair, Jayachandran" , "Nowicki, Tomasz" , Christoffer Dall , Marc Zyngier , Catalin Marinas , Will Deacon , "linux-arm-kernel@lists.infradead.org" , "kvmarm@lists.cs.columbia.edu" List-Id: kvmarm@lists.cs.columbia.edu CCing a larger audience. Please review. On 10/23/2018 03:51 PM, Jaggi, Manish wrote: > From: Manish Jaggi > > This patch introduces an error code KVM_EINVARIANT which is returned > by KVM when userland tries to set an invariant register. > > The need for this error code is in VM Migration for arm64. > ARM64 systems use mainly -machine virt -cpu host as parameter to qemu. > Migration requires both Source and destination machines to have same > physical cpu. There are cases where the overall architecture of CPU is > same but the next version of the chip with some bug fixes which have no > effect on qemu operation. In such cases invariant registers like MIDR > have a different value. > Currently Migration fails in such cases. > > Rather than sending a EINVAL, a specifc error code will help > userland program the guest invariant register by querying the migrated > host machines invariant registers. > > Qemu will have a parameter -hostinvariant along with checking of this > error code. So it can be safely assumed that the feature is opt-in > > Corresponding Qemu patchset can be found at : > https://lists.gnu.org/archive/html/qemu-devel/2018-10/msg05048.html > > > Signed-off-by: Manish Jaggi > --- > arch/arm64/kvm/sys_regs.c | 9 ++++----- > include/uapi/linux/kvm_para.h | 1 + > 2 files changed, 5 insertions(+), 5 deletions(-) > > diff --git a/arch/arm64/kvm/sys_regs.c b/arch/arm64/kvm/sys_regs.c > index 22fbbdb..78ffc02 100644 > --- a/arch/arm64/kvm/sys_regs.c > +++ b/arch/arm64/kvm/sys_regs.c > @@ -1111,7 +1111,7 @@ static int __set_id_reg(const struct sys_reg_desc *rd, void __user *uaddr, > > /* This is what we mean by invariant: you can't change it. */ > if (val != read_id_reg(rd, raz)) > - return -EINVAL; > + return -KVM_EINVARIANT; > > return 0; > } > @@ -2254,9 +2254,8 @@ static int set_invariant_sys_reg(u64 id, void __user *uaddr) > return err; > > /* This is what we mean by invariant: you can't change it. */ > - if (r->val != val) > - return -EINVAL; > - > + if (r->val != val) > + return -KVM_EINVARIANT; > return 0; > } > > @@ -2335,7 +2334,7 @@ static int demux_c15_set(u64 id, void __user *uaddr) > > /* This is also invariant: you can't change it. */ > if (newval != get_ccsidr(val)) > - return -EINVAL; > + return -KVM_EINVARIANT; > return 0; > default: > return -ENOENT; > diff --git a/include/uapi/linux/kvm_para.h b/include/uapi/linux/kvm_para.h > index 6c0ce49..4358669 100644 > --- a/include/uapi/linux/kvm_para.h > +++ b/include/uapi/linux/kvm_para.h > @@ -17,6 +17,7 @@ > #define KVM_E2BIG E2BIG > #define KVM_EPERM EPERM > #define KVM_EOPNOTSUPP 95 > +#define KVM_EINVARIANT 96 > > #define KVM_HC_VAPIC_POLL_IRQ 1 > #define KVM_HC_MMU_OP 2 From mboxrd@z Thu Jan 1 00:00:00 1970 From: mjaggi@caviumnetworks.com (Manish Jaggi) Date: Sat, 10 Nov 2018 22:18:47 +0000 Subject: [RFC] [PATCH] kvm: arm: Introduce error code KVM_EINVARIANT In-Reply-To: <1540290099-146109-1-git-send-email-mjaggi@caviumnetworks.com> References: <1540290099-146109-1-git-send-email-mjaggi@caviumnetworks.com> Message-ID: <4bbb4e76-b714-eafe-f95b-aca1a258e9fe@caviumnetworks.com> To: linux-arm-kernel@lists.infradead.org List-Id: linux-arm-kernel.lists.infradead.org CCing a larger audience. Please review. On 10/23/2018 03:51 PM, Jaggi, Manish wrote: > From: Manish Jaggi > > This patch introduces an error code KVM_EINVARIANT which is returned > by KVM when userland tries to set an invariant register. > > The need for this error code is in VM Migration for arm64. > ARM64 systems use mainly -machine virt -cpu host as parameter to qemu. > Migration requires both Source and destination machines to have same > physical cpu. There are cases where the overall architecture of CPU is > same but the next version of the chip with some bug fixes which have no > effect on qemu operation. In such cases invariant registers like MIDR > have a different value. > Currently Migration fails in such cases. > > Rather than sending a EINVAL, a specifc error code will help > userland program the guest invariant register by querying the migrated > host machines invariant registers. > > Qemu will have a parameter -hostinvariant along with checking of this > error code. So it can be safely assumed that the feature is opt-in > > Corresponding Qemu patchset can be found at : > https://lists.gnu.org/archive/html/qemu-devel/2018-10/msg05048.html > > > Signed-off-by: Manish Jaggi > --- > arch/arm64/kvm/sys_regs.c | 9 ++++----- > include/uapi/linux/kvm_para.h | 1 + > 2 files changed, 5 insertions(+), 5 deletions(-) > > diff --git a/arch/arm64/kvm/sys_regs.c b/arch/arm64/kvm/sys_regs.c > index 22fbbdb..78ffc02 100644 > --- a/arch/arm64/kvm/sys_regs.c > +++ b/arch/arm64/kvm/sys_regs.c > @@ -1111,7 +1111,7 @@ static int __set_id_reg(const struct sys_reg_desc *rd, void __user *uaddr, > > /* This is what we mean by invariant: you can't change it. */ > if (val != read_id_reg(rd, raz)) > - return -EINVAL; > + return -KVM_EINVARIANT; > > return 0; > } > @@ -2254,9 +2254,8 @@ static int set_invariant_sys_reg(u64 id, void __user *uaddr) > return err; > > /* This is what we mean by invariant: you can't change it. */ > - if (r->val != val) > - return -EINVAL; > - > + if (r->val != val) > + return -KVM_EINVARIANT; > return 0; > } > > @@ -2335,7 +2334,7 @@ static int demux_c15_set(u64 id, void __user *uaddr) > > /* This is also invariant: you can't change it. */ > if (newval != get_ccsidr(val)) > - return -EINVAL; > + return -KVM_EINVARIANT; > return 0; > default: > return -ENOENT; > diff --git a/include/uapi/linux/kvm_para.h b/include/uapi/linux/kvm_para.h > index 6c0ce49..4358669 100644 > --- a/include/uapi/linux/kvm_para.h > +++ b/include/uapi/linux/kvm_para.h > @@ -17,6 +17,7 @@ > #define KVM_E2BIG E2BIG > #define KVM_EPERM EPERM > #define KVM_EOPNOTSUPP 95 > +#define KVM_EINVARIANT 96 > > #define KVM_HC_VAPIC_POLL_IRQ 1 > #define KVM_HC_MMU_OP 2