On Fri, 2022-11-11 at 10:47 -0500, Emanuele Giuseppe Esposito wrote: > Using the new accel-blocker API, mark where ioctls are being called > in KVM. Next, we will implement the critical section that will take > care of performing memslots modifications atomically, therefore > preventing any new ioctl from running and allowing the running ones > to finish. > > Signed-off-by: David Hildenbrand <david@xxxxxxxxxx> > Signed-off-by: Emanuele Giuseppe Esposito <eesposit@xxxxxxxxxx> > --- > accel/kvm/kvm-all.c | 7 +++++++ > 1 file changed, 7 insertions(+) > > diff --git a/accel/kvm/kvm-all.c b/accel/kvm/kvm-all.c > index f99b0becd8..ff660fd469 100644 > --- a/accel/kvm/kvm-all.c > +++ b/accel/kvm/kvm-all.c > @@ -2310,6 +2310,7 @@ static int kvm_init(MachineState *ms) > assert(TARGET_PAGE_SIZE <= qemu_real_host_page_size()); > > s->sigmask_len = 8; > + accel_blocker_init(); > > #ifdef KVM_CAP_SET_GUEST_DEBUG > QTAILQ_INIT(&s->kvm_sw_breakpoints); > @@ -3014,7 +3015,9 @@ int kvm_vm_ioctl(KVMState *s, int type, ...) > va_end(ap); > > trace_kvm_vm_ioctl(type, arg); > + accel_ioctl_begin(); > ret = ioctl(s->vmfd, type, arg); > + accel_ioctl_end(); > if (ret == -1) { > ret = -errno; > } > @@ -3032,7 +3035,9 @@ int kvm_vcpu_ioctl(CPUState *cpu, int type, > ...) > va_end(ap); > > trace_kvm_vcpu_ioctl(cpu->cpu_index, type, arg); > + accel_cpu_ioctl_begin(cpu); Does this mean that kvm_region_commit() can inhibit any other vcpus doing any ioctls? > ret = ioctl(cpu->kvm_fd, type, arg); > + accel_cpu_ioctl_end(cpu); > if (ret == -1) { > ret = -errno; > } > @@ -3050,7 +3055,9 @@ int kvm_device_ioctl(int fd, int type, ...) > va_end(ap); > > trace_kvm_device_ioctl(fd, type, arg); > + accel_ioctl_begin(); > ret = ioctl(fd, type, arg); > + accel_ioctl_end(); > if (ret == -1) { > ret = -errno; > }