1950884_zh-CN

キャンセル
次の結果を表示 
表示  限定  | 次の代わりに検索 
もしかして: 

1950884_zh-CN

1950884_zh-CN

内核恐慌:IMX-SDMA 导致原子调度

我们有一款运行恩智浦 Yocto i.MX、Linux、LF5.15.71_2.2.0 的定制 i.MX8M Plus 主板

我们遇到了间歇性内核恐慌,似乎与使用 ALSA aplay 播放音频有关。研究调用跟踪后发现,imx-sdma 驱动程序似乎是在原子上下文(见下文)

soc_pcm_trigger()是在原子上下文中,sdma_prep_dma_cyclic()允许电源管理器恢复,并最终锁定了一个互斥项,导致调度。

这似乎与此处描述(和解决)的情况非常相似:
[email protected] | [v6.1/standard/nxp-sdk-6.1/nxp-soc& v6.1/standard/preempt-rt/nx...

要重现这个问题非常困难,因为它每周只在实时系统上发生两次。

呼叫跟踪:
dump_backtrace+0x0/0x19c
show_stack+0x18/0x70
dump_stack_lvl+0x68/0x84
dump_stack+0x18/0x34
__schedule_bug+0x60/0x80
__schedule+0x658/0x710
计划+0x88/0x100
schedule_preempt_disabled+0x24/0x40
__mutex_lock.constprop.0+0x18c/0x56c
__mutex_lock_slowpath+0x14/0x20
mutex_lock+0x48/0x54
clk_prepare_lock+0x44/0xa0
clk_unprepare+0x24/0x44
clk_bulk_unprepare+0x3c/0x60
genpd_runtime_resume+0x26c/0x2b0
__rpm_callback+0x48/0x1a0
rpm_callback+0x6c/0x80
rpm_resume+0x378/0x614
__pm_runtime_resume+0x3c/0x8c
sdma_prep_dma_cyclic+0x58/0x294
snd_dmaengine_pcm_trigger+0xec/0x1c0
dmaengine_pcm_trigger+0x18/0x24
snd_soc_pcm_component_trigger+0x164/0x230
soc_pcm_trigger+0xbc/0x1c0
 
LinuxYocto ProjectRe: kernel panic: imx-sdma causes scheduling while atomic

我知道这个主题已经很老了,但是这个问题在补丁中得到解决了吗?我在 linux-imx 5.10 上看到了同样的内核周期性恐慌现象

Re: kernel panic: imx-sdma causes scheduling while atomic

你好

我在运行 NXP Yocto i.MX、Linux、LF5.10.72_2.2.3 (hardknott) 的 iMX8MP 上遇到了同样的问题。
@Bio_TICFSL,你提到计划在 2025 年第一季度进行修复——已经发布了吗?它在哪些地方得到了应用,我又该如何加以利用?

此致,

Re: kernel panic: imx-sdma causes scheduling while atomic

你好

我在运行 NXP Yocto i.MX、Linux、LF5.10.72_2.2.3 (hardknott) 的 iMX8MP 上遇到了同样的问题。
@Bio_TICFSL,你提到计划在 2025 年第一季度进行修复——已经发布了吗?它在哪些地方得到了应用,我又该如何加以利用?

此致,

Re: kernel panic: imx-sdma causes scheduling while atomic

听到这个消息真是太好了。由于我们有一个变通办法(通过禁用 imx-sdma 的 PM),我们可以设法等待适当的解决方案。

Re: kernel panic: imx-sdma causes scheduling while atomic

你好

我们已经重现了这个问题,这个问题将在2025年第一季度发布的下一个版本中公开修复。

谢谢!

Re: kernel panic: imx-sdma causes scheduling while atomic

你好

您更新过内核吗?我无法用最新的 电路板支持包。 重现它。但是,如果修复了这个问题,这个问题就掌握在开发者手中,在下次 电路板支持包 版本之前我会一直处于修复状态。


此致

Re: kernel panic: imx-sdma causes scheduling while atomic

有什么新进展吗?

Re: kernel panic: imx-sdma causes scheduling while atomic

知道了将升级此问题,希望它现在能正常工作,谢谢。

此致

Re: kernel panic: imx-sdma causes scheduling while atomic

通过禁用 imx-sdma 驱动程序的运行时 pm,我们找到了一种解决方法,这让我们更加确信这是恩智浦 imx-sdma 驱动程序的问题。
这是解决方法:
在 > /sys/devices/platform/soc 上 回声 @0 /30c00000.bus/30e100000.dma-控制器/电源/控制

Re: kernel panic: imx-sdma causes scheduling while atomic

@Bio_TICFSL我看了你的回复好几遍,但我不明白这与我的问题有什么联系?无论如何,在我的版本中,使用了来自 meta-imx 的固件-imx-8m v8.18。

我的问题似乎与 i.MX ALSA SoC 平台驱动程序在原子上下文中如何使用 sDMA 有关。

我在所附日志中还看到:
tlv320aic3x 2 -0018 : ASoC: error at snd_soc_component_update_bits on tlv320aic3x. 2-0018: -110

tlv320aic3x 是我们的 ASoC 编解码器驱动程序,不确定这是原因还是症状
Re: kernel panic: imx-sdma causes scheduling while atomic

你好

SDMA 固件由 meta-freescale 和 meta-imx 层提供,后者提供了它的更新版本。
恩智浦Yocto用户指南 IMX Yocto用户指南,建议使用恩智浦发布清单 imx清单中提及的层,其中也包括meta-imx层。
meta-imx 并不是机器支持所必需的,因为它应该只添加新的补丁,这些补丁稍后应合并到元飞思卡尔发行版层中。但是,fsl-image-machine-test镜像,这是由meta-freescale层提供的没有GUI或多媒体软件包的基本官方镜像,它还添加了固件守护程序软件包,通过udev信号从用户空间加载固件。

除此之外,我还确认,将imx-sdma驱动程序配置为模块后,固件将在模块加载后立即以直接模式加载,就我而言,相当于自启动以来大约10秒。

# dmesg | grep sdma
[ 10.459118] imx-sdma 20ec000.sdma: TEST DEBUG: sdma_probe
[ 10.541432] imx-sdma 20ec000.sdma: firmware found.
[ 10.576034] imx-sdma 20ec000.sdma: loaded firmware 3.6

我同意这是一个更好的选择,即使没有同步加载补丁,也比依赖固件守护进程要好,因为在模块加载和固件加载之间几乎不会发生 sdma 传输。我不确定这是否适用于所有情况,但我认为恩智浦映像中的用户空间加载器可以支持所有可能驱动程序的懒固件加载,这样就不必将它们配置为模块。我希望安全的驱动程序通常会在开始传输前检查固件是否已加载,或者以其他方式安全失败,而不会惊慌失措。


此致

タグ(1)
評価なし
バージョン履歴
最終更新日:
‎03-19-2026 04:29 AM
更新者: