KVM: arm/arm64: Fix guest external abort matching
authorJames Morse <james.morse@arm.com>
Tue, 18 Jul 2017 12:37:41 +0000 (13:37 +0100)
committerChristoffer Dall <cdall@linaro.org>
Tue, 5 Sep 2017 15:33:37 +0000 (17:33 +0200)
commitbb428921b777a5e36753b5d6aa0ba8d46705cc0d
treec69c07699715fa2e507419f770933adbf683a466
parent712b12d72451411c40e39d25e2140fb8c7fd0e49
KVM: arm/arm64: Fix guest external abort matching

The ARM-ARM has two bits in the ESR/HSR relevant to external aborts.
A range of {I,D}FSC values (of which bit 5 is always set) and bit 9 'EA'
which provides:
> an IMPLEMENTATION DEFINED classification of External Aborts.

This bit is in addition to the {I,D}FSC range, and has an implementation
defined meaning. KVM should always ignore this bit when handling external
aborts from a guest.

Remove the ESR_ELx_EA definition and rewrite its helper
kvm_vcpu_dabt_isextabt() to check the {I,D}FSC range. This merges
kvm_vcpu_dabt_isextabt() and the recently added is_abort_sea() helper.

CC: Tyler Baicar <tbaicar@codeaurora.org>
Reported-by: gengdongjiu <gengdj.1984@gmail.com>
Signed-off-by: James Morse <james.morse@arm.com>
Signed-off-by: Marc Zyngier <marc.zyngier@arm.com>
Signed-off-by: Christoffer Dall <cdall@linaro.org>
arch/arm/include/asm/kvm_arm.h
arch/arm/include/asm/kvm_emulate.h
arch/arm64/include/asm/kvm_emulate.h
virt/kvm/arm/mmu.c