Commit 52dad81e authored by Paolo Bonzini's avatar Paolo Bonzini
Browse files

Merge tag 'kvmarm-fixes-7.0-4' of...

Merge tag 'kvmarm-fixes-7.0-4' of git://git.kernel.org/pub/scm/linux/kernel/git/kvmarm/kvmarm into HEAD

KVM/arm64 fixes for 7.0, take #4

- Clear the pending exception state from a vcpu coming out of
  reset, as it could otherwise affect the first instruction
  executed in the guest.

- Fix the address translation emulation icode to set the Hardware
  Access bit on the correct PTE instead of some other location.
parents 12fd9658 0496acc4
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -1753,7 +1753,7 @@ int __kvm_at_swap_desc(struct kvm *kvm, gpa_t ipa, u64 old, u64 new)
	if (!writable)
		return -EPERM;

	ptep = (u64 __user *)hva + offset;
	ptep = (void __user *)hva + offset;
	if (cpus_have_final_cap(ARM64_HAS_LSE_ATOMICS))
		r = __lse_swap_desc(ptep, old, new);
	else
+14 −0
Original line number Diff line number Diff line
@@ -247,6 +247,20 @@ void kvm_reset_vcpu(struct kvm_vcpu *vcpu)
			kvm_vcpu_set_be(vcpu);

		*vcpu_pc(vcpu) = target_pc;

		/*
		 * We may come from a state where either a PC update was
		 * pending (SMC call resulting in PC being increpented to
		 * skip the SMC) or a pending exception. Make sure we get
		 * rid of all that, as this cannot be valid out of reset.
		 *
		 * Note that clearing the exception mask also clears PC
		 * updates, but that's an implementation detail, and we
		 * really want to make it explicit.
		 */
		vcpu_clear_flag(vcpu, PENDING_EXCEPTION);
		vcpu_clear_flag(vcpu, EXCEPT_MASK);
		vcpu_clear_flag(vcpu, INCREMENT_PC);
		vcpu_set_reg(vcpu, 0, reset_state.r0);
	}