commit f20796f48281634187551ac142558fffda2902ae
parent b208265bdfdc34f25d130a197d624b36ab842727
Author: Broadcom SDK Release <sdk.releases@broadcom.com>
Date: Wed, 15 May 2019 18:28:00 -0700
SDK-178915: Root cause: In one of the bucket split scenario, a new L1 pivot ...
Devices: 56980_A0,56980_B0,AllChips
Module: ALPM
Symptom:
ALPM error messages in syslog followed by crash #0 0xf4e4e478 in
_trie_inorder_traverse () from /lib/libbcmsdk.so #1 0xf4e4e482 in
_trie_inorder_traverse () from /lib/libbcmsdk.so #2 0xf4e4e482 in
_trie_inorder_traverse () from /lib/libbcmsdk.so #3 0xf4e4e482 in
_trie_inorder_traverse () from /lib/libbcmsdk.so #4 0xf4e4b850 in
bcm_esw_alpm_pvt_traverse () from /lib/libbcmsdk.so #5 0xf4e4d778 in
alpm_hitbit_gather () from /lib/libbcmsdk.so #6 0xf4e4dc6a in
alpm_dist_hitbit_thread () from /lib/libbcmsdk.so
Root cause: In one of the bucket split scenario, a new L1 pivot was
generated and became the LPM pivot of new insertion, previously, we
still use the old L1 pivot, now we force it to redo the lookup and the
new L1 pivot can be the LPM pivot. This is why in old version some L2
bucket couldn't find from the supposed LPM L1 pivot, and causing
alpm_pvt_update issue. Fix: In alpm_cb_pvt_add(), after bucket
split, set lpm_cfg->l1_pvt_node = NULL; to allow the lookup of new
LPM pivot.
Diffstat:
1 file changed, 1 insertion(+), 0 deletions(-)
diff --git a/sdk-6.5.16/src/bcm/esw/alpm2/alpm.c b/sdk-6.5.16/src/bcm/esw/alpm2/alpm.c
@@ -2973,6 +2973,7 @@ retry:
if (BCM_SUCCESS(rv)) {
lpm_cfg->spl_pn = NULL;
lpm_cfg->spl_key_len = 0;
+ lpm_cfg->l1_pvt_node = NULL;
/* PERF OPT point */
goto retry;
}