请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
器件型号: J721EXSOMXEVM
我发现 UART 8250_OMAP-Lc Linux 驱动程序有问题。 当我在 UART(用于外部蓝牙模块)内核上启用子节点时、RCU 停滞。 我发现了一种导致僵局的情况。
该问题与内核“ti-linux-6.6.y"标签“标签:10.01.02 有关。
驱动程序在 1856 的函数 omap8250_runtime_resume() 行中使用 port->lock。 但在这种情况下、锁被串行线路层占据。
我们通过禁用 UART 的 UART_CAP_RPM 来解决这个问题。
此场景的栈轨道如下:
queized_spin_lock_slowpath (lock = 0xFFFF80008235D7B8、val = 1141638144)
queed_sin_lock(内联)
DO_RAW_SPIN_LOCK (LOCK = 0x80008235D7B8)
_RAW_SPIN_LOCK_IRQ(内联)
_RAW_SPIN_LOCK_IRQ (LOCK = 0x80008235D7B8) !!!!!! 死锁
omap8250_runtime_resume (dev = 0xFFFF000000187010)
pm_generic_runtime_resume (dev =?????)
__genpd_runtime_resume (dev =????)
genpd_runtime_resume (dev = 0xFFFF000000187010)
__rpm_callback (cb = 0x800080817D44、dev = 0xFFFF000000187010)
RPM_Callback (cb =??、dev = 0xFFFF000000187010)
RPM_resume (dev = 0xFFFF000000187010、rpmflags = 4)
__pm_runtime_resume (dev = 0xFFFF000000187010、rpmflags = 192)
PM_RUNTIME_GET_SYNC(内联)
serial8250_rpm_get(内联)
serial8250_rpm_get(内联)
serial8250_DO_get_mctrl (port = 0x80008235D7B8)
serial8250_get_mctrl(port =???)
UART_LINE_INFO(内联) !!!!!! 获取端口->锁定呼叫 mctrl
UART_proc_show(m = 0xFFFF000005CB1658、v =??)
SEQ_READ_ITER (iocb = 0x800083943D48、ITER = 0x800083943D20)
PROC_reg_read_ITER (iocb =???、ITER =????)
CALL_READ_ITER(内联)
NEW_SYNC_READ(内联)
VFS_READ (FILE = 0xFFFF000007BCC400、buf = 0x0361A7F0、count = 1024、pos = 0xFFFF800083943DC0)
ksys_read (fd =??、buf = 0x0361A7F0、count = 1024)
_do_sys_read(内联)
__se_sys_read(内联)
__arm64_sys_read (regs =????)
__调用_syscall(内联)
Invoke_syscall (regs = 0xFFFF800083943EB0、scno =???、sc_nr =???、syscall_table =????)
el0_svc_common(regs = 0xFFFF800083943EB0、scno =???、syscall_table =???、SC_nr =?)
Do_el0_svc(寄存器=?????)
EL0_Svc (REGS = 0xFFFF800083943EB0)
el0t_64_sync_handler (regs =?????)
el0t_64_SYNC (asm)
异常