Bug 213201

Summary: [bhyve] virtio-net requires more than one descriptor per tx operation
Product: Base System Reporter: Ricardo Koller <ricarkol>
Component: miscAssignee: freebsd-virtualization (Nobody) <virtualization>
Status: New ---    
Severity: Affects Some People CC: grehan, martin
Priority: ---    
Version: CURRENT   
Hardware: Any   
OS: Any   

Description Ricardo Koller 2016-10-04 18:05:16 UTC
Hello,

We noticed that the Tx path for bhyve virtio-net devices (pci_virtio_net.c:pci_vtnet_proctx) assumes that all Tx'es will have a first descriptor with the header alone (https://svnweb.freebsd.org/base/head/usr.sbin/bhyve/pci_virtio_net.c?view=markup#l609):

	sc->pci_vtnet_tx(sc, &iov[1], n - 1, plen); // Skips the header descriptor

The issue is that the virtio 1.0 specification allows for having the net header and the data in a single descriptor. See section 5.1.6.2 of the virtio spec (http://docs.oasis-open.org/virtio/virtio/v1.0/cs04/virtio-v1.0-cs04.html#x1-1680006).

Thanks,
Ricardo
Comment 1 Peter Grehan freebsd_committer 2016-10-05 21:29:49 UTC
Since bhyve doesn't advertize v1.0 support, is this still an issue ?
Comment 2 Ricardo Koller 2016-10-07 23:33:13 UTC
The oldest virtio spec I could find online is 0.9.4 (http://ozlabs.org/~rusty/virtio-spec/old/virtio-0.9.4.pdf). The section about how to add descriptors to the ring is the same as in 1.0 (section 2.4.1).
Comment 3 Ricardo Koller 2016-10-07 23:35:24 UTC
Same thing for 0.8.7. ozlabs.org/~rusty/virtio-spec/old/virtio-spec-0.8.7.pdf