HomeFreeBSD

vtnet: fix netmap support

Description

vtnet: fix netmap support

netmap(4) support for vtnet(4) was incomplete and had multiple bugs.
This commit fixes those bugs to bring netmap on vtnet in a functional state.

Changelist:

  • handle errors returned by virtqueue_enqueue() properly (they were previously ignored)
  • make sure netmap XOR rest of the kernel access each virtqueue.
  • compute the number of netmap slots for TX and RX separately, according to whether indirect descriptors are used or not for a given virtqueue.
  • make sure sglist are freed according to their type (mbufs or netmap buffers)
  • add support for mulitiqueue and netmap host (aka sw) rings.
  • intercept VQ interrupts directly instead of intercepting them in txq_eof and rxq_eof. This simplifies the code and makes it easier to make sure taskqueues are not running for a VQ while it is in netmap mode.
  • implement vntet_netmap_config() to cope with changes in the number of queues.

Reviewed by: bryanv
Approved by: gnn (mentor)
MFC after: 3 days
Sponsored by: Sunny Valley Networks
Differential Revision: https://reviews.freebsd.org/D17916

Details

Provenance
vmaffioneAuthored on
Reviewer
bryanv
Differential Revision
D17916: vtnet: fix netmap support
Parents
rS340435: Prevent POLA violation with TSO/CSUM offload
Branches
Unknown
Tags
Unknown