]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/commit
vtnet: fix netmap support
authorvmaffione <vmaffione@FreeBSD.org>
Wed, 14 Nov 2018 15:39:48 +0000 (15:39 +0000)
committervmaffione <vmaffione@FreeBSD.org>
Wed, 14 Nov 2018 15:39:48 +0000 (15:39 +0000)
commitf890a8008b0535f79db623b9142d7b1b5bf026b3
tree3fdea647fa94735642742998d5be715c43f47b01
parent07ad6a8d9eb7bf8f38768eacbf9404270d64b593
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
sys/dev/netmap/if_vtnet_netmap.h
sys/dev/virtio/network/if_vtnet.c
sys/dev/virtio/network/if_vtnetvar.h