On Mon, Mar 9, 2026 at 10:37 AM Yui Washizu <[email protected]> wrote: > > 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 and IFLA_VFINFO_LIST
Patch looks good but, If I understand correctly, ndo_get_vf_config is needed for IFLA_VFINFO_LIST but not implemeted in this patch? > in RTM_GETLINK responses. For a > virtio-net device, dev.parent points to the virtio_device, whose bus > is 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 <[email protected]> > --- > drivers/virtio/virtio.c | 9 +++++++++ > 1 file changed, 9 insertions(+) > > diff --git a/drivers/virtio/virtio.c b/drivers/virtio/virtio.c > index 5bdc6b82b30b..299fa83be1d5 100644 > --- a/drivers/virtio/virtio.c > +++ b/drivers/virtio/virtio.c > @@ -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) > -- > 2.47.3 > Thanks
