diff options
| author | Nick Price <nprice@FreeBSD.org> | 2026-08-31 23:16:12 +0000 |
|---|---|---|
| committer | Nick Price <nprice@FreeBSD.org> | 2026-08-31 23:18:42 +0000 |
| commit | 742c5498aca9a9a31a68eb9d5888edf36b7034dd (patch) | |
| tree | 2480dadfe7943d1d3fc02494772e644ff1d44362 /mvm/tests | |
| parent | 533918ced28ccd3b6ce22c93e0b64deac40377a1 (diff) | |
FreeBSD's bxe hardwires CNIC_SUPPORT() to 0, so bxe_ilt_set_info()
never enters the block that initializes the SRC and TM ILT clients.
Those two clients are left zeroed (page_size 0, flags 0), yet
ecore_ilt_init_page_size() calls ecore_ilt_init_client_psz() for all
four clients unconditionally. For SRC and TM that evaluates
ILOG2(page_size >> 12), i.e. ilog2(0). On an INVARIANTS kernel ilog2()
asserts "ilog argument must be nonzero" and panics the machine the
first time the interface is brought up (bxe_init -> bxe_nic_load ->
bxe_init_hw -> ecore_ilt_init_page_size). On a non-INVARIANTS kernel
it silently programs a bogus page-size register instead.
Restore the else branch that upstream Linux bnx2x carries: when CNIC
is not supported, mark the SRC and TM clients with ILT_CLIENT_SKIP_INIT
and ILT_CLIENT_SKIP_MEM so ecore_ilt_init_client_psz() skips them.
Root-caused from a crash dump on a BCM57810 (device 0x168e): the ILT
clients showed CDU and QM populated and SRC and TM zeroed with no skip
flag set.
Reviewed by: adrian
Approved by: adrian (mentor)
Differential Revision: https://reviews.freebsd.org/D58587
Signed-off-by: Nick Price <nprice@FreeBSD.org>
Diffstat (limited to 'mvm/tests')
0 files changed, 0 insertions, 0 deletions
