HomeFreeBSD

cxgbe(4): Separate the sw- and hw-specific parts of resource allocations

Description

cxgbe(4): Separate the sw- and hw-specific parts of resource allocations

The driver uses both software resources (locks, callouts, memory for
descriptors and for bookkeeping, sysctls, etc.) and hardware resources
(VIs, DMA queues, TCAM entries, etc.) to operate the NIC. This commit
splits the single *_ALLOCATED flag used to track all these resources
into separate *_SW_ALLOCATED and *_HW_ALLOCATED flags.

This is the simplified pseudocode that now applies to most queues (foo
can be ctrlq/txq/rxq/ofld_txq/ofld_rxq):

/* Idempotent */
alloc_foo
{
if (!SW_ALLOCATED)

		init_iq/init_eq/init_fl		no-fail sw init
		alloc_iq_fl/alloc_eq/alloc_wrq	may-fail sw alloc
		add_foo_sysctls, etc.		no-fail post-alloc items

if (!HW_ALLOCATED)

		alloc_iq_fl_hwq/alloc_eq_hwq	hw resource allocation

}

/* Idempotent */
free_foo
{
if (!HW_ALLOCATED)

		free_iq_fl_hwq/free_eq_hwq	release hw resources

if (!SW_ALLOCATED)

		free_iq_fl/free_eq/free_wrq	release sw resources

}

The routines that take the driver to FULL_INIT_DONE and VI_INIT_DONE and
back are now all idempotent. The quiesce routines pay attention to the
HW_ALLOCATED flag and will not wait on the hardware for pidx/cidx
updates and other completions if this flag is not set.

MFC after: 1 month
Sponsored by: Chelsio Communications

Details

Provenance
npAuthored on Apr 26 2021, 9:03 PM
Parents
rGc70d1ef15db0: sctp: improve handling of illegal packets containing INIT chunks
Branches
Unknown
Tags
Unknown