]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/commit
cxgbe(4): Separate the sw- and hw-specific parts of resource allocations
authorNavdeep Parhar <np@FreeBSD.org>
Mon, 26 Apr 2021 21:03:06 +0000 (14:03 -0700)
committerNavdeep Parhar <np@FreeBSD.org>
Wed, 20 Oct 2021 13:55:38 +0000 (06:55 -0700)
commit8ec8f56ce25b0bcb95bba5ae52d284bcbd88617e
tree7f31ab1b8193f1ec4437b63314425bc84ff3bee2
parentfc391b7a56d9b8eec3f1585397c8263923153442
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.

Sponsored by: Chelsio Communications

(cherry picked from commit 43bbae19483fbde0a91e61acad8a6e71e334c8b8)
sys/dev/cxgbe/adapter.h
sys/dev/cxgbe/t4_filter.c
sys/dev/cxgbe/t4_main.c
sys/dev/cxgbe/t4_netmap.c
sys/dev/cxgbe/t4_sched.c
sys/dev/cxgbe/t4_sge.c
sys/dev/cxgbe/tom/t4_cpl_io.c