Skip to content

Commit 50efc23

Browse files
committed
KVM: Rename kvm_arch_vcpu_async_ioctl() to kvm_arch_vcpu_unlocked_ioctl()
Rename the "async" ioctl API to "unlocked" so that upcoming usage in x86's TDX code doesn't result in a massive misnomer. To avoid having to retry SEAMCALLs, TDX needs to acquire kvm->lock *and* all vcpu->mutex locks, and acquiring all of those locks after/inside the current vCPU's mutex is a non-starter. However, TDX also needs to acquire the vCPU's mutex and load the vCPU, i.e. the handling is very much not async to the vCPU. No functional change intended. Acked-by: Claudio Imbrenda <imbrenda@linux.ibm.com> Reviewed-by: Yan Zhao <yan.y.zhao@intel.com> Tested-by: Yan Zhao <yan.y.zhao@intel.com> Tested-by: Kai Huang <kai.huang@intel.com> Link: https://patch.msgid.link/20251030200951.3402865-3-seanjc@google.com Signed-off-by: Sean Christopherson <seanjc@google.com>
1 parent 0a0da3f commit 50efc23

File tree

9 files changed

+19
-19
lines changed

9 files changed

+19
-19
lines changed

arch/arm64/kvm/arm.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1835,8 +1835,8 @@ long kvm_arch_vcpu_ioctl(struct file *filp,
18351835
return r;
18361836
}
18371837

1838-
long kvm_arch_vcpu_async_ioctl(struct file *filp, unsigned int ioctl,
1839-
unsigned long arg)
1838+
long kvm_arch_vcpu_unlocked_ioctl(struct file *filp, unsigned int ioctl,
1839+
unsigned long arg)
18401840
{
18411841
return -ENOIOCTLCMD;
18421842
}

arch/loongarch/kvm/vcpu.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1471,8 +1471,8 @@ int kvm_vcpu_ioctl_interrupt(struct kvm_vcpu *vcpu, struct kvm_interrupt *irq)
14711471
return 0;
14721472
}
14731473

1474-
long kvm_arch_vcpu_async_ioctl(struct file *filp,
1475-
unsigned int ioctl, unsigned long arg)
1474+
long kvm_arch_vcpu_unlocked_ioctl(struct file *filp, unsigned int ioctl,
1475+
unsigned long arg)
14761476
{
14771477
void __user *argp = (void __user *)arg;
14781478
struct kvm_vcpu *vcpu = filp->private_data;

arch/mips/kvm/mips.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -895,8 +895,8 @@ static int kvm_vcpu_ioctl_enable_cap(struct kvm_vcpu *vcpu,
895895
return r;
896896
}
897897

898-
long kvm_arch_vcpu_async_ioctl(struct file *filp, unsigned int ioctl,
899-
unsigned long arg)
898+
long kvm_arch_vcpu_unlocked_ioctl(struct file *filp, unsigned int ioctl,
899+
unsigned long arg)
900900
{
901901
struct kvm_vcpu *vcpu = filp->private_data;
902902
void __user *argp = (void __user *)arg;

arch/powerpc/kvm/powerpc.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2028,8 +2028,8 @@ int kvm_arch_vcpu_ioctl_set_mpstate(struct kvm_vcpu *vcpu,
20282028
return -EINVAL;
20292029
}
20302030

2031-
long kvm_arch_vcpu_async_ioctl(struct file *filp,
2032-
unsigned int ioctl, unsigned long arg)
2031+
long kvm_arch_vcpu_unlocked_ioctl(struct file *filp, unsigned int ioctl,
2032+
unsigned long arg)
20332033
{
20342034
struct kvm_vcpu *vcpu = filp->private_data;
20352035
void __user *argp = (void __user *)arg;

arch/riscv/kvm/vcpu.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -238,8 +238,8 @@ vm_fault_t kvm_arch_vcpu_fault(struct kvm_vcpu *vcpu, struct vm_fault *vmf)
238238
return VM_FAULT_SIGBUS;
239239
}
240240

241-
long kvm_arch_vcpu_async_ioctl(struct file *filp,
242-
unsigned int ioctl, unsigned long arg)
241+
long kvm_arch_vcpu_unlocked_ioctl(struct file *filp, unsigned int ioctl,
242+
unsigned long arg)
243243
{
244244
struct kvm_vcpu *vcpu = filp->private_data;
245245
void __user *argp = (void __user *)arg;

arch/s390/kvm/kvm-s390.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5730,8 +5730,8 @@ static long kvm_s390_vcpu_memsida_op(struct kvm_vcpu *vcpu,
57305730
return r;
57315731
}
57325732

5733-
long kvm_arch_vcpu_async_ioctl(struct file *filp,
5734-
unsigned int ioctl, unsigned long arg)
5733+
long kvm_arch_vcpu_unlocked_ioctl(struct file *filp, unsigned int ioctl,
5734+
unsigned long arg)
57355735
{
57365736
struct kvm_vcpu *vcpu = filp->private_data;
57375737
void __user *argp = (void __user *)arg;

arch/x86/kvm/x86.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7240,8 +7240,8 @@ static int kvm_vm_ioctl_set_clock(struct kvm *kvm, void __user *argp)
72407240
return 0;
72417241
}
72427242

7243-
long kvm_arch_vcpu_async_ioctl(struct file *filp, unsigned int ioctl,
7244-
unsigned long arg)
7243+
long kvm_arch_vcpu_unlocked_ioctl(struct file *filp, unsigned int ioctl,
7244+
unsigned long arg)
72457245
{
72467246
return -ENOIOCTLCMD;
72477247
}

include/linux/kvm_host.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1557,6 +1557,8 @@ long kvm_arch_dev_ioctl(struct file *filp,
15571557
unsigned int ioctl, unsigned long arg);
15581558
long kvm_arch_vcpu_ioctl(struct file *filp,
15591559
unsigned int ioctl, unsigned long arg);
1560+
long kvm_arch_vcpu_unlocked_ioctl(struct file *filp,
1561+
unsigned int ioctl, unsigned long arg);
15601562
vm_fault_t kvm_arch_vcpu_fault(struct kvm_vcpu *vcpu, struct vm_fault *vmf);
15611563

15621564
int kvm_vm_ioctl_check_extension(struct kvm *kvm, long ext);
@@ -2437,8 +2439,6 @@ static inline bool kvm_arch_no_poll(struct kvm_vcpu *vcpu)
24372439
}
24382440
#endif /* CONFIG_HAVE_KVM_NO_POLL */
24392441

2440-
long kvm_arch_vcpu_async_ioctl(struct file *filp,
2441-
unsigned int ioctl, unsigned long arg);
24422442
void kvm_arch_guest_memory_reclaimed(struct kvm *kvm);
24432443

24442444
#ifdef CONFIG_HAVE_KVM_VCPU_RUN_PID_CHANGE

virt/kvm/kvm_main.c

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4434,10 +4434,10 @@ static long kvm_vcpu_ioctl(struct file *filp,
44344434
return r;
44354435

44364436
/*
4437-
* Some architectures have vcpu ioctls that are asynchronous to vcpu
4438-
* execution; mutex_lock() would break them.
4437+
* Let arch code handle select vCPU ioctls without holding vcpu->mutex,
4438+
* e.g. to support ioctls that can run asynchronous to vCPU execution.
44394439
*/
4440-
r = kvm_arch_vcpu_async_ioctl(filp, ioctl, arg);
4440+
r = kvm_arch_vcpu_unlocked_ioctl(filp, ioctl, arg);
44414441
if (r != -ENOIOCTLCMD)
44424442
return r;
44434443

0 commit comments

Comments
 (0)