From mboxrd@z Thu Jan 1 00:00:00 1970 From: Alex =?utf-8?Q?Benn=C3=A9e?= Subject: Re: [PATCH v10 17/18] KVM: arm64: Fold redundant exit code checks out of fixup_guest_exit() Date: Thu, 24 May 2018 16:06:47 +0100 Message-ID: <87wovtrt2w.fsf@linaro.org> References: <1527005119-6842-1-git-send-email-Dave.Martin@arm.com> <1527005119-6842-18-git-send-email-Dave.Martin@arm.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-reply-to: <1527005119-6842-18-git-send-email-Dave.Martin@arm.com> 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: Dave Martin Cc: 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+IFRoZSBlbnRpcmUg dGFpbCBvZiBmaXh1cF9ndWVzdF9leGl0KCkgaXMgY29udGFpbmVkIGluIGlmIHN0YXRlbWVudHMK PiBvZiB0aGUgZm9ybSBpZiAoeCAmJiAqZXhpdF9jb2RlID09IEFSTV9FWENFUFRJT05fVFJBUCku ICBBcyBhIHJlc3VsdCwKPiB3ZSBjYW4gY2hlY2sganVzdCBvbmNlIGFuZCBiYWlsIG91dCBvZiB0 aGUgZnVuY3Rpb24gZWFybHksIGFsbG93aW5nCj4gdGhlIHJlbWFpbmluZyBpZiBjb25kaXRpb25z IHRvIGJlIHNpbXBsaWZpZWQuCj4KPiBUaGUgb25seSBhd2t3YXJkIGNhc2UgaXMgd2hlcmUgKmV4 aXRfY29kZSBpcyBjaGFuZ2VkIHRvCj4gQVJNX0VYQ0VQVElPTl9FTDFfU0VSUk9SIGluIHRoZSBj YXNlIG9mIGFuIGlsbGVnYWwgR0lDdjIgQ1BVCj4gaW50ZXJmYWNlIGFjY2VzczogaW4gdGhhdCBj YXNlLCB0aGUgR0lDdjMgdHJhcCBoYW5kbGluZyBjb2RlIGlzCj4gc2tpcHBlZCB1c2luZyBhIGdv dG8uICBUaGlzIGF2b2lkcyBwb2ludGxlc3NseSBldmFsdWF0aW5nIHRoZQo+IHN0YXRpYyBicmFu Y2ggY2hlY2sgZm9yIHRoZSBHSUN2MyBjYXNlLCBldmVuIHRob3VnaCB3ZSBjYW4ndCBoYXZlCj4g dmdpY192Ml9jcHVpZl90cmFwIGFuZCB2Z2ljX3YzX2NwdWlmX3RyYXAgdHJ1ZSBzaW11bHRhbmVv dXNseQo+IHVubGVzcyB3ZSBoYXZlIGEgR0lDdjMgYW5kIEdJQ3YyIG9uIHRoZSBob3N0OiB0aGF0 IHNvdW5kcyBzdHVwaWQsCj4gYnV0IEkgaGF2ZW4ndCBzYXRpc2ZpZWQgbXlzZWxmIHRoYXQgaXQg Y2FuJ3QgaGFwcGVuLgo+Cj4gTm8gZnVuY3Rpb25hbCBjaGFuZ2UuCj4KPiBTaWduZWQtb2ZmLWJ5 OiBEYXZlIE1hcnRpbiA8RGF2ZS5NYXJ0aW5AYXJtLmNvbT4KPiBSZXZpZXdlZC1ieTogTWFyYyBa eW5naWVyIDxtYXJjLnp5bmdpZXJAYXJtLmNvbT4KClJldmlld2VkLWJ5OiBBbGV4IEJlbm7DqWUg PGFsZXguYmVubmVlQGxpbmFyby5vcmc+Cgo+IC0tLQo+ICBhcmNoL2FybTY0L2t2bS9oeXAvc3dp dGNoLmMgfCAxMiArKysrKysrKy0tLS0KPiAgMSBmaWxlIGNoYW5nZWQsIDggaW5zZXJ0aW9ucygr KSwgNCBkZWxldGlvbnMoLSkKPgo+IGRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2t2bS9oeXAvc3dp dGNoLmMgYi9hcmNoL2FybTY0L2t2bS9oeXAvc3dpdGNoLmMKPiBpbmRleCAxOGQwZmFhLi40ZmJl ZTk1IDEwMDY0NAo+IC0tLSBhL2FyY2gvYXJtNjQva3ZtL2h5cC9zd2l0Y2guYwo+ICsrKyBiL2Fy Y2gvYXJtNjQva3ZtL2h5cC9zd2l0Y2guYwo+IEBAIC0zODcsMTEgKzM4NywxMyBAQCBzdGF0aWMg Ym9vbCBfX2h5cF90ZXh0IGZpeHVwX2d1ZXN0X2V4aXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1 NjQgKmV4aXRfY29kZSkKPiAgCSAqIHNhbWUgUEMgb25jZSB0aGUgU0Vycm9yIGhhcyBiZWVuIGlu amVjdGVkLCBhbmQgcmVwbGF5IHRoZQo+ICAJICogdHJhcHBpbmcgaW5zdHJ1Y3Rpb24uCj4gIAkg Ki8KPiAtCWlmICgqZXhpdF9jb2RlID09IEFSTV9FWENFUFRJT05fVFJBUCAmJiAhX19wb3B1bGF0 ZV9mYXVsdF9pbmZvKHZjcHUpKQo+ICsJaWYgKCpleGl0X2NvZGUgIT0gQVJNX0VYQ0VQVElPTl9U UkFQKQo+ICsJCWdvdG8gZXhpdDsKPiArCj4gKwlpZiAoIV9fcG9wdWxhdGVfZmF1bHRfaW5mbyh2 Y3B1KSkKPiAgCQlyZXR1cm4gdHJ1ZTsKPgo+IC0JaWYgKHN0YXRpY19icmFuY2hfdW5saWtlbHko JnZnaWNfdjJfY3B1aWZfdHJhcCkgJiYKPiAtCSAgICAqZXhpdF9jb2RlID09IEFSTV9FWENFUFRJ T05fVFJBUCkgewo+ICsJaWYgKHN0YXRpY19icmFuY2hfdW5saWtlbHkoJnZnaWNfdjJfY3B1aWZf dHJhcCkpIHsKPiAgCQlib29sIHZhbGlkOwo+Cj4gIAkJdmFsaWQgPSBrdm1fdmNwdV90cmFwX2dl dF9jbGFzcyh2Y3B1KSA9PSBFU1JfRUx4X0VDX0RBQlRfTE9XICYmCj4gQEAgLTQxNywxMSArNDE5 LDEyIEBAIHN0YXRpYyBib29sIF9faHlwX3RleHQgZml4dXBfZ3Vlc3RfZXhpdChzdHJ1Y3Qga3Zt X3ZjcHUgKnZjcHUsIHU2NCAqZXhpdF9jb2RlKQo+ICAJCQkJCSp2Y3B1X2Nwc3IodmNwdSkgJj0g fkRCR19TUFNSX1NTOwo+ICAJCQkJKmV4aXRfY29kZSA9IEFSTV9FWENFUFRJT05fRUwxX1NFUlJP UjsKPiAgCQkJfQo+ICsKPiArCQkJZ290byBleGl0Owo+ICAJCX0KPiAgCX0KPgo+ICAJaWYgKHN0 YXRpY19icmFuY2hfdW5saWtlbHkoJnZnaWNfdjNfY3B1aWZfdHJhcCkgJiYKPiAtCSAgICAqZXhp dF9jb2RlID09IEFSTV9FWENFUFRJT05fVFJBUCAmJgo+ICAJICAgIChrdm1fdmNwdV90cmFwX2dl dF9jbGFzcyh2Y3B1KSA9PSBFU1JfRUx4X0VDX1NZUzY0IHx8Cj4gIAkgICAgIGt2bV92Y3B1X3Ry YXBfZ2V0X2NsYXNzKHZjcHUpID09IEVTUl9FTHhfRUNfQ1AxNV8zMikpIHsKPiAgCQlpbnQgcmV0 ID0gX192Z2ljX3YzX3BlcmZvcm1fY3B1aWZfYWNjZXNzKHZjcHUpOwo+IEBAIC00MzAsNiArNDMz LDcgQEAgc3RhdGljIGJvb2wgX19oeXBfdGV4dCBmaXh1cF9ndWVzdF9leGl0KHN0cnVjdCBrdm1f dmNwdSAqdmNwdSwgdTY0ICpleGl0X2NvZGUpCj4gIAkJCXJldHVybiB0cnVlOwo+ICAJfQo+Cj4g K2V4aXQ6Cj4gIAkvKiBSZXR1cm4gdG8gdGhlIGhvc3Qga2VybmVsIGFuZCBoYW5kbGUgdGhlIGV4 aXQgKi8KPiAgCXJldHVybiBmYWxzZTsKPiAgfQoKCi0tCkFsZXggQmVubsOpZQoKX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KbGludXgtYXJtLWtlcm5lbCBt YWlsaW5nIGxpc3QKbGludXgtYXJtLWtlcm5lbEBsaXN0cy5pbmZyYWRlYWQub3JnCmh0dHA6Ly9s aXN0cy5pbmZyYWRlYWQub3JnL21haWxtYW4vbGlzdGluZm8vbGludXgtYXJtLWtlcm5lbAo= From mboxrd@z Thu Jan 1 00:00:00 1970 From: alex.bennee@linaro.org (Alex =?utf-8?Q?Benn=C3=A9e?=) Date: Thu, 24 May 2018 16:06:47 +0100 Subject: [PATCH v10 17/18] KVM: arm64: Fold redundant exit code checks out of fixup_guest_exit() In-Reply-To: <1527005119-6842-18-git-send-email-Dave.Martin@arm.com> References: <1527005119-6842-1-git-send-email-Dave.Martin@arm.com> <1527005119-6842-18-git-send-email-Dave.Martin@arm.com> Message-ID: <87wovtrt2w.fsf@linaro.org> To: linux-arm-kernel@lists.infradead.org List-Id: linux-arm-kernel.lists.infradead.org Dave Martin writes: > The entire tail of fixup_guest_exit() is contained in if statements > of the form if (x && *exit_code == ARM_EXCEPTION_TRAP). As a result, > we can check just once and bail out of the function early, allowing > the remaining if conditions to be simplified. > > The only awkward case is where *exit_code is changed to > ARM_EXCEPTION_EL1_SERROR in the case of an illegal GICv2 CPU > interface access: in that case, the GICv3 trap handling code is > skipped using a goto. This avoids pointlessly evaluating the > static branch check for the GICv3 case, even though we can't have > vgic_v2_cpuif_trap and vgic_v3_cpuif_trap true simultaneously > unless we have a GICv3 and GICv2 on the host: that sounds stupid, > but I haven't satisfied myself that it can't happen. > > No functional change. > > Signed-off-by: Dave Martin > Reviewed-by: Marc Zyngier Reviewed-by: Alex Benn?e > --- > arch/arm64/kvm/hyp/switch.c | 12 ++++++++---- > 1 file changed, 8 insertions(+), 4 deletions(-) > > diff --git a/arch/arm64/kvm/hyp/switch.c b/arch/arm64/kvm/hyp/switch.c > index 18d0faa..4fbee95 100644 > --- a/arch/arm64/kvm/hyp/switch.c > +++ b/arch/arm64/kvm/hyp/switch.c > @@ -387,11 +387,13 @@ static bool __hyp_text fixup_guest_exit(struct kvm_vcpu *vcpu, u64 *exit_code) > * same PC once the SError has been injected, and replay the > * trapping instruction. > */ > - if (*exit_code == ARM_EXCEPTION_TRAP && !__populate_fault_info(vcpu)) > + if (*exit_code != ARM_EXCEPTION_TRAP) > + goto exit; > + > + if (!__populate_fault_info(vcpu)) > return true; > > - if (static_branch_unlikely(&vgic_v2_cpuif_trap) && > - *exit_code == ARM_EXCEPTION_TRAP) { > + if (static_branch_unlikely(&vgic_v2_cpuif_trap)) { > bool valid; > > valid = kvm_vcpu_trap_get_class(vcpu) == ESR_ELx_EC_DABT_LOW && > @@ -417,11 +419,12 @@ static bool __hyp_text fixup_guest_exit(struct kvm_vcpu *vcpu, u64 *exit_code) > *vcpu_cpsr(vcpu) &= ~DBG_SPSR_SS; > *exit_code = ARM_EXCEPTION_EL1_SERROR; > } > + > + goto exit; > } > } > > if (static_branch_unlikely(&vgic_v3_cpuif_trap) && > - *exit_code == ARM_EXCEPTION_TRAP && > (kvm_vcpu_trap_get_class(vcpu) == ESR_ELx_EC_SYS64 || > kvm_vcpu_trap_get_class(vcpu) == ESR_ELx_EC_CP15_32)) { > int ret = __vgic_v3_perform_cpuif_access(vcpu); > @@ -430,6 +433,7 @@ static bool __hyp_text fixup_guest_exit(struct kvm_vcpu *vcpu, u64 *exit_code) > return true; > } > > +exit: > /* Return to the host kernel and handle the exit */ > return false; > } -- Alex Benn?e