[PATCH v21 05/23] KVM: arm64: Track the type of VM in kvm_arch

Suzuki K Poulose suzuki.poulose at arm.com
Sat Oct 3 00:07:39 PDT 2026


On 03/10/2026 06:53, Suzuki K Poulose wrote:
> On 02/10/2026 16:29, Marc Zyngier wrote:
>> On Fri, 02 Oct 2026 15:37:00 +0100,
>> Fuad Tabba <tabba at google.com> wrote:
>>>
>>> Hi Marc,
>>>
>>> On Fri, 02 Oct 2026 15:15:06 +0100, Marc Zyngier <maz at kernel.org> wrote:
>>> [...]
>>>> Honestly, we introduce the flavor stuff to make it easy to match
>>>> things on a particular VM type in a readable way. So why isn't this
>>>> reading:
>>>>
>>>>          if (vcpu->kvm->arch.vm_flavor != VM_PROTECTED_PKVM)
>>>>                  return;
>>>
>>> I know this is a sketch, but just in case: that's inverted. The sync
>>> only applies to non-protected pKVM VMs (EL2 ignores it for protected
>>> ones), so it would be != VM_PKVM.
>>
>> See what I meant about this stuff being completely intractable? I
>> still have no idea what it means! ;-)
>>
> 
> Just to be clear: unprotected_pkvm() != (vm_flavor != VM_PROTECED_PKVM).
> Rather, unprotected_pkvm => (vm_flavor == VM_PKVM).
> 
> And the code wanted to bail out early for !unprotected_pkvm(). We can
> stick in "is_protected_kvm_enabled()" for unprotected_pkvm predicate
> 
> But, I can drop the helper and use the vm_flavor check.

FWIW: Here is the diff for the above change. If you are happy
with the following, I could fold this in.


diff --git a/arch/arm64/kvm/arm.c b/arch/arm64/kvm/arm.c
index 90547fbbc8ad7..bcec14c587119 100644
--- a/arch/arm64/kvm/arm.c
+++ b/arch/arm64/kvm/arm.c
@@ -772,7 +772,7 @@ void kvm_arch_vcpu_put(struct kvm_vcpu *vcpu)
                 kvm_call_hyp_nvhe(__pkvm_vcpu_put);

                 /* __pkvm_vcpu_put implies a sync of the state */
-               if (kvm_vm_is_unprotected_pkvm(vcpu->kvm))
+               if (vcpu->kvm->arch.vm_flavor == VM_PKVM)
                         vcpu_set_flag(vcpu, PKVM_HOST_STATE_DIRTY);
         }

@@ -1006,7 +1006,7 @@ int kvm_arch_vcpu_run_pid_change(struct kvm_vcpu 
*vcpu)

         if (is_protected_kvm_enabled()) {
                 /* Start with the vcpu in a dirty state */
-               if (kvm_vm_is_unprotected_pkvm(vcpu->kvm))
+               if (vcpu->kvm->arch.vm_flavor == VM_PKVM)
                         vcpu_set_flag(vcpu, PKVM_HOST_STATE_DIRTY);
                 ret = pkvm_create_hyp_vm(kvm);
                 if (ret)
diff --git a/arch/arm64/kvm/handle_exit.c b/arch/arm64/kvm/handle_exit.c
index 384c5d258c7f8..4e16e7d165515 100644
--- a/arch/arm64/kvm/handle_exit.c
+++ b/arch/arm64/kvm/handle_exit.c
@@ -490,7 +490,7 @@ static void handle_exit_pkvm_state(struct kvm_vcpu 
*vcpu, int exception_index)
  {
         int exception_code = ARM_EXCEPTION_CODE(exception_index);

-       if (!kvm_vm_is_unprotected_pkvm(vcpu->kvm))
+       if (!is_protected_kvm_enabled() || vcpu->kvm->arch.vm_flavor != 
VM_PKVM)
                 return;

         /*



Cheers
Suzuki>
> Cheers
> Suzuki
> 
>>     M.
>>
> 




More information about the linux-arm-kernel mailing list