This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] TDA4VE-Q1:由于 ALE 损坏、CPSW 以太网在 Linux 上随机失败

Guru**** 2358920 points
Other Parts Discussed in Thread: J721EXCPXEVM, J721S2XSOMXEVM, TDA4VM
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1479969/tda4ve-q1-cpsw-ethernet-randomly-fails-on-linux-due-to-ale-corruption

器件型号:TDA4VE-Q1
主题中讨论的其他器件:J721EXCPXEVMJ721S2XSOMXEVMTDA4VM

工具/软件:

在我们客户的一个网络中、我们注意到 TDA4VE 上的 CPSW 以太网在夜间运行时往往会停止接收帧。 链路保持正常、但无法接收到帧、问题的主要符号是 p0_ALE_vid_negoti_drop 以与 p0_rx_good_frames 相同的速率计数。 我们已将其隔离到驱动程序更新 ALE 表时出现的问题。 通常、该表如下所示:

root@j721s2-evm:~# switch-config -d
K3 cpsw dump version (1) len(6328)
ALE table dump ents(64):
0   : type: vlan , vid = 0, untag_force = 0x3, reg_mcast = 0x0, unreg_mcast = 0x0, member_list = 0x3
1   : type: ucast, addr = 34:08:e1:81:8c:ef, ucast_type = persistant, port_num = 0x0, Secure
2   : type: mcast, vid = 0, addr = ff:ff:ff:ff:ff:ff, mcast_state = f, no super, port_mask = 0x3
3   : type: mcast, addr = 33:33:00:00:00:01, mcast_state = f, no super, port_mask = 0x1
4   : type: mcast, addr = 01:00:5e:00:00:01, mcast_state = f, no super, port_mask = 0x1
5   : type: mcast, addr = 01:80:c2:00:00:0e, mcast_state = f, no super, port_mask = 0x1
6   : type: mcast, addr = 01:80:c2:00:00:03, mcast_state = f, no super, port_mask = 0x1
7   : type: mcast, addr = 01:80:c2:00:00:00, mcast_state = f, no super, port_mask = 0x1
8   : type: mcast, addr = 33:33:ff:81:8c:ef, mcast_state = f, no super, port_mask = 0x1
9   : type: mcast, addr = 01:00:5e:00:00:fb, mcast_state = f, no super, port_mask = 0x1
10  : type: mcast, addr = 33:33:00:00:00:fb, mcast_state = f, no super, port_mask = 0x1
11  : type: mcast, addr = 01:00:5e:00:ab:cd, mcast_state = f, no super, port_mask = 0x1
12  : type: mcast, addr = 01:00:5e:00:cd:ab, mcast_state = f, no super, port_mask = 0x1

请注意、条目0由 VLAN 类型条目填充。 当接口停止工作时、如下所示:

root@j721s2-evm:~# switch-config -d
K3 cpsw dump version (1) len(6328)
ALE table dump ents(64):
0   : type: mcast, addr = 33:33:00:00:00:01, mcast_state = f, no super, port_mask = 0x1
1   : type: ucast, addr = 34:08:e1:81:8c:ef, ucast_type = persistant, port_num = 0x0, Secure
2   : type: mcast, vid = 0, addr = ff:ff:ff:ff:ff:ff, mcast_state = f, no super, port_mask = 0x3
3   : type: mcast, addr = 01:00:5e:00:00:01, mcast_state = f, no super, port_mask = 0x1
4   : type: mcast, addr = 01:80:c2:00:00:0e, mcast_state = f, no super, port_mask = 0x1
5   : type: mcast, addr = 01:80:c2:00:00:03, mcast_state = f, no super, port_mask = 0x1
6   : type: mcast, addr = 01:80:c2:00:00:00, mcast_state = f, no super, port_mask = 0x1
7   : type: mcast, addr = 33:33:ff:81:8c:ef, mcast_state = f, no super, port_mask = 0x1
8   : type: mcast, addr = 01:00:5e:00:00:fb, mcast_state = f, no super, port_mask = 0x1
9   : type: mcast, addr = 33:33:00:00:00:fb, mcast_state = f, no super, port_mask = 0x1
10  : type: mcast, addr = 01:00:5e:00:34:12, mcast_state = f, no super, port_mask = 0x1
11  : type: mcast, addr = 01:00:5e:00:cd:ab, mcast_state = f, no super, port_mask = 0x1

现在、条目0中填充了 mcast 类型条目、并且表中没有 VLAN 类型条目。

我们可以在 J721S2XSOMXEVM + J721EXCPXEVM 上重现此问题。 使用此电路板和从 PROCESSOR-SDK-LINUX J721S2-J721S2版本10.01.00.04中新刷写的 SD 卡、此脚本通常会在1-2小时内重现问题:

# insert shebang here
while true; do
/sbin/ip maddr add 01:00:5e:00:ab:cd dev eth0 &
/sbin/ip maddr add 01:00:5e:00:12:34 dev eth0 &
/sbin/ip maddr add 01:00:5e:00:cd:ab dev eth0 &
/sbin/ip maddr add 01:00:5e:00:34:12 dev eth0 &
/sbin/ip maddr del 01:00:5e:00:ab:cd dev eth0 &
/sbin/ip maddr del 01:00:5e:00:12:34 dev eth0 &
/sbin/ip maddr del 01:00:5e:00:cd:ab dev eth0 &
/sbin/ip maddr del 01:00:5e:00:34:12 dev eth0 &
wait
done

在电路板上运行此脚本时、对电路板执行 Ping 操作、然后等待其停止响应。

有时、脚本不会中断接口、而是在索引32处插入 VLAN 条目。

