mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2026-07-21 22:47:51 -04:00
virtio: add num_vf callback to virtio_bus
Recent QEMU versions added support for virtio SR-IOV emulation, allowing virtio devices to expose SR-IOV VFs to the guest. However, virtio_bus does not implement the num_vf callback of bus_type, causing dev_num_vf() to return 0 for virtio devices even when SR-IOV VFs are active. net/core/rtnetlink.c calls dev_num_vf(dev->dev.parent) to populate IFLA_NUM_VF in RTM_GETLINK responses. For a virtio-net device, dev.parent points to the virtio_device, whose busis virtio_bus. Without num_vf, SR-IOV VF information is silently omitted from tools that rely on rtnetlink, such as 'ip link show'. Add a num_vf callback that delegates to dev_num_vf(dev->parent), which in turn reaches the underlying transport (pci_bus_type for virtio-pci) where the actual VF count is tracked. Non-PCI transports are unaffected as dev_num_vf() returns 0 when no num_vf callback is present. Signed-off-by: Yui Washizu <yui.washidu@gmail.com> Signed-off-by: Michael S. Tsirkin <mst@redhat.com> Message-ID: <20260310061454.683894-1-yui.washidu@gmail.com>
This commit is contained in:
committed by
Michael S. Tsirkin
parent
7222e8c856
commit
82da84282c
@@ -435,6 +435,14 @@ static void virtio_dev_shutdown(struct device *_d)
|
||||
dev->config->reset(dev);
|
||||
}
|
||||
|
||||
static int virtio_dev_num_vf(struct device *dev)
|
||||
{
|
||||
struct virtio_device *vdev = dev_to_virtio(dev);
|
||||
|
||||
return dev_num_vf(vdev->dev.parent);
|
||||
}
|
||||
|
||||
|
||||
static const struct bus_type virtio_bus = {
|
||||
.name = "virtio",
|
||||
.match = virtio_dev_match,
|
||||
@@ -444,6 +452,7 @@ static const struct bus_type virtio_bus = {
|
||||
.remove = virtio_dev_remove,
|
||||
.irq_get_affinity = virtio_irq_get_affinity,
|
||||
.shutdown = virtio_dev_shutdown,
|
||||
.num_vf = virtio_dev_num_vf,
|
||||
};
|
||||
|
||||
int __register_virtio_driver(struct virtio_driver *driver, struct module *owner)
|
||||
|
||||
Reference in New Issue
Block a user