summaryrefslogtreecommitdiffstats
path: root/sys/pci/if_wb.c
diff options
context:
space:
mode:
authorwpaul <wpaul@FreeBSD.org>1999-01-16 06:19:38 +0000
committerwpaul <wpaul@FreeBSD.org>1999-01-16 06:19:38 +0000
commit96171289530a831b5246275f4e0af3f292ce66d3 (patch)
tree438a657ec68bf0eab151615dd991fcba90a7c9f4 /sys/pci/if_wb.c
parent56728d4e237727b196316c8aadef045d29ec4ccd (diff)
downloadFreeBSD-src-96171289530a831b5246275f4e0af3f292ce66d3.zip
FreeBSD-src-96171289530a831b5246275f4e0af3f292ce66d3.tar.gz
Fix some stability problems:
- Normally, the driver allocates an mbuf cluster for each receive descriptor. This is because we have to be prepared to accomodate up to 1500 bytes (a cluster buffer can hold up to 2K). However, using up a whole cluster buffer for a tiny packet is a bit of a waste. Also, it seems to me that sometimes mbufs will linger in the kernel for a while after being passed out of the driver, which means we might drain the mbuf cluster pool. The cluster pool is smaller than the mbuf pool in general, so we do the following: if the packet is less that MINCLSIZE bytes, then we copy it into a small mbuf chain and leave the mbuf cluster in place for another go-round. This saves mbuf clusters in some cases while still allowing them to be used for heavy traffic exchanges with lots of full-sized frames. - The transmit descriptor has a bit in the control word which allows the driver to request that a 'TX OK' interrupt be generated when a frame has been completed. Sometimes, a frame can be fragmented across several descriptors. The manual for the real DEC 21140A says that if this happens, the 'TX interrupt request' bit is only valid in the descriptor of the last fragment. With the ASIX chip, it seems the 'TX interrupt request' bit is only valid in the descriptor of the _first_ fragment. Actually, the manual contains conflicting information, but I think it's supposed to be the first fragment. To play it safe, set the bit in both the first and last fragment to be sure that we get a TX OK interrupt. Without this fix, the driver can sometimes be late in releasing mbufs from the transmit queue after transmission.
Diffstat (limited to 'sys/pci/if_wb.c')
0 files changed, 0 insertions, 0 deletions
OpenPOWER on IntegriCloud