[PATCH v19 10/20] KVM: arm64: Abstract out memory abort handling
Jonathan Cameron
jonathan.cameron at oss.qualcomm.com
Tue Sep 22 15:38:26 PDT 2026
On Sun, 20 Sep 2026 22:28:35 +0100
Suzuki K Poulose <suzuki.poulose at arm.com> wrote:
> Move the memory abort handling under VM specific s2 operation.
>
> Signed-off-by: Suzuki K Poulose <suzuki.poulose at arm.com>
Trivial comment + request to follow through on adding the local
variable for kvm. I think the other places that can be used
survive the other changes in this patch set.
> diff --git a/arch/arm64/kvm/mmu.c b/arch/arm64/kvm/mmu.c
> index d97a4a1bca23f..cf293d09e940a 100644
> --- a/arch/arm64/kvm/mmu.c
> +++ b/arch/arm64/kvm/mmu.c
> +static int kvm_vm_mem_abort(const struct kvm_s2_fault_desc *s2fd)
> +{
> + int ret;
> + struct kvm_vcpu *vcpu = s2fd->vcpu;
> +
> + VM_WARN_ON_ONCE(kvm_vcpu_trap_is_permission_fault(vcpu) &&
> + !kvm_is_write_fault(vcpu) &&
> + !kvm_vcpu_trap_is_exec_fault(vcpu));
> +
> + if (kvm_slot_has_gmem(s2fd->memslot))
> + ret = gmem_abort(s2fd);
> + else
> + ret = user_mem_abort(s2fd);
> + return ret;
Personal preference but I'd just do
return gmem_abort(s2fd);
else
return user_mem_abort(s2fd);
and save a couple of lines. I'd keep the else to make it clear it is
an either / or choice rather than an if something true one.
> +}
> +
> /* Resolve the access fault by making the page young again. */
> static void handle_access_fault(struct kvm_vcpu *vcpu, phys_addr_t fault_ipa)
> {
> @@ -2287,6 +2303,7 @@ int kvm_handle_guest_sea(struct kvm_vcpu *vcpu)
> int kvm_handle_guest_abort(struct kvm_vcpu *vcpu)
> {
> struct kvm_s2_trans nested_trans, *nested = NULL;
> + struct kvm *kvm = vcpu->kvm;
If introducing this, also use it for the other places vcpu->kvm is used
in this function. Separate patch though to keep down noise.
Looks like that's mostly to shorten the chain of dereferences in the
locks.
> unsigned long esr;
> phys_addr_t fault_ipa; /* The address we faulted on */
> phys_addr_t ipa; /* Always the IPA in the L1 guest phys space */
> @@ -2448,19 +2465,7 @@ int kvm_handle_guest_abort(struct kvm_vcpu *vcpu)
> .hva = hva,
> };
>
> - if (kvm_vm_is_protected(vcpu->kvm)) {
> - ret = pkvm_mem_abort(&s2fd);
> - } else {
> - VM_WARN_ON_ONCE(kvm_vcpu_trap_is_permission_fault(vcpu) &&
> - !write_fault &&
> - !kvm_vcpu_trap_is_exec_fault(vcpu));
> -
> - if (kvm_slot_has_gmem(memslot))
> - ret = gmem_abort(&s2fd);
> - else
> - ret = user_mem_abort(&s2fd);
> - }
> -
> + ret = kvm->arch.vm_s2_ops->vm_mem_abort(&s2fd);
> if (ret == 0)
> ret = 1;
> out:
More information about the linux-arm-kernel
mailing list