- Move group task queue into kern/subr_gtaskqueue.c
- Change intr_enable to return an int so it can be detected if it's not implemented
- Allow different TX/RX queues per set to be different sizes
- Don't split up TX mbufs before transmit
- Allow a completion queue for TX as well as RX
- Pass the RX budget to isc_rxd_available() to allow an earlier return and avoid multiple calls
Tested with the bnxt driver, and a kernel-only make universe
Why did you initialize this to mp? Its only used in a fairly rare case, and then it is initialized to the second mbuf in the chain
The way you're storing ntxd introduces a lot of indirection in a number of fairly hot code paths. I'm commenting here, but that applies to the same use in lots of places.
Can you elaborate a bit on why all this indirection is needed? Can't you just store ntxd in the txq and not have to go through several layers of pointers to get it?
Why use the long form unless you're also going to use the tcp_lro_queue_mbuf() routine?
And if you are going to use that, then 64 is a bit small. I like to use at least 1024, or the ring size, whichever is smaller.