该问题听起来像 LCPD-38070、但只有 j721e-hsevm 列为受影响。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    上调以进行更新。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、

    让我在我的设置过夜尝试一下,然后返回给你。

    此致、
    Tanmay

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    嗨、Tanmay、您是否有任何更新? 我们有客户正在等待这个项目,谢谢!

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、

    很抱歉耽误你的时间。

    我无法在我的设置中看到此错误。

    您能否应用以下补丁并运行测试? 如果有人正在删除 VLAN 0条目、我们将能够由谁来执行此操作。 请在测试过程中保存整个日志文件以跟踪 VLAN 0条目

    e2e.ti.com/.../ale_2D00_vlan_2D00_notify_2D00_debug_2D00_prints.diff

    此致、
    Tanmay

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Tanmay、

    我修补了我的内核并重现了问题、但添加的调试消息仅在接口启动时显示 VLAN 0的添加。

    [    3.517234] [MCAST DEBUG]: Adding VLAN 0 at index 0
    [    3.517272] ------------[ cut here ]------------
    [    3.517275] WARNING: CPU: 0 PID: 318 at drivers/net/ethernet/ti/cpsw_ale.c:653 cpsw_ale_add_vlan+0x24c/0x254
    [    3.517298] Modules linked in: rpmsg_videobuf rpmsg_ctrl rpmsg_char crct10dif_ce csi_vc_source ti_k3_r5_remoteproc(+) ti_k3_dsp_remoteproc m_can_platform virtio_rpmsg_bus rpmsg_ns pvrsrvkm(O) m_can cdns_mhdp8546 can_dev ti_k3_common drm_display_helper wave5 v4l2_mem2mem cryptodev(O) fuse ipv6
    [    3.517345] CPU: 0 PID: 318 Comm: systemd-network Tainted: G           O       6.1.80-ti-gac253d710e5a #1
    [    3.517351] Hardware name: Texas Instruments J721S2 EVM (DT)
    [    3.517354] pstate: 60000005 (nZCv daif -PAN -UAO -TCO -DIT -SSBS BTYPE=--)
    [    3.517359] pc : cpsw_ale_add_vlan+0x24c/0x254
    [    3.517365] lr : cpsw_ale_add_vlan+0x24c/0x254
    [    3.517369] sp : ffff80000a38b4c0
    [    3.517371] x29: ffff80000a38b4e0 x28: ffff000832068000 x27: ffff800009352858
    [    3.517378] x26: 0000000000000002 x25: ffff80000a38b4c0 x24: 0000000000000002
    [    3.517385] x23: 0000000000000003 x22: 0000000000000003 x21: 0000000000000000
    [    3.517391] x20: ffff00082c227680 x19: 0000000000000000 x18: ffffffffffffffff
    [    3.517397] x17: 0000000000000000 x16: 0000000000000000 x15: ffff800009300831
    [    3.517402] x14: 0000000000000000 x13: ffff8000091d1560 x12: 0000000000000579
    [    3.517408] x11: 00000000000001d3 x10: ffff800009229560 x9 : ffff8000091d1560
    [    3.517414] x8 : 00000000ffffefff x7 : ffff800009229560 x6 : 0000000000000000
    [    3.517420] x5 : ffff00085f99db60 x4 : ffff00085f99db60 x3 : 0000000000000000
    [    3.517426] x2 : 0000000000000000 x1 : ffff000832068000 x0 : 0000000000000027
    [    3.517432] Call trace:
    [    3.517436]  cpsw_ale_add_vlan+0x24c/0x254
    [    3.517441]  am65_cpsw_nuss_ndo_slave_open+0x25c/0x560
    [    3.517447]  __dev_open+0xf4/0x1e0
    [    3.517454]  __dev_change_flags+0x198/0x210
    [    3.517458]  dev_change_flags+0x24/0x64
    [    3.517463]  do_setlink+0x214/0xe60
    [    3.517468]  rtnl_setlink+0xe4/0x180
    [    3.517472]  rtnetlink_rcv_msg+0x130/0x3a0
    [    3.517476]  netlink_rcv_skb+0x60/0x130
    [    3.517484]  rtnetlink_rcv+0x18/0x2c
    [    3.517488]  netlink_unicast+0x2f0/0x360
    [    3.517493]  netlink_sendmsg+0x1b0/0x420
    [    3.517498]  __sys_sendto+0x138/0x174
    [    3.517505]  __arm64_sys_sendto+0x28/0x3c
    [    3.517510]  invoke_syscall+0x48/0x114
    [    3.517517]  el0_svc_common.constprop.0+0xd4/0xfc
    [    3.517522]  do_el0_svc+0x20/0x30
    [    3.517526]  el0_svc+0x28/0xa0
    [    3.517532]  el0t_64_sync_handler+0xbc/0x140
    [    3.517537]  el0t_64_sync+0x18c/0x190
    [    3.517543] ---[ end trace 0000000000000000 ]---

    尽管如此、我们可以看到 VLAN 0在一段时间后消失了:

    K3 cpsw dump version (1) len(6328)
    ALE table dump ents(64):
    0   : type: mcast, addr = 33:33:00:00:00:01, mcast_state = f, no super, port_mask = 0x1
    1   : type: ucast, addr = 64:1c:10:2d:c0:81, ucast_type = persistant, port_num = 0x0, Secure
    2   : type: mcast, vid = 0, addr = ff:ff:ff:ff:ff:ff, mcast_state = f, no super, port_mask = 0x3
    3   : type: mcast, addr = 01:00:5e:00:00:01, mcast_state = f, no super, port_mask = 0x1
    4   : type: mcast, addr = 01:80:c2:00:00:00, mcast_state = f, no super, port_mask = 0x1
    5   : type: mcast, addr = 01:80:c2:00:00:03, mcast_state = f, no super, port_mask = 0x1
    6   : type: mcast, addr = 01:80:c2:00:00:0e, mcast_state = f, no super, port_mask = 0x1
    7   : type: mcast, addr = 01:00:5e:00:00:fc, mcast_state = f, no super, port_mask = 0x1
    8   : type: mcast, addr = 01:1b:19:00:00:00, mcast_state = f, no super, port_mask = 0x1
    9   : type: mcast, addr = 01:00:5e:00:ab:cd, mcast_state = f, no super, port_mask = 0x1

    随附完整的 dmesg 供您参考。 这是基于09.02.00.05版本的旧内核、因为我目前无法访问 J721EXCPXEVM 板、但驱动程序足够近、可以完全应用补丁。

    e2e.ti.com/.../8715.dmesg.txt

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、

    这是非常奇怪的,没有任何机构正在删除 VLAN 0。

    您可以尝试这个补丁吗? 这里将显示是否有人正在写入 ALE 条目0。

    diff --git a/drivers/net/ethernet/ti/cpsw_ale.c b/drivers/net/ethernet/ti/cpsw_ale.c
    index 33134ef42..f775722bb 100644
    --- a/drivers/net/ethernet/ti/cpsw_ale.c
    +++ b/drivers/net/ethernet/ti/cpsw_ale.c
    @@ -330,6 +330,7 @@ static int cpsw_ale_write(struct cpsw_ale *ale, int idx, u32 *ale_entry)
     {
     	int i;
     
    +
     	WARN_ON(idx > ale->params.ale_entries);
     
     	for (i = 0; i < ALE_ENTRY_WORDS; i++)
    @@ -339,6 +340,11 @@ static int cpsw_ale_write(struct cpsw_ale *ale, int idx, u32 *ale_entry)
     	writel_relaxed(idx | ALE_TABLE_WRITE, ale->params.ale_regs +
     		       ALE_TABLE_CONTROL);
     
    +	if (idx == 0) {
    +		printk("Writing to ALE entry 0!!! \n");
    +		WARN_ON(1);
    +	}	
    +
     	return idx;
     }
     
    

    此致、
    Tanmay

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    在对问题进行调试时、想知道是否有一种快速的方法可以绕过 ALE/HW 卸载来实现短期的权变措施。

    您还能根据您的设置建议 SDK 版本吗?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、

    您还能在您的设置中建议 SDK 版本吗?

    我正在为我的设置使用 SDK 10.1

    [引述 userid="646659" url="~/support/processors-group/processors/f/processors-forum/1479969/tda4ve-q1-cpsw-ethernet-randomly-fails-on-linux-due-to-ale-corruption/5715491 #5715491"]

    在对问题进行调试时、想知道是否有一种快速的方法可以绕过 ALE/HW 卸载来实现短期的权变措施。

    [/报价]

    是的、您可设置寄存器0x4603E008中的位4。

    此致、
    Tanmay

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、

    我正在尝试该补丁、但它会大量地浪费内核日志。

    添加 mcast 条目:

    [ 2902.608227] Writing to ALE entry 0!!!
    [ 2902.608269] ------------[ cut here ]------------
    [ 2902.608272] WARNING: CPU: 1 PID: 3540 at drivers/net/ethernet/ti/cpsw_ale.c:345 cpsw_ale_write.isra.0+0x68/0x80
    [ 2902.608298] Modules linked in: usb_f_ncm u_ether libcomposite rpmsg_videobuf rpmsg_ctrl rpmsg_char crct10dif_ce csi_vc_source ti_k3_r5_remoteproc m_can_platform m_can can_dev cdns_mhdp8546 drm_display_helper ti_k3_dsp_remoteproc virtio_rpmsg_bus rpmsg_ns pvrsrvkm(O) ti_k3_common wave5 v4l2_mem2mem cryptodev(O) fuse ipv6
    [ 2902.608348] CPU: 1 PID: 3540 Comm: ip Tainted: G        W  O       6.1.80-ti-gac253d710e5a #1
    [ 2902.608354] Hardware name: Texas Instruments J721S2 EVM (DT)
    [ 2902.608357] pstate: 60000005 (nZCv daif -PAN -UAO -TCO -DIT -SSBS BTYPE=--)
    [ 2902.608362] pc : cpsw_ale_write.isra.0+0x68/0x80
    [ 2902.608367] lr : cpsw_ale_write.isra.0+0x68/0x80
    [ 2902.608372] sp : ffff80000e0cbb50
    [ 2902.608374] x29: ffff80000e0cbb50 x28: ffff0008319d4740 x27: 0000000000000000
    [ 2902.608381] x26: 0000000000000000 x25: ffff80000e0cbd00 x24: ffff800008c9d268
    [ 2902.608388] x23: 0000000000000002 x22: 0000000000000000 x21: 0000000000000001
    [ 2902.608395] x20: 0000000000000000 x19: ffff00082c21a880 x18: 0000000000000028
    [ 2902.608401] x17: 0000000000000000 x16: 0000000000000000 x15: 0000000000720b78
    [ 2902.608407] x14: ffffffffffffffff x13: ffff8000091d1560 x12: 0000000000002a00
    [ 2902.608413] x11: 0000000000000e00 x10: ffff80000923e560 x9 : ffff8000091d1560
    [ 2902.608419] x8 : 000000010001ae00 x7 : ffff800009229560 x6 : 0000000000015000
    [ 2902.608425] x5 : ffff00085f9b1b60 x4 : ffff00085f9b1b60 x3 : 0000000000000000
    [ 2902.608431] x2 : 0000000000000000 x1 : ffff0008319d4740 x0 : 000000000000001a
    [ 2902.608437] Call trace:
    [ 2902.608441]  cpsw_ale_write.isra.0+0x68/0x80
    [ 2902.608446]  cpsw_ale_set_allmulti+0xf4/0x1a0
    [ 2902.608452]  am65_cpsw_nuss_ndo_slave_set_rx_mode+0x84/0xf0
    [ 2902.608456]  __dev_set_rx_mode+0x68/0xa4
    [ 2902.608464]  dev_mc_add_global+0x8c/0xb0
    [ 2902.608469]  dev_ifsioc+0x214/0x50c
    [ 2902.608478]  dev_ioctl+0x184/0x5b0
    [ 2902.608482]  sock_do_ioctl+0xc0/0x100
    [ 2902.608490]  sock_ioctl+0x244/0x354
    [ 2902.608494]  __arm64_sys_ioctl+0xa8/0xf0
    [ 2902.608504]  invoke_syscall+0x48/0x114
    [ 2902.608511]  el0_svc_common.constprop.0+0xd4/0xfc
    [ 2902.608515]  do_el0_svc+0x20/0x30
    [ 2902.608520]  el0_svc+0x28/0xa0
    [ 2902.608527]  el0t_64_sync_handler+0xbc/0x140
    [ 2902.608532]  el0t_64_sync+0x18c/0x190
    [ 2902.608537] ---[ end trace 0000000000000000 ]---

    删除 mcast 条目:

    [ 2935.627796] Writing to ALE entry 0!!!
    [ 2935.627839] ------------[ cut here ]------------
    [ 2935.627842] WARNING: CPU: 0 PID: 3541 at drivers/net/ethernet/ti/cpsw_ale.c:345 cpsw_ale_write.isra.0+0x68/0x80
    [ 2935.627869] Modules linked in: usb_f_ncm u_ether libcomposite rpmsg_videobuf rpmsg_ctrl rpmsg_char crct10dif_ce csi_vc_source ti_k3_r5_remoteproc m_can_platform m_can can_dev cdns_mhdp8546 drm_display_helper ti_k3_dsp_remoteproc virtio_rpmsg_bus rpmsg_ns pvrsrvkm(O) ti_k3_common wave5 v4l2_mem2mem cryptodev(O) fuse ipv6
    [ 2935.627916] CPU: 0 PID: 3541 Comm: ip Tainted: G        W  O       6.1.80-ti-gac253d710e5a #1
    [ 2935.627922] Hardware name: Texas Instruments J721S2 EVM (DT)
    [ 2935.627926] pstate: 60000005 (nZCv daif -PAN -UAO -TCO -DIT -SSBS BTYPE=--)
    [ 2935.627931] pc : cpsw_ale_write.isra.0+0x68/0x80
    [ 2935.627936] lr : cpsw_ale_write.isra.0+0x68/0x80
    [ 2935.627941] sp : ffff80000e0d3b50
    [ 2935.627943] x29: ffff80000e0d3b50 x28: ffff000831a6b900 x27: 0000000000000000
    [ 2935.627950] x26: 0000000000000000 x25: ffff80000e0d3d00 x24: ffff800008c9d268
    [ 2935.627957] x23: 0000000000000002 x22: 0000000000000000 x21: 0000000000000001
    [ 2935.627964] x20: 0000000000000000 x19: ffff00082c21a880 x18: 0000000000000028
    [ 2935.627970] x17: 0000000000000000 x16: 0000000000000000 x15: 0000000000721500
    [ 2935.627977] x14: ffffffffffffffff x13: ffff8000091d1560 x12: 0000000000002a72
    [ 2935.627983] x11: 0000000000000e26 x10: ffff80000923e8f0 x9 : ffff8000091d1560
    [ 2935.627990] x8 : 000000010001ae26 x7 : ffff800009229560 x6 : 0000000000015390
    [ 2935.627996] x5 : ffff00085f99db60 x4 : ffff00085f99db60 x3 : 0000000000000000
    [ 2935.628002] x2 : 0000000000000000 x1 : ffff000831a6b900 x0 : 000000000000001a
    [ 2935.628009] Call trace:
    [ 2935.628012]  cpsw_ale_write.isra.0+0x68/0x80
    [ 2935.628017]  cpsw_ale_set_allmulti+0xf4/0x1a0
    [ 2935.628022]  am65_cpsw_nuss_ndo_slave_set_rx_mode+0x84/0xf0
    [ 2935.628027]  __dev_set_rx_mode+0x68/0xa4
    [ 2935.628034]  dev_mc_del_global+0x84/0xa4
    [ 2935.628040]  dev_ifsioc+0x360/0x50c
    [ 2935.628047]  dev_ioctl+0x184/0x5b0
    [ 2935.628051]  sock_do_ioctl+0xc0/0x100
    [ 2935.628058]  sock_ioctl+0x244/0x354
    [ 2935.628063]  __arm64_sys_ioctl+0xa8/0xf0
    [ 2935.628072]  invoke_syscall+0x48/0x114
    [ 2935.628079]  el0_svc_common.constprop.0+0xd4/0xfc
    [ 2935.628084]  do_el0_svc+0x20/0x30
    [ 2935.628088]  el0_svc+0x28/0xa0
    [ 2935.628095]  el0t_64_sync_handler+0xbc/0x140
    [ 2935.628100]  el0t_64_sync+0x18c/0x190
    [ 2935.628104] ---[ end trace 0000000000000000 ]---

    我更改了补丁以避免 cpsw_ale_set_allmulti 发送垃圾邮件。

    e2e.ti.com/.../ale_2D00_zero_2D00_index_2D00_writes_2D00_2.diff

    内核保持安静、直到 VLAN 0条目消失。 然后、它将所有内容泛洪得如此之快、以至于我无法捕获第一个堆栈:

    e2e.ti.com/.../logtest_2D00_2.txt

    我将尝试捕捉它的开始,但也许我收集到的信息到目前为止是有趣的。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    我再次复制并设法捕获打印的第一个堆栈:

    Apr 28 21:57:13 kernel: Writing to ALE entry 0!!!
    Apr 28 21:57:13 kernel: ------------[ cut here ]------------
    Apr 28 21:57:13 kernel: WARNING: CPU: 1 PID: 1999765 at drivers/net/ethernet/ti/cpsw_ale.c:344 cpsw_ale_write.isra.0+0x68/0x80
    Apr 28 21:57:13 kernel: Modules linked in: usb_f_ncm u_ether libcomposite rpmsg_videobuf rpmsg_ctrl rpmsg_char crct10dif_ce csi_vc_source ti_k3_r5_remoteproc m_can_platform m_can can_dev pvrsrvkm(O) cdns_mhdp8546 ti_k3_dsp_remoteproc virtio_rpmsg_bus drm_display_helper rpmsg_ns ti_k3_common wave5 v4l2_mem2mem cryptodev(O) fuse ipv6
    Apr 28 21:57:13 kernel: CPU: 1 PID: 1999765 Comm: ip Tainted: G        W  O       6.1.80-ti-gac253d710e5a #1
    Apr 28 21:57:13 kernel: Hardware name: Texas Instruments J721S2 EVM (DT)
    Apr 28 21:57:13 kernel: pstate: 60000005 (nZCv daif -PAN -UAO -TCO -DIT -SSBS BTYPE=--)
    Apr 28 21:57:13 kernel: pc : cpsw_ale_write.isra.0+0x68/0x80
    Apr 28 21:57:13 kernel: lr : cpsw_ale_write.isra.0+0x68/0x80
    Apr 28 21:57:13 kernel: sp : ffff80001d693b40
    Apr 28 21:57:13 kernel: x29: ffff80001d693b40 x28: ffff00082c0e5580 x27: 0000000000000000
    Apr 28 21:57:13 kernel: x26: 0000000000000000 x25: ffff0008302b61a8 x24: 0000000010000000
    Apr 28 21:57:13 kernel: x23: ffff00082c211e80 x22: ffff80001d693b50 x21: 0000000000000000
    Apr 28 21:57:13 kernel: x20: 0000000000000001 x19: 0000000000000000 x18: 0000000000000028
    Apr 28 21:57:13 kernel: x17: 0000000000000000 x16: 0000000000000000 x15: fffffffffffea6e0
    Apr 28 21:57:13 kernel: x14: ffffffffffffffff x13: ffff8000091d1560 x12: 000000000000068a
    Apr 28 21:57:13 kernel: x11: 000000000000022e x10: ffff800009229560 x9 : ffff8000091d1560
    Apr 28 21:57:13 kernel: x8 : 00000000ffffefff x7 : ffff800009229560 x6 : 0000000000000000
    Apr 28 21:57:13 kernel: x5 : ffff00085f9b1b60 x4 : ffff00085f9b1b60 x3 : 0000000000000000
    Apr 28 21:57:13 kernel: x2 : 0000000000000000 x1 : ffff00082c0e5580 x0 : 000000000000001a
    Apr 28 21:57:13 kernel: Call trace:
    Apr 28 21:57:13 kernel:  cpsw_ale_write.isra.0+0x68/0x80
    Apr 28 21:57:13 kernel:  cpsw_ale_add_mcast+0x1d4/0x2e0
    Apr 28 21:57:13 kernel:  am65_cpsw_nuss_ndo_slave_set_rx_mode+0xcc/0xf0
    Apr 28 21:57:13 kernel:  __dev_set_rx_mode+0x68/0xa4
    Apr 28 21:57:13 kernel:  dev_mc_del_global+0x84/0xa4
    Apr 28 21:57:13 kernel:  dev_ifsioc+0x360/0x50c
    Apr 28 21:57:13 kernel:  dev_ioctl+0x184/0x5b0
    Apr 28 21:57:13 kernel:  sock_do_ioctl+0xc0/0x100
    Apr 28 21:57:13 kernel:  sock_ioctl+0x244/0x354
    Apr 28 21:57:13 kernel:  __arm64_sys_ioctl+0xa8/0xf0
    Apr 28 21:57:13 kernel:  invoke_syscall+0x48/0x114
    Apr 28 21:57:13 kernel:  el0_svc_common.constprop.0+0xd4/0xfc
    Apr 28 21:57:13 kernel:  do_el0_svc+0x20/0x30
    Apr 28 21:57:13 kernel:  el0_svc+0x28/0xa0
    Apr 28 21:57:13 kernel:  el0t_64_sync_handler+0xbc/0x140
    Apr 28 21:57:13 kernel:  el0t_64_sync+0x18c/0x190
    Apr 28 21:57:13 kernel: ---[ end trace 0000000000000000 ]---

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Michael:

    但这也是添加多播。 我们在这里也看不到谁在删除 VLAN 条目。 因为除非 VLAN 条目全部为0、否则 ALE 驱动程序不会添加较新的 ALE 条目。

    您确定在此之前没有对条目0进行 ALE 写入吗?

    我们也可以只是恐慌内核,并停止它,让我们说20写入 ALE id 0。 这将为我们提供清除 VLAN 的跟踪。 我们还可以打印 ALE_ENTRY。 如果这是全部0、则表示正在删除该条目。

    因为现在它们只是 mcast_flush 和 add_mcast 调用。

    此致、
    Tanmay

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您确定在此之前没有对条目0进行 ALE 写入吗?

    我们已经看到 cpsw_ale_set_allmulti 不断写入 VLAN 0条目。 除此之外,我还没有看到任何其他作者到 ALE 条目0。

    我们也可以恐慌内核,并停止它,让我们说20写入 ALE ID 0。 这将为我们提供清除 VLAN 的跟踪。 我们还可以打印 ALE_ENTRY。 如果这是全部0、则表示该条目正在被删除。

    嗯,我想这只是给我们 cpsw_ale_set_allmulti 垃圾邮件,我以前抑制. 我将要求我们的 FAE 向您转发完整的错误日志、其中没有 cpsw_ale_set_allmulti 跟踪。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    我添加了一些代码来仔细检查 ALE 表中的读数-

    e2e.ti.com/.../ale_2D00_zero_2D00_index_2D00_debug.diff

    它会仔细检查从 ALE 条目0读取的是 VLAN 条目。 如果读取不是 VLAN 条目、则会转储条目、重新读取条目、并转储条目。

    然后我复制了这个 bug ,抓住了第一个堆栈,当它发生的时候,并通过脚本/ decode_stacktrace.sh 馈送它。

    Apr 28 20:42:20 altos-v2 kernel: Unexpected ALE Entry 0: 00000000 00000000 00000000
    Apr 28 20:42:20 altos-v2 kernel: ------------[ cut here ]------------
    Apr 28 20:42:20 altos-v2 kernel: WARNING: CPU: 1 PID: 144151 at drivers/net/ethernet/ti/cpsw_ale.c:329 cpsw_ale_read.isra.0 (drivers/net/ethernet/ti/cpsw_ale.c:329)
    Apr 28 20:42:20 altos-v2 kernel: Modules linked in: usb_f_ncm u_ether libcomposite rpmsg_videobuf rpmsg_ctrl rpmsg_char crct10dif_ce csi_vc_source ti_k3_r5_remoteproc m_can_platform m_can cdns_mhdp8546 can_dev drm_display_helper pvrsrvkm(O) ti_k3_dsp_remoteproc virtio_rpmsg_bus rpmsg_ns ti_k3_common wave5 v4l2_mem2mem cryptodev(O) fuse ipv6
    Apr 28 20:42:20 altos-v2 kernel: CPU: 1 PID: 144151 Comm: ip Tainted: G        W  O       6.1.80-ti-gac253d710e5a #1
    Apr 28 20:42:20 altos-v2 kernel: Hardware name: Texas Instruments J721S2 EVM (DT)
    Apr 28 20:42:20 altos-v2 kernel: pstate: 60000005 (nZCv daif -PAN -UAO -TCO -DIT -SSBS BTYPE=--)
    Apr 28 20:42:20 altos-v2 kernel: pc : cpsw_ale_read.isra.0 (drivers/net/ethernet/ti/cpsw_ale.c:329)
    Apr 28 20:42:20 altos-v2 kernel: lr : cpsw_ale_read.isra.0 (drivers/net/ethernet/ti/cpsw_ale.c:329)
    Apr 28 20:42:20 altos-v2 kernel: sp : ffff800019733b30
    Apr 28 20:42:20 altos-v2 kernel: x29: ffff800019733b30 x28: ffff000833ea0000 x27: 0000000000000000
    Apr 28 20:42:20 altos-v2 kernel: x26: ffff000831633e28 x25: 0000000010000000 x24: 0000000000000000
    Apr 28 20:42:20 altos-v2 kernel: x23: ffff00082c211680 x22: ffff800019733b50 x21: 0000000000000000
    Apr 28 20:42:20 altos-v2 kernel: x20: 0000000000000001 x19: ffff00082c211680 x18: ffffffffffffffff
    Apr 28 20:42:20 altos-v2 kernel: x17: 0000000000000000 x16: 0000000000000000 x15: ffff8000997337c7
    Apr 28 20:42:20 altos-v2 kernel: x14: 0000000000000000 x13: ffff8000091d1560 x12: 0000000000000792
    Apr 28 20:42:20 altos-v2 kernel: x11: 0000000000000286 x10: ffff800009229560 x9 : ffff8000091d1560
    Apr 28 20:42:20 altos-v2 kernel: x8 : 00000000ffffefff x7 : ffff800009229560 x6 : 0000000000000000
    Apr 28 20:42:20 altos-v2 kernel: x5 : ffff00085f9b1b60 x4 : ffff00085f9b1b60 x3 : 0000000000000000
    Apr 28 20:42:20 altos-v2 kernel: x2 : 0000000000000000 x1 : ffff000833ea0000 x0 : 0000000000000032
    Apr 28 20:42:20 altos-v2 kernel: Call trace:
    Apr 28 20:42:20 altos-v2 kernel: cpsw_ale_read.isra.0 (drivers/net/ethernet/ti/cpsw_ale.c:329)
    Apr 28 20:42:20 altos-v2 kernel: cpsw_ale_add_mcast (drivers/net/ethernet/ti/cpsw_ale.c:121 drivers/net/ethernet/ti/cpsw_ale.c:218 drivers/net/ethernet/ti/cpsw_ale.c:424 drivers/net/ethernet/ti/cpsw_ale.c:580)
    Apr 28 20:42:20 altos-v2 kernel: am65_cpsw_nuss_ndo_slave_set_rx_mode (drivers/net/ethernet/ti/am65-cpsw-nuss.c:280 (discriminator 3))
    Apr 28 20:42:20 altos-v2 kernel: __dev_set_rx_mode (net/core/dev.c:8504)
    Apr 28 20:42:20 altos-v2 kernel: dev_mc_del_global (include/linux/spinlock.h:396 include/linux/netdevice.h:4467 net/core/dev_addr_lists.c:912 net/core/dev_addr_lists.c:940)
    Apr 28 20:42:20 altos-v2 kernel: dev_ifsioc (net/core/dev_ioctl.c:367)
    Apr 28 20:42:20 altos-v2 kernel: dev_ioctl (net/core/dev_ioctl.c:588)
    Apr 28 20:42:20 altos-v2 kernel: sock_do_ioctl (net/socket.c:1218)
    Apr 28 20:42:20 altos-v2 kernel: sock_ioctl (net/socket.c:1324)
    Apr 28 20:42:20 altos-v2 kernel: __arm64_sys_ioctl (fs/ioctl.c:52 fs/ioctl.c:870 fs/ioctl.c:856 fs/ioctl.c:856)
    Apr 28 20:42:20 altos-v2 kernel: invoke_syscall (arch/arm64/include/asm/current.h:19 arch/arm64/kernel/syscall.c:57)
    Apr 28 20:42:20 altos-v2 kernel: el0_svc_common.constprop.0 (arch/arm64/kernel/syscall.c:149)
    Apr 28 20:42:20 altos-v2 kernel: do_el0_svc (arch/arm64/kernel/syscall.c:207)
    Apr 28 20:42:20 altos-v2 kernel: el0_svc (arch/arm64/include/asm/daifflags.h:28 arch/arm64/kernel/entry-common.c:133 arch/arm64/kernel/entry-common.c:142 arch/arm64/kernel/entry-common.c:638)
    Apr 28 20:42:20 altos-v2 kernel: el0t_64_sync_handler (arch/arm64/kernel/entry-common.c:656)
    Apr 28 20:42:20 altos-v2 kernel: el0t_64_sync (arch/arm64/kernel/entry.S:585)
    Apr 28 20:42:20 altos-v2 kernel: ---[ end trace 0000000000000000 ]---
    Apr 28 20:42:20 altos-v2 kernel: Retried read, got ALE Entry 0: 00000000 20000000 03100003

    新检查实际上会触发- cpsw_ale_read 将读取一个全为零的条目、而不是实际应该存在的 VLAN 条目。 我们知道应该有一个 VLAN 条目、因为第二次读取时的条目类型是 VLAN。

    纵观栈、会有点困惑、因为一堆函数是内联的。 但是、查看 cpsw_ale_add_mcast 中的行号列表、我们可以看到它嵌套如下:cpsw_ale_add_mcast -> cpsw_ale_match_free -> cpsw_ale_read。

    cpsw_ale_add_mcast 正在查找要写入的免费条目、因此它调用 cpsw_ale_match_free、而 cpsw_ale_match_free 调用 cpsw_ale_read 来查找免费条目。 cpsw_ale_read、然后误读条目0、cpsw_ale_match_free 将0返回为空条目、并且 cpsw_ale_add_mcast 会覆盖 ALE 条目0。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Michael:

    很抱歉耽误响应。

    新检查实际上触发了- cpsw_ale_read 最终读取的条目是全零的、而不是实际应该存在的 VLAN 条目。 我们知道应该有一个 VLAN 条目、因为第二次读取时的条目类型是 VLAN。

    这是否意味着第一次读取时、它返回全0、而第二次读取时返回 VLAN 条目。 这意味着 ALE 读取以某种方式失败。 我将为此尝试一些有针对性的测试。 但这种情况极不可能发生。

    是否可以在不同的硬件上进行测试。 这可能是硬件问题。

    此致、
    Tanmay

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您是否可以在其他硬件上进行测试。 这可能是硬件问题。

    我之前是在我们自己的电路板上进行测试。 我再次使用 J721S2XSOMXEVM + J721EXCPXEVM 和 PROCESSOR-SDK-LINUX J721S2版本10.01.00.04进行了测试、并且仅使用前面显示的调试补丁。 也会发生同样的情况。

    [ 3735.470770] Unexpected ALE Entry 0: 00000000 00000000 00000000
    [ 3735.481322] ------------[ cut here ]------------
    [ 3735.486063] WARNING: CPU: 0 PID: 1371862 at drivers/net/ethernet/ti/cpsw_ale.c:329 cpsw_ale_read.isra.0+0xcc/0x120
    [ 3735.496402] Modules linked in: rpmsg_ctrl snd_soc_pcm3168a_i2c rpmsg_char cdns3 snd_soc_pcm3168a ti_am335x_adc cdns_usb_common kfifo_buf wave5 videobuf2_dma_contig videobuf2_memops crct10dif_ce v4l2_mem2mem snd_soc_j721e_evm videobuf2_v4l2 overlay videobuf2_common omap_hwspinlock phy_can_transceiver mux_gpio cdns_mhdp8546 omap_mailbox display_connector videodev ti_k3_r5_remoteproc m_can_platform m_can at24 mc drm_display_helper snd_soc_davinci_mcasp cdns_dsi snd_soc_ti_udma snd_soc_ti_edma can_dev cfg80211 ti_k3_dsp_remoteproc sa2ul k3_j72xx_bandgap ti_am335x_tscadc drm_kms_helper snd_soc_ti_sdma cdns_dphy cdns3_ti bluetooth rti_wdt ecdh_generic ecc rfkill fuse drm drm_panel_orientation_quirks backlight ipv6
    [ 3735.559095] CPU: 0 PID: 1371862 Comm: ip Tainted: G        W          6.6.44-01478-g541c20281af7-dirty #4
    [ 3735.568642] Hardware name: Texas Instruments J721S2 EVM (DT)
    [ 3735.574285] pstate: 60000005 (nZCv daif -PAN -UAO -TCO -DIT -SSBS BTYPE=--)
    [ 3735.581229] pc : cpsw_ale_read.isra.0+0xcc/0x120
    [ 3735.585840] lr : cpsw_ale_read.isra.0+0xcc/0x120
    [ 3735.590447] sp : ffff800085d73af0
    [ 3735.593747] x29: ffff800085d73b10 x28: ffff000834170e40 x27: 0000000000000000
    [ 3735.600867] x26: ffff00083b3d74a8 x25: 3412005e00010000 x24: 0000000000000000
    [ 3735.607987] x23: ffff00082e24ce80 x22: 0000000000000000 x21: ffff800085d73b30
    [ 3735.615106] x20: 0000000000000000 x19: ffff00082e24ce80 x18: 0000000000000006
    [ 3735.622224] x17: 0000000000000000 x16: ffff800080d927f8 x15: ffff800085d73520
    [ 3735.629343] x14: 0000000000000000 x13: ffff8000812ef178 x12: 0000000000000957
    [ 3735.636462] x11: 000000000000031d x10: ffff800081347178 x9 : ffff8000812ef178
    [ 3735.643581] x8 : 00000000ffffefff x7 : ffff800081347178 x6 : 80000000fffff000
    [ 3735.650700] x5 : 0000000000000000 x4 : 0000000000000000 x3 : 0000000000000000
    [ 3735.657818] x2 : 0000000000000000 x1 : ffff000834170e40 x0 : 0000000000000032
    [ 3735.664937] Call trace:
    [ 3735.667371]  cpsw_ale_read.isra.0+0xcc/0x120
    [ 3735.671628]  cpsw_ale_add_mcast+0x2b4/0x2e0
    [ 3735.675797]  am65_cpsw_nuss_ndo_slave_set_rx_mode+0xdc/0xfc
    [ 3735.681353]  __dev_set_rx_mode+0x64/0xa4
    [ 3735.685266]  dev_mc_del_global+0x84/0xa4
    [ 3735.689176]  dev_ifsioc+0x2b4/0x4cc
    [ 3735.692654]  dev_ioctl+0x278/0x514
    [ 3735.696045]  sock_do_ioctl+0xd8/0x118
    [ 3735.699696]  sock_ioctl+0x278/0x360
    [ 3735.703173]  __arm64_sys_ioctl+0xac/0xf0
    [ 3735.707086]  invoke_syscall+0x48/0x114
    [ 3735.710823]  el0_svc_common.constprop.0+0xc0/0xe0
    [ 3735.715513]  do_el0_svc+0x1c/0x28
    [ 3735.718814]  el0_svc+0x2c/0x84
    [ 3735.721858]  el0t_64_sync_handler+0x120/0x12c
    [ 3735.726199]  el0t_64_sync+0x190/0x194
    [ 3735.729849] ---[ end trace 0000000000000000 ]---
    [ 3735.734508] Retried read, got ALE Entry 0: 00000000 20000000 03100003

    已附加完整的 dmesg。

    e2e.ti.com/.../evm_2D00_dmesg.txt

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、

    唯一似乎发生的事情是我们可能间歇性地错误地读取 ALE 条目。

    在读取条目时、您是否可以尝试读取两次、如果存在非零值、请将其取走。

    如果这样可以解决问题、让我跟进内部团队的后续行动。

    此致、
    Tanmay

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    在我之前使用的补丁之上、我添加了一个 memcpy、如果完成了第二次 ALE 读取、它使用第二次 ALE 读取。

    在24小时内,第二次 ALE 阅读阻止了19次问题。 登录 attached.e2e.ti.com/.../8054.dmesg.txt

    这是不可接受的解决方案。 我们不知道读取失败必然返回零。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    我还在运行 TDA4VM 的 BeagleBone AI-64上进行了测试。 它也在那里复制,使用最新的 Xfce 映像。 (bbai64-eMMC-FLASHER-debian-12.9-xfce-arm64- 2025年03月05日- 12GB.img)

    root@BeagleBone:~# ./switch-config -d
    K3 cpsw dump version (1) len(6328)
    ALE table dump ents(64):
    0   : type: mcast, addr = 33:33:00:00:00:01, mcast_state = f, no super, port_mask = 0x1
    1   : type: ucast, addr = 24:76:25:a0:ee:15, ucast_type = persistant, port_num = 0x0, Secure
    2   : type: mcast, vid = 0, addr = ff:ff:ff:ff:ff:ff, mcast_state = f, no super, port_mask = 0x3
    3   : type: mcast, addr = 01:00:5e:00:00:01, mcast_state = f, no super, port_mask = 0x1
    4   : type: mcast, addr = 33:33:ff:a0:ee:15, mcast_state = f, no super, port_mask = 0x1
    5   : type: mcast, addr = 01:80:c2:00:00:00, mcast_state = f, no super, port_mask = 0x1
    6   : type: mcast, addr = 01:80:c2:00:00:03, mcast_state = f, no super, port_mask = 0x1
    7   : type: mcast, addr = 01:80:c2:00:00:0e, mcast_state = f, no super, port_mask = 0x1
    8   : type: mcast, addr = 01:00:5e:00:00:fb, mcast_state = f, no super, port_mask = 0x1
    9   : type: mcast, addr = 33:33:00:00:00:fb, mcast_state = f, no super, port_mask = 0x1
    10  : type: mcast, addr = 01:00:5e:00:cd:ab, mcast_state = f, no super, port_mask = 0x1
    11  : type: mcast, addr = 01:00:5e:00:34:12, mcast_state = f, no super, port_mask = 0x1

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Michael:

    我已在内部报告问题并重新创建。 目前的建议是两次阅读 ALE 条目。 关于这一问题的根本原因、仍在进行讨论。

    此致、
    Tanmay