[PATCH v21 10/23] KVM: arm64: Add VM specific callback for S2 MMU operations

Suzuki K Poulose suzuki.poulose at arm.com
Sat Oct 3 08:30:04 PDT 2026


On 03/10/2026 10:01, Marc Zyngier wrote:
> On Thu, 01 Oct 2026 22:06:50 +0100,
> Suzuki K Poulose <suzuki.poulose at arm.com> wrote:
>>
>> Add VM type specific S2 MMU operation backends which can be initialized per
>> VM flavor, to keep the handling cleaner.
>>
>> Reviewed-by: Jonathan Cameron <jonathan.cameron at oss.qualcomm.com>
>> Tested-by: Gavin Shan <gshan at redhat.com>
>> Signed-off-by: Suzuki K Poulose <suzuki.poulose at arm.com>
>> ---
>> Changes since v19:
>>   - Add a blank line in kvm_arch_flush_remote_tlbs()


>>   struct kvm_s2_mmu {
>>   	struct kvm_vmid vmid;
>>   
>> @@ -332,6 +345,8 @@ struct kvm_arch {
>>   	 */
>>   	u64 fgu[__NR_FGT_GROUP_IDS__];
>>   
>> +	const struct kvm_vm_s2_ops *vm_s2_ops;
>> +
> 
> If you're touching this patch, can you please move this pointer next
> to the vcpu_ops pointer?

Sure, I will do that.

>> +
>> +static const struct kvm_vm_s2_ops protected_pkvm_vm_s2_ops = {
>> +	.vm_flush_remote_tlbs		= pkvm_flush_remote_tlbs,
>> +	.vm_flush_remote_tlbs_range	= pkvm_flush_remote_tlbs_range,
>> +	/*
>> +	 * Not supported for Protected VMs under pKVM
>> +	 * .vm_age_gfn
>> +	 * .vm_test_age_gfn
>> +	 * .vm_stage2_unmap_range
>> +	 */
> 
> I really think we should have *something* here that returns
> "unsupported", and avoid NULL-checks in the dispatchers.

Ack

> 
>> +};
>> +
>> +static const struct kvm_vm_s2_ops pkvm_vm_s2_ops = {
>> +	.vm_flush_remote_tlbs		= pkvm_flush_remote_tlbs,
>> +	.vm_flush_remote_tlbs_range	= pkvm_flush_remote_tlbs_range,
>> +	.vm_age_gfn			= kvm_vm_age_gfn,
>> +	.vm_test_age_gfn		= kvm_vm_test_age_gfn,
>> +	.vm_stage2_unmap_range		= kvm_vm_stage2_unmap_range,
> 
> and since we have this: can we get rid of the KVM_PGT_FN() hack?

Ack, I will give it a go.


>> +#define KVM_VM_S2_OPS(flavor, ops)		\
>> +		[flavor] = ops
>> +static const struct kvm_vm_s2_ops *arm64_vm_s2_ops[] = {
>> +	KVM_VM_S2_OPS(VM_VHE, &kvm_default_vm_s2_ops),
>> +	KVM_VM_S2_OPS(VM_NVHE, &kvm_default_vm_s2_ops),
>> +	KVM_VM_S2_OPS(VM_PKVM, &pkvm_vm_s2_ops),
>> +	KVM_VM_S2_OPS(VM_PROTECTED_PKVM, &protected_pkvm_vm_s2_ops),
> 
> nit: move the '&' into the macro.

Ack.

Suzuki




More information about the linux-arm-kernel mailing list