Skip to content

Commit

Permalink
kvm: assume that many ioeventfds can be created
Browse files Browse the repository at this point in the history
NR_IOBUS_DEVS was increased to 200 in Linux 2.6.34.  By Linux 3.5 it had
increased to 1000 and later ioeventfds were changed to not count against
the limit.  But the earlier limit of 200 would already be enough for
kvm_check_many_ioeventfds() to be true, so remove the check.

Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
  • Loading branch information
bonzini committed Oct 25, 2023
1 parent d19fe67 commit 5d9ec1f
Show file tree
Hide file tree
Showing 5 changed files with 0 additions and 58 deletions.
47 changes: 0 additions & 47 deletions accel/kvm/kvm-all.c
Original file line number Diff line number Diff line change
Expand Up @@ -1253,43 +1253,6 @@ static int kvm_set_ioeventfd_pio(int fd, uint16_t addr, uint16_t val,
}


static int kvm_check_many_ioeventfds(void)
{
/* Userspace can use ioeventfd for io notification. This requires a host
* that supports eventfd(2) and an I/O thread; since eventfd does not
* support SIGIO it cannot interrupt the vcpu.
*
* Older kernels have a 6 device limit on the KVM io bus. Find out so we
* can avoid creating too many ioeventfds.
*/
#if defined(CONFIG_EVENTFD)
int ioeventfds[7];
int i, ret = 0;
for (i = 0; i < ARRAY_SIZE(ioeventfds); i++) {
ioeventfds[i] = eventfd(0, EFD_CLOEXEC);
if (ioeventfds[i] < 0) {
break;
}
ret = kvm_set_ioeventfd_pio(ioeventfds[i], 0, i, true, 2, true);
if (ret < 0) {
close(ioeventfds[i]);
break;
}
}

/* Decide whether many devices are supported or not */
ret = i == ARRAY_SIZE(ioeventfds);

while (i-- > 0) {
kvm_set_ioeventfd_pio(ioeventfds[i], 0, i, false, 2, true);
close(ioeventfds[i]);
}
return ret;
#else
return 0;
#endif
}

static const KVMCapabilityInfo *
kvm_check_extension_list(KVMState *s, const KVMCapabilityInfo *list)
{
Expand Down Expand Up @@ -2648,8 +2611,6 @@ static int kvm_init(MachineState *ms)
memory_listener_register(&kvm_coalesced_pio_listener,
&address_space_io);

s->many_ioeventfds = kvm_check_many_ioeventfds();

s->sync_mmu = !!kvm_vm_check_extension(kvm_state, KVM_CAP_SYNC_MMU);
if (!s->sync_mmu) {
ret = ram_block_discard_disable(true);
Expand Down Expand Up @@ -3218,14 +3179,6 @@ int kvm_max_nested_state_length(void)
return kvm_state->max_nested_state_len;
}

int kvm_has_many_ioeventfds(void)
{
if (!kvm_enabled()) {
return 0;
}
return kvm_state->many_ioeventfds;
}

int kvm_has_gsi_routing(void)
{
#ifdef KVM_CAP_IRQ_ROUTING
Expand Down
5 changes: 0 additions & 5 deletions accel/stubs/kvm-stub.c
Original file line number Diff line number Diff line change
Expand Up @@ -40,11 +40,6 @@ bool kvm_has_sync_mmu(void)
return false;
}

int kvm_has_many_ioeventfds(void)
{
return 0;
}

int kvm_on_sigbus_vcpu(CPUState *cpu, int code, void *addr)
{
return 1;
Expand Down
4 changes: 0 additions & 4 deletions hw/virtio/virtio-pci.c
Original file line number Diff line number Diff line change
Expand Up @@ -2114,10 +2114,6 @@ static void virtio_pci_realize(PCIDevice *pci_dev, Error **errp)
bool pcie_port = pci_bus_is_express(pci_get_bus(pci_dev)) &&
!pci_bus_is_root(pci_get_bus(pci_dev));

if (kvm_enabled() && !kvm_has_many_ioeventfds()) {
proxy->flags &= ~VIRTIO_PCI_FLAG_USE_IOEVENTFD;
}

/* fd-based ioevents can't be synchronized in record/replay */
if (replay_mode != REPLAY_MODE_NONE) {
proxy->flags &= ~VIRTIO_PCI_FLAG_USE_IOEVENTFD;
Expand Down
1 change: 0 additions & 1 deletion include/sysemu/kvm.h
Original file line number Diff line number Diff line change
Expand Up @@ -214,7 +214,6 @@ int kvm_has_vcpu_events(void);
int kvm_has_robust_singlestep(void);
int kvm_has_debugregs(void);
int kvm_max_nested_state_length(void);
int kvm_has_many_ioeventfds(void);
int kvm_has_gsi_routing(void);

/**
Expand Down
1 change: 0 additions & 1 deletion include/sysemu/kvm_int.h
Original file line number Diff line number Diff line change
Expand Up @@ -84,7 +84,6 @@ struct KVMState
QTAILQ_HEAD(, kvm_sw_breakpoint) kvm_sw_breakpoints;
#endif
int max_nested_state_len;
int many_ioeventfds;
int kvm_shadow_mem;
bool kernel_irqchip_allowed;
bool kernel_irqchip_required;
Expand Down

0 comments on commit 5d9ec1f

Please sign in to comment.