mirror of
https://github.com/Motorhead1991/qemu.git
synced 2025-08-08 10:13:56 -06:00
virtio: introduce virtio_device_ioeventfd_enabled
This will be used to forbid iothread configuration when the proxy does not allow using ioeventfd. To simplify the implementation, change the direction of the ioeventfd_disabled callback too. Reviewed-by: Stefan Hajnoczi <stefanha@redhat.com> Reviewed-by: Cornelia Huck <cornelia.huck@de.ibm.com> Signed-off-by: Paolo Bonzini <pbonzini@redhat.com> Reviewed-by: Michael S. Tsirkin <mst@redhat.com> Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
This commit is contained in:
parent
ff4c07df67
commit
8e93cef14e
7 changed files with 32 additions and 13 deletions
|
@ -193,7 +193,7 @@ int virtio_bus_start_ioeventfd(VirtioBusState *bus)
|
|||
VirtioDeviceClass *vdc = VIRTIO_DEVICE_GET_CLASS(vdev);
|
||||
int r;
|
||||
|
||||
if (!k->ioeventfd_assign || k->ioeventfd_disabled(proxy)) {
|
||||
if (!k->ioeventfd_assign || !k->ioeventfd_enabled(proxy)) {
|
||||
return -ENOSYS;
|
||||
}
|
||||
if (bus->ioeventfd_started || bus->ioeventfd_disabled) {
|
||||
|
@ -223,6 +223,14 @@ void virtio_bus_stop_ioeventfd(VirtioBusState *bus)
|
|||
bus->ioeventfd_started = false;
|
||||
}
|
||||
|
||||
bool virtio_bus_ioeventfd_enabled(VirtioBusState *bus)
|
||||
{
|
||||
VirtioBusClass *k = VIRTIO_BUS_GET_CLASS(bus);
|
||||
DeviceState *proxy = DEVICE(BUS(bus)->parent);
|
||||
|
||||
return k->ioeventfd_assign && k->ioeventfd_enabled(proxy);
|
||||
}
|
||||
|
||||
/*
|
||||
* This function switches from/to the generic ioeventfd handler.
|
||||
* assign==false means 'use generic ioeventfd handler'.
|
||||
|
|
|
@ -92,9 +92,9 @@ typedef struct {
|
|||
bool format_transport_address;
|
||||
} VirtIOMMIOProxy;
|
||||
|
||||
static bool virtio_mmio_ioeventfd_disabled(DeviceState *d)
|
||||
static bool virtio_mmio_ioeventfd_enabled(DeviceState *d)
|
||||
{
|
||||
return !kvm_eventfds_enabled();
|
||||
return kvm_eventfds_enabled();
|
||||
}
|
||||
|
||||
static int virtio_mmio_ioeventfd_assign(DeviceState *d,
|
||||
|
@ -531,7 +531,7 @@ static void virtio_mmio_bus_class_init(ObjectClass *klass, void *data)
|
|||
k->save_config = virtio_mmio_save_config;
|
||||
k->load_config = virtio_mmio_load_config;
|
||||
k->set_guest_notifiers = virtio_mmio_set_guest_notifiers;
|
||||
k->ioeventfd_disabled = virtio_mmio_ioeventfd_disabled;
|
||||
k->ioeventfd_enabled = virtio_mmio_ioeventfd_enabled;
|
||||
k->ioeventfd_assign = virtio_mmio_ioeventfd_assign;
|
||||
k->has_variable_vring_alignment = true;
|
||||
bus_class->max_dev = 1;
|
||||
|
|
|
@ -262,11 +262,11 @@ static int virtio_pci_load_queue(DeviceState *d, int n, QEMUFile *f)
|
|||
return 0;
|
||||
}
|
||||
|
||||
static bool virtio_pci_ioeventfd_disabled(DeviceState *d)
|
||||
static bool virtio_pci_ioeventfd_enabled(DeviceState *d)
|
||||
{
|
||||
VirtIOPCIProxy *proxy = to_virtio_pci_proxy(d);
|
||||
|
||||
return !(proxy->flags & VIRTIO_PCI_FLAG_USE_IOEVENTFD);
|
||||
return (proxy->flags & VIRTIO_PCI_FLAG_USE_IOEVENTFD) != 0;
|
||||
}
|
||||
|
||||
#define QEMU_VIRTIO_PCI_QUEUE_MEM_MULT 0x1000
|
||||
|
@ -2516,7 +2516,7 @@ static void virtio_pci_bus_class_init(ObjectClass *klass, void *data)
|
|||
k->device_plugged = virtio_pci_device_plugged;
|
||||
k->device_unplugged = virtio_pci_device_unplugged;
|
||||
k->query_nvectors = virtio_pci_query_nvectors;
|
||||
k->ioeventfd_disabled = virtio_pci_ioeventfd_disabled;
|
||||
k->ioeventfd_enabled = virtio_pci_ioeventfd_enabled;
|
||||
k->ioeventfd_assign = virtio_pci_ioeventfd_assign;
|
||||
}
|
||||
|
||||
|
|
|
@ -2247,6 +2247,14 @@ static void virtio_device_class_init(ObjectClass *klass, void *data)
|
|||
vdc->stop_ioeventfd = virtio_device_stop_ioeventfd_impl;
|
||||
}
|
||||
|
||||
bool virtio_device_ioeventfd_enabled(VirtIODevice *vdev)
|
||||
{
|
||||
BusState *qbus = qdev_get_parent_bus(DEVICE(vdev));
|
||||
VirtioBusState *vbus = VIRTIO_BUS(qbus);
|
||||
|
||||
return virtio_bus_ioeventfd_enabled(vbus);
|
||||
}
|
||||
|
||||
static const TypeInfo virtio_device_info = {
|
||||
.name = TYPE_VIRTIO_DEVICE,
|
||||
.parent = TYPE_DEVICE,
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue