Am Monday 27 April 2009 16:32:56 schrieb Michael S. Tsirkin:
> > I dont know, if that is feasible for MSI, but the transport(virtio_pci)
> > should
> > already know the number of virtqueues, which should match the number of
> > vectors, no?
>
> I think no, the transport can find out the max number of vectors the
> device supports (pci_msix_table_size), but not how many virtqueues are
> needed by the driver.
I was not talking about the number of vectors, but the number of real exisiting
virtqueues.
I just read virtio_pci again and yes,it would be a bit hard to get the number
of available virtqueues, because we need to loop over all possible vqs:
(something like)
for (i=0; i < SOMEMAX; i++) {
iowrite16(i, vp_dev->ioaddr + VIRTIO_PCI_QUEUE_SEL);
if (!ioread16(vp_dev->ioaddr + VIRTIO_PCI_QUEUE_NUM))
break;
}
return i;
which is obviously not very nice.
On the other hand, at the moment we have up to 3 virtqueues per device
(network), and we have a current maximum of 16 virtqeues in qemu
(VIRTIO_PCI_QUEUE_MAX in virtio.c), which would reduce the number.
> As number of virtqueues <= number of vectors,
> we could pre-allocate all vectors that host supports, but this seems
> a bit drastic as an MSI-X device could support up to 2K vectors.
>
> > In fact, the transport has to have a way of getting the number of virtqeues
> > because find_vq returns ENOENT on invalid index numbers.
> >
> > Christian
>
> So again, I think this is an upper bound supported by host. Right?
Not the upper bound, but the real available virtqueues. (With current qemu
3 for virtio-net, 2 for virtio-console etc.)
Since I use a different transport (drivers/s390/kvm/kvm_virtio.c), my
motiviation is to keep the virtio interface as generic as possible. I dont
really like the new interface, but I cannot give you silver bullet technical
reasons - its more a gut feeling. The interface would work with lguest and s390.
Anyway. Avis suggestion to decouple MSI count and virtqueue count looks
like a promising approach.
Christian
_______________________________________________
Virtualization mailing list
[email protected]
https://lists.linux-foundation.org/mailman/listinfo/virtualization