bdl_pos_adj: Legen Sie die IRQ-Timing-Problemumgehung für hda-intel fest

7

Ich erhalte folgende Fehler in meinen Protokollen:

kernel: snd_hda_intel 0000:00:1b.0: IRQ timing workaround is 
        activated for card #0. Suggest a bigger bdl_pos_adj

Google hat hier und hier einige alte Beiträge gefunden , die sich mit dem gleichen Problem befassen. Die angebotene Lösung schlägt vor, den Wert für das Kernelmodul zu ändern:

options snd-hda-intel enable_msi=1 bdl_pos_adj=1,48

Nirgendwo wird jedoch erklärt, was die Zahlen bedeuten. Außerdem hat der aktuelle (Standard-) Wert, den ich jetzt habe, mehrere Zahlen:

# cat /sys/module/snd_hda_intel/parameters/bdl_pos_adj
-1,1,-1,-1,-1,-1,-1,-1

Kann jemand bitte erklären, was all diese Zahlen bedeuten und wie man sie ändert, um die Fehler zu beseitigen?

Martin Vegter
quelle

Antworten:

4

Die Kerneldokumentation beschreibt bdl_pos_adjFolgendes (siehe ALSA-Configuration.txt und HD-Audio.txt ):

bdl_pos_adj- Gibt die DMA-IRQ-Zeitverzögerung in Samples an. Wenn Sie -1 übergeben, wählt der Treiber den geeigneten Wert basierend auf dem Controller-Chip.

(sic). Auf Intel-Controllern ist der Standardwert 1 (was Sie selbst sehen können /sys/module/snd_hda_intel/parameters/bdl_pos_adj). Die mehreren Nummern sind vorhanden, da das Modul mehrere HDA-Geräte unterstützt (standardmäßig acht, es befindet sich SNDRV_CARDSin der Kernelquelle ). Ich bin mir nicht sicher, wie die Korrespondenz aussieht. Ich hätte gehofft, dass es mit der Kartennummer übereinstimmt, aber Sie erhalten den Fehler für Karte Nr. 0, während Sie bdl_pos_adjvorschlagen, dass der Wert an zweiter Stelle steht ...

Zur Behebung des Problems gibt es nicht viel Dokumentation und der Code sagt auch nicht viel. Der einzige Vorschlag, den ich habe, ist, den Anweisungen zu folgen und zu versuchen, den Wert zu erhöhen, bis Sie etwas erhalten, das funktioniert:

options snd-hda-intel enable_msi=1 bdl_pos_adj=2,2

(Ich verwende 2,2hier, weil ich nicht sicher bin, welche der ersten beiden für Ihr Gerät verwendet wird.)

Stephen Kitt
quelle
soll ich das enable_msi=1wie im Beispiel behalten , oder ist es hier irrelevant?
Martin Vegter
Wenn Sie es noch nicht hatten, lassen Sie es einfach fallen, behalten Sie einfach die bdl_pos_adjOption.
Stephen Kitt
OK, die Verwendung -1,2machte keinen Unterschied, stieg aber schließlich an, bis -1,64das Problem behoben zu sein scheint. Könnte es negative Konsequenzen geben, wenn die Anzahl zu hoch ist?
Martin Vegter
und ist es wirklich notwendig, die Potenz von 2 beizubehalten (wie der verlinkte Beitrag andeutet)?
Martin Vegter
Wenn ich mir den Controller-Code ansehe (wo bdl_pos_adjverwendet wird), sehe ich nicht, warum es eine Zweierpotenz sein sollte. Was die negativen Konsequenzen angeht, besteht alles, was Sie riskieren, darin, zu viel in einem Audiopuffer zu überspringen (so wie ich es verstehe) ...
Stephen Kitt