diff options
author | Dave Airlie <airlied@redhat.com> | 2021-06-23 10:07:48 +1000 |
---|---|---|
committer | Dave Airlie <airlied@redhat.com> | 2021-06-23 10:07:48 +1000 |
commit | f45fbbb6d5cff29ddfc708676ec1c2496eed3a07 (patch) | |
tree | 5496fee9f6b10da368aa49b03612061156e42d2f /arch/arm64/kvm/hyp/exception.c | |
parent | d472b36efbf8a27dc8a80519db8b5a8caffe42b6 (diff) | |
parent | 13311e74253fe64329390df80bed3f07314ddd61 (diff) | |
download | linux-f45fbbb6d5cff29ddfc708676ec1c2496eed3a07.tar.gz linux-f45fbbb6d5cff29ddfc708676ec1c2496eed3a07.tar.bz2 linux-f45fbbb6d5cff29ddfc708676ec1c2496eed3a07.zip |
Backmerge tag 'v5.13-rc7' into drm-next
Backmerge Linux 5.13-rc7 to make some pulls from later bases apply,
and to bake in the conflicts so far.
Diffstat (limited to 'arch/arm64/kvm/hyp/exception.c')
-rw-r--r-- | arch/arm64/kvm/hyp/exception.c | 18 |
1 files changed, 17 insertions, 1 deletions
diff --git a/arch/arm64/kvm/hyp/exception.c b/arch/arm64/kvm/hyp/exception.c index 73629094f903..11541b94b328 100644 --- a/arch/arm64/kvm/hyp/exception.c +++ b/arch/arm64/kvm/hyp/exception.c @@ -296,7 +296,7 @@ static void enter_exception32(struct kvm_vcpu *vcpu, u32 mode, u32 vect_offset) *vcpu_pc(vcpu) = vect_offset; } -void kvm_inject_exception(struct kvm_vcpu *vcpu) +static void kvm_inject_exception(struct kvm_vcpu *vcpu) { if (vcpu_el1_is_32bit(vcpu)) { switch (vcpu->arch.flags & KVM_ARM64_EXCEPT_MASK) { @@ -329,3 +329,19 @@ void kvm_inject_exception(struct kvm_vcpu *vcpu) } } } + +/* + * Adjust the guest PC (and potentially exception state) depending on + * flags provided by the emulation code. + */ +void __kvm_adjust_pc(struct kvm_vcpu *vcpu) +{ + if (vcpu->arch.flags & KVM_ARM64_PENDING_EXCEPTION) { + kvm_inject_exception(vcpu); + vcpu->arch.flags &= ~(KVM_ARM64_PENDING_EXCEPTION | + KVM_ARM64_EXCEPT_MASK); + } else if (vcpu->arch.flags & KVM_ARM64_INCREMENT_PC) { + kvm_skip_instr(vcpu); + vcpu->arch.flags &= ~KVM_ARM64_INCREMENT_PC; + } +} |