busdma - Remove filter functionality - Remove filtfunc and filtarg arguments from bus_dma_tag_create() and fix all callers. All callers use NULL today for both filterfunc and filterarg with one exception: if_jme. - Remove filter functionality internally and parent tag tracking. Without filter functions, we do not need to keep track of tag ancestry. All inheritance of the parent tag's parameters occurs when creating the new child tag. - rename run_filter() to addr_needs_bounce(). - FreeBSD keeps the filtfunc and filtarg arguments but requires them to be NULL. - Drop filterfunc usage from if_jme. In case of "JMC260 chip full mask revision 2", which has a hardware bug when it comes to DMA transfers crossing the 4 GB bounday, the parent buffer tag already limits DMA memory to 32bit address space. As such it should be safe to drop the filterfunc. The filterfunc was checking if the lower 32bits of the physical address used for DMA are all 0. In case of a 32bit address space, the only address where all lower 32-bits are all zero is 0 itself and I am here assuming that the physical address 0 is not used for DMA transfers! Mainly obtained from: FreeBSD (commits 7cb028de, 900907f4, 1228b93b, 3933ff56)
kernel - Revamp ifsq_watchdog*() a bit * Add a flags argument to ifsq_watchdog_init() and implement two flags: IF_WDOG_ALLTICKS Watchdog callback occurs each second prior to terminal count, and on terminal count. IF_WDOG_LASTTICK Watchdog callback occurs one second prior to terminal count, and on terminal count. 0 Watchdog callback only occurs on terminal count. Note that the ifnet lock is fully serialized when a watchdog callback is made, so generally speaking to avoid hicups you only want to use IF_WDOG_LASTTICK. * This feature allows the watchdog code to flush any tx buffers (call *_txeof()) that have completed transmission. Many NICs and virtual NICs don't bother to generate interrupts to clean-up such buffers when the rings are only lightly loaded. * Fix spurious vtnet watchdog events on lightly loaded vtnet interfaces, loosly using the same code that FreeBSD uses (just txeof from the second-prior watchdog callback and then check on terminal count).
igb: Free tx mbufs proactively. For 82575, which is earliest product of this product line, the RS bit is set on every packet's last TX desc by default, since in the 'head write back' mode, the content of TDH register does not move, if the content of the 'header', which is memory based, does not move. It is still allowed to reduce the density of RS TX descs, which will be useful for workloads w/o using sendfile. This is preparation for the dillon's upcoming sendfile patch.
igb: Optimize the aggregated TX/RX MSI-X handler a bit By checking whether there are any TX descs to collect or not, before holding the TX ring serializer. This requires that igb_txeof() is only called in interrupt handler, thus we remove the igb_txeof() from igb_start(), which does nothing most of the time. Removal of igb_txeof() from igb_start() also allows us to simplify the TX ring OACTIVE detection, so several unused water marks are also removed.
igb: Partly rework MSI-X support to bypass one serializer For aggregated TX/RX MSI-X handler, there is no need to use an independent serializer; using RX ring's serializer just works (well, this driver's MSI-X support was added when we still lacked of experience about how to serialize aggregated TX/RX MSI-X handler). Enable aggregated TX/RX MSI-X handling by default to avoid extra TX interrupt (though its pretty low for TCP streams).