FreeBSD revision r291699 introduced the use of busdma to mlx4,
and as a simplification removed the use of packet "fragments" in
the receive path. Instead, the driver attempts to allocate 9KB
mbuf clusters. However, under memory pressure allocating more
than 1 page's worth of contiguous physical memory can be extremely
CPU intensive, and in certain cases impossible. This means that
mlx4_en is prone to starving other threads of CPU time, and at
times network connectivity is lost entirely.
Fix this by restoring the use of packet fragments to mlx4_en.
This ensures that the driver never tries to allocate more than
1 page at a time, avoiding the pathological VM behaviour.
Also remove the allocation of a "spare" mbuf from the rx path.
Reconciling this feature with packet fragments was difficult, its
existance complicated the receive path, and it provides no benefit
outside of highly contrived scenarios.