bdl_pos_adj:为 hda-intel 设置 IRQ 计时解决方法

Mar*_*ter 7 logs kernel audio kernel-modules

我的日志中出现以下错误:

kernel: snd_hda_intel 0000:00:1b.0: IRQ timing workaround is 
        activated for card #0. Suggest a bigger bdl_pos_adj
Run Code Online (Sandbox Code Playgroud)

谷歌在这里这里找到了一些处理同样问题的旧帖子。提供的解决方案建议更改内核模块的值:

options snd-hda-intel enable_msi=1 bdl_pos_adj=1,48
Run Code Online (Sandbox Code Playgroud)

然而,没有任何地方可以解释这些数字的含义。此外,我现在拥有的当前(默认)值有多个数字:

# cat /sys/module/snd_hda_intel/parameters/bdl_pos_adj
-1,1,-1,-1,-1,-1,-1,-1
Run Code Online (Sandbox Code Playgroud)

有人可以解释一下所有这些数字的含义,以及如何更改它们以消除错误吗?

Ste*_*itt 4

内核文档描述bdl_pos_adj如下(参见ALSA驱动配置指南HD-Audio驱动更多说明):

bdl_pos_adj- 指定样本中的 DMA IRQ 时序延迟。传递-1将使驱动程序根据控制器芯片选择合适的值。

(原文如此)。在 Intel 控制器上,默认值为 1(您可以在自己的 中看到/sys/module/snd_hda_intel/parameters/bdl_pos_adj)。之所以有多个数字,是因为该模块支持多个 HDA 设备(默认情况下是 8 个,它位于内核源代码SNDRV_CARDS中)。我一时不确定这封信是什么;我本来希望它与卡号匹配,但是您收到卡 #0 的错误,而您建议它将其值放在第二位......bdl_pos_adj

至于解决问题,没有太多文档,代码也没有说太多。我唯一的建议是按照说明进行操作,并尝试增加该值,直到获得有效的结果:

options snd-hda-intel enable_msi=1 bdl_pos_adj=2,2
Run Code Online (Sandbox Code Playgroud)

(我2,2在这里使用是因为我不确定前两个中的哪一个将用于您的设备。)