Move bwfm(4) from ifq begin/commit/rollback semantics to the newer
authorpatrick <patrick@openbsd.org>
Thu, 8 Feb 2018 05:00:38 +0000 (05:00 +0000)
committerpatrick <patrick@openbsd.org>
Thu, 8 Feb 2018 05:00:38 +0000 (05:00 +0000)
commit02ee7d07da1857d98989596627bda3894c3c7b1d
tree11484bd7651b08f285ef08d3bb317b8875ea0e37
parentb22cb45373aae27bc3cffba94d19889a99fbc31c
Move bwfm(4) from ifq begin/commit/rollback semantics to the newer
ifq dequeue semantics.  This basically means we need to check for
available space before dequeuing a packet.  As soon as we dequeue
a packet we commit to it.  On the PCIe backend this check can not
be done easily since the flowring depends on the packet contents and
we cannot take a peek.  When there is no flowring we cache the mbuf
and send it out as soon as the flowring opened up.  Then the ifq can
be restarted and traffic can flow.  Typically we usually run out of
packet ids, which can be checked without consulting the packet.  The
flowring probably never becomes full as the bwfm(4) firmware takes
the packets off the ring without actually sending them out.

Discussed with dlg@
sys/dev/ic/bwfm.c
sys/dev/ic/bwfmvar.h
sys/dev/pci/if_bwfm_pci.c
sys/dev/usb/if_bwfm_usb.c