iflib: Free resources in a consistent order during detach
Memory and PCI resources are freed with no particular order. This could
cause use-after-frees when detaching following a failed attach. For
instance, iflib_tx_structures_free() frees ctx->ifc_txqs but
iflib_tqg_detach() attempts to access this array. Similarly, adapter
queues gets freed by IFDI_QUEUES_FREE() but IFDI_DETACH() attempts to
access adapter queues to free PCI resources.
Sponsored by: NetApp, Inc.
Differential Revision: https://reviews.freebsd.org/D27634
(cherry picked from commit 38bfc6dee33bedb290e1ea2540f97a86fe3caee0)