[RFC 3/6] KVM: arm64: Wire up TLBID vDomain configuration ioctls
Jinqian Yang
yangjinqian1 at huawei.com
Thu Oct 29 23:56:14 PDT 2026
Report KVM_CAP_ARM_TLBIDOMAIN from kvm_vm_ioctl_check_extension(),
and bridge KVM_ARM_VCPU_SET_VDOMAIN and KVM_ARM_GET_VDOMAIN_NUM to
their kvm_arm_* helpers, letting userspace configure each vCPU's
vDomain bitmap and get the number of vDomains.
Signed-off-by: Jinqian Yang <yangjinqian1 at huawei.com>
Signed-off-by: Zhou Wang <wangzhou1 at hisilicon.com>
---
arch/arm64/kvm/arm.c | 31 +++++++++++++++++++++++++++++++
1 file changed, 31 insertions(+)
diff --git a/arch/arm64/kvm/arm.c b/arch/arm64/kvm/arm.c
index 809d33b8e5be..4dfea015eaaa 100644
--- a/arch/arm64/kvm/arm.c
+++ b/arch/arm64/kvm/arm.c
@@ -598,6 +598,13 @@ int kvm_vm_ioctl_check_extension(struct kvm *kvm, long ext)
case KVM_CAP_ARM_PTRAUTH_GENERIC:
r = kvm_has_full_ptr_auth();
break;
+ case KVM_CAP_ARM_TLBIDOMAIN:
+ if (IS_ENABLED(CONFIG_KVM_ARM_VTLBID) && has_vhe() &&
+ system_supports_tlbid())
+ r = 1;
+ else
+ r = 0;
+ break;
case KVM_CAP_ARM_EAGER_SPLIT_CHUNK_SIZE:
if (kvm)
r = kvm->arch.mmu.split_page_chunk_size;
@@ -2437,6 +2444,17 @@ long kvm_arch_vcpu_ioctl(struct file *filp,
return kvm_arm_vcpu_finalize(vcpu, what);
}
+ case KVM_ARM_VCPU_SET_VDOMAIN: {
+ struct kvm_arm_set_vdomain vdomain;
+
+ if (!kvm_vcpu_initialized(vcpu))
+ return -ENOEXEC;
+
+ if (copy_from_user(&vdomain, argp, sizeof(vdomain)))
+ return -EFAULT;
+
+ return kvm_arm_vcpu_set_vdomain(vcpu, &vdomain);
+ }
default:
r = -EINVAL;
}
@@ -2578,6 +2596,19 @@ int kvm_arch_vm_ioctl(struct file *filp, unsigned int ioctl, unsigned long arg)
return -EFAULT;
return kvm_vm_ioctl_get_reg_writable_masks(kvm, &range);
}
+ case KVM_ARM_GET_VDOMAIN_NUM: {
+ struct kvm_arm_get_vdomain vdomain;
+ int ret;
+
+ ret = kvm_arm_get_vdomain_num(kvm, &vdomain);
+ if (ret)
+ return ret;
+
+ if (copy_to_user(argp, &vdomain, sizeof(vdomain)))
+ return -EFAULT;
+
+ return 0;
+ }
default:
return -EINVAL;
}
--
2.33.0
More information about the linux-arm-kernel
mailing list