The aim here is to permit mbuf allocations after a panic without
calling into the page allocator, without imposing any runtime overhead
during regular operation of the system, and without modifying driver
code. The approach taken is to pre-allocate a number of mbufs and
clusters, storing them in linked lists. The lists back a set of UMA
cache zones which replace the regular mbuf/cluster UMA zones. At panic
time, the zone pointers are overwritten with those of the cache zones,
so m_get() and so on return mbufs from the linked lists.
The main complication is that a few drivers (cxgb and iflib) cache mbuf
zone pointers from m_getzone(), so they need some special handling.