工具与软件:
尊敬的:
如果 am65-cpsw-nuss 驱动程序中的 IRQ 请求失败、则会在清理链中导致 NULL 指针异常。 内核恐慌的根本原因是 free 方法中的 memset:
实际崩溃发生在 free_netdev 方法中:
https://git.ti.com/cgit/ti-linux-kernel/ti-linux-kernel/tree/net/core/dev.c?h=ti-linux-6.1.y#n10714
崩溃是在调用 list_for_each_entry_safe 时发生的、我认为这是由于在 memset 中 NAPI_TX 列表被覆盖0所致。
通过在 am65_cpsw_nuss_ndev_add_tx_napi 中捕获 IRQ 请求失败、很容易重现问题:
只需在调用 devm_request_irq 后添加"ret =-ENOMEM"或"ret =-EINVAL"。
使用 memset 的原因是什么? 能否安全移除?
[ 2.562201] am65-cpsw-nuss c000000.ethernet:请求 tx0 IRQ 43失败、-12
[ 2.569525] am65-cpsw-nuss c000000.ethernet:无法添加 TX Napi -12
[ 2.578000]无法处理虚拟地址0000000000000000处的内核 NULL 指针解除引用
[ 2.586786]存储器中止信息:
[ 2.589587] ESR = 0x0000000096000004
[ 2.59333333] EC = 0x25:DABT (当前 EL)、IL = 32位
[ 2.598636] 设置= 0、FNV = 0
[ 2.601684] EA = 0、S1PTW = 0
[ 2.604819] FSC = 0x04:0级转换故障
[ 2.60969]数据中止信息:
[ 2.612562] ISV = 0、ISS = 0x00000004
[ 2.616394] CM = 0、WNR = 0
[ 2.619351][0000000000000000]用户地址、但 ACTIVE_MM 被交换
[ 2.625695]内部错误:Oops:0000000096000004 [#1] preempty SMP
[2.631947] 模块链接如下:
[ 2.634995] CPU:0 PID:9 Comm:kworker/U4:0 not damed 6.1.69-ti-g4a7ab3a0163e #1
[ 2.642636]硬件名称: Schneider Electric Automation Server Premium 3 (DT)
[ 2.649841]工作队列:Events_unbound defered_probe_work_func
[ 2.655676] pstate:60000005 (NZCv daif -pan -uao -tco -dit -ssbs BTYPE=-)
[2.662622] PC : free_netdev+0xc0/0x1b0
[2.666452] lr : free_netdev+0xc0/0x1b0
[2.670276] sp : ffff80000983bb10.
[2.67359] x29:ff80000983bb10 x28:0000000000000000 x27:00000000000000000000
[ 2.680704] x26:ffffff00000000c000 x25:ffff00000000900d x24:0000000000000048
[2.687827] x23:0000000000000022 x22:ffffff80000983bb58 x21:ffff0000028fb050
[2.694950] x20:ffffff0000028fb000 x19:fffffffffffffffffffffffffffluff 8 x18:0000000000000008.
[ 2.702075] x17:202c333420717269 x16:000000000008 x15:0000000000000001
[ 2.709197] x14:0000000000000026 x13:0000000000000399 x12:00000000000000000001
[2.716322] x11:0000000000000000 x10:00000000000009a0 x9:ffff80000983b910
[2.723445] x8 : ffffff0000000d7a00 x7 : ffff00005fbb7340 x6 : ffff8000094dad30.
[2.730568] x5: 0000000000000000 x4: 0000000000000000 x3 : ff80000009566bf8.
[ 2.737692] x2 : 0000000000000000 x1 : 000000000000 x0 : ffff0000000d7000
[ 2.744817]呼叫跟踪:
[ 2.747252] FREE_NETDEV+0xc0/0x1b0
[ 2.750731] devm_free_netdev+0x14/0x20
[ 2.754561] DevRes_release_all+0xa8/0x110
[ 2.758649] device_unbind_cleanup+0x18/0x70
[ 2.762909] REQUITE_PROBET+0x21c/0x2dc
[ 2.766561] __driver_probe_device+0x78/0x114
[2.770909] DRIVER_PROBE_DEVICE+0xd8/0x15c
[ 2.775081] __device_attach_driver+0xb8/0x134
[ 2.779514] bus_for_each_drv+0x80/0xdc
[ 2.783339] __DEVICE_Attach+0xa0/0x1a0
[ 2.787164] device_initial_probe+0x14/0x20
[ 2.791336] BUS_PROTECT_DEVICE+0x98/0xa0
[ 2.795161] Defered_probe_work_func+0x88/0xc0
[ 2.799680] process_one_work+0x1b0/0x320
[ 2.803655] worker_thread+0x220/0x430
[ 2.807428] kthread+0x104/0x10c
[ 2.810647] ret_from_fork+0x10/0x20
[2.814219] 编码: 97fff8a5 9400631c 35fffee0 97d6f36a (f940ae62)
[2.820298]--[ 结束跟踪0000000000000000]--