mirror of
https://github.com/Motorhead1991/qemu.git
synced 2025-08-04 08:13:54 -06:00
virtio-blk: enable multiple vectors when using multiple I/O queues
Currently virtio-pci driver hardcoded 2 vectors for virtio-blk device, for multiple I/O queues scenario, all the I/O queues will share one interrupt vector, while here, enable multiple vectors according to the number of I/O queues. Signed-off-by: Changpeng Liu <changpeng.liu@intel.com> Reviewed-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
9d6b9db19c
commit
0ebf9a7488
2 changed files with 20 additions and 2 deletions
|
@ -1932,7 +1932,8 @@ static Property virtio_blk_pci_properties[] = {
|
||||||
DEFINE_PROP_UINT32("class", VirtIOPCIProxy, class_code, 0),
|
DEFINE_PROP_UINT32("class", VirtIOPCIProxy, class_code, 0),
|
||||||
DEFINE_PROP_BIT("ioeventfd", VirtIOPCIProxy, flags,
|
DEFINE_PROP_BIT("ioeventfd", VirtIOPCIProxy, flags,
|
||||||
VIRTIO_PCI_FLAG_USE_IOEVENTFD_BIT, true),
|
VIRTIO_PCI_FLAG_USE_IOEVENTFD_BIT, true),
|
||||||
DEFINE_PROP_UINT32("vectors", VirtIOPCIProxy, nvectors, 2),
|
DEFINE_PROP_UINT32("vectors", VirtIOPCIProxy, nvectors,
|
||||||
|
DEV_NVECTORS_UNSPECIFIED),
|
||||||
DEFINE_PROP_END_OF_LIST(),
|
DEFINE_PROP_END_OF_LIST(),
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -1941,6 +1942,10 @@ static void virtio_blk_pci_realize(VirtIOPCIProxy *vpci_dev, Error **errp)
|
||||||
VirtIOBlkPCI *dev = VIRTIO_BLK_PCI(vpci_dev);
|
VirtIOBlkPCI *dev = VIRTIO_BLK_PCI(vpci_dev);
|
||||||
DeviceState *vdev = DEVICE(&dev->vdev);
|
DeviceState *vdev = DEVICE(&dev->vdev);
|
||||||
|
|
||||||
|
if (vpci_dev->nvectors == DEV_NVECTORS_UNSPECIFIED) {
|
||||||
|
vpci_dev->nvectors = dev->vdev.conf.num_queues + 1;
|
||||||
|
}
|
||||||
|
|
||||||
qdev_set_parent_bus(vdev, BUS(&vpci_dev->bus));
|
qdev_set_parent_bus(vdev, BUS(&vpci_dev->bus));
|
||||||
object_property_set_bool(OBJECT(vdev), true, "realized", errp);
|
object_property_set_bool(OBJECT(vdev), true, "realized", errp);
|
||||||
}
|
}
|
||||||
|
@ -1983,7 +1988,8 @@ static const TypeInfo virtio_blk_pci_info = {
|
||||||
|
|
||||||
static Property vhost_user_blk_pci_properties[] = {
|
static Property vhost_user_blk_pci_properties[] = {
|
||||||
DEFINE_PROP_UINT32("class", VirtIOPCIProxy, class_code, 0),
|
DEFINE_PROP_UINT32("class", VirtIOPCIProxy, class_code, 0),
|
||||||
DEFINE_PROP_UINT32("vectors", VirtIOPCIProxy, nvectors, 2),
|
DEFINE_PROP_UINT32("vectors", VirtIOPCIProxy, nvectors,
|
||||||
|
DEV_NVECTORS_UNSPECIFIED),
|
||||||
DEFINE_PROP_END_OF_LIST(),
|
DEFINE_PROP_END_OF_LIST(),
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -1992,6 +1998,10 @@ static void vhost_user_blk_pci_realize(VirtIOPCIProxy *vpci_dev, Error **errp)
|
||||||
VHostUserBlkPCI *dev = VHOST_USER_BLK_PCI(vpci_dev);
|
VHostUserBlkPCI *dev = VHOST_USER_BLK_PCI(vpci_dev);
|
||||||
DeviceState *vdev = DEVICE(&dev->vdev);
|
DeviceState *vdev = DEVICE(&dev->vdev);
|
||||||
|
|
||||||
|
if (vpci_dev->nvectors == DEV_NVECTORS_UNSPECIFIED) {
|
||||||
|
vpci_dev->nvectors = dev->vdev.num_queues + 1;
|
||||||
|
}
|
||||||
|
|
||||||
qdev_set_parent_bus(vdev, BUS(&vpci_dev->bus));
|
qdev_set_parent_bus(vdev, BUS(&vpci_dev->bus));
|
||||||
object_property_set_bool(OBJECT(vdev), true, "realized", errp);
|
object_property_set_bool(OBJECT(vdev), true, "realized", errp);
|
||||||
}
|
}
|
||||||
|
|
|
@ -6,6 +6,14 @@
|
||||||
.driver = "hpet",\
|
.driver = "hpet",\
|
||||||
.property = "hpet-offset-saved",\
|
.property = "hpet-offset-saved",\
|
||||||
.value = "false",\
|
.value = "false",\
|
||||||
|
},{\
|
||||||
|
.driver = "virtio-blk-pci",\
|
||||||
|
.property = "vectors",\
|
||||||
|
.value = "2",\
|
||||||
|
},{\
|
||||||
|
.driver = "vhost-user-blk-pci",\
|
||||||
|
.property = "vectors",\
|
||||||
|
.value = "2",\
|
||||||
},
|
},
|
||||||
|
|
||||||
#define HW_COMPAT_2_10 \
|
#define HW_COMPAT_2_10 \
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue