|
@@ -606,8 +606,13 @@ int kvm_handle_guest_abort(struct kvm_vcpu *vcpu, struct kvm_run *run)
|
|
|
goto out_unlock;
|
|
|
}
|
|
|
|
|
|
- /* Adjust page offset */
|
|
|
- fault_ipa |= kvm_vcpu_get_hfar(vcpu) & ~PAGE_MASK;
|
|
|
+ /*
|
|
|
+ * The IPA is reported as [MAX:12], so we need to
|
|
|
+ * complement it with the bottom 12 bits from the
|
|
|
+ * faulting VA. This is always 12 bits, irrespective
|
|
|
+ * of the page size.
|
|
|
+ */
|
|
|
+ fault_ipa |= kvm_vcpu_get_hfar(vcpu) & ((1 << 12) - 1);
|
|
|
ret = io_mem_abort(vcpu, run, fault_ipa);
|
|
|
goto out_unlock;
|
|
|
}
|