[PATCH 2/2] hda/i915: split the wait for the component binding
Ramalingam C
ramalingam.c at intel.com
Wed Feb 23 19:52:03 UTC 2022
Split the wait for component binding from i915 in multiples of
sysctl_hung_task_timeout_secs. This helps to avoid the possible kworker
thread hung detection given below.
<3>[ 60.946316] INFO: task kworker/11:1:104 blocked for more than 30
seconds.
<3>[ 60.946479] Tainted: G W
5.17.0-rc5-CI-CI_DRM_11265+ #1
<3>[ 60.946580] "echo 0 > /proc/sys/kernel/hung_task_timeout_secs"
disables this message.
<6>[ 60.946688] task:kworker/11:1 state:D stack:14192 pid: 104
ppid: 2 flags:0x00004000
<6>[ 60.946713] Workqueue: events azx_probe_work [snd_hda_intel]
<6>[ 60.946740] Call Trace:
<6>[ 60.946745] <TASK>
<6>[ 60.946763] __schedule+0x42c/0xa80
<6>[ 60.946797] schedule+0x3f/0xc0
<6>[ 60.946811] schedule_timeout+0x1be/0x2e0
<6>[ 60.946829] ? del_timer_sync+0xb0/0xb0
<6>[ 60.946849] ? 0xffffffff81000000
<6>[ 60.946864] ? wait_for_completion_timeout+0x79/0x120
<6>[ 60.946879] wait_for_completion_timeout+0xab/0x120
<6>[ 60.946906] snd_hdac_i915_init+0xa5/0xb0 [snd_hda_core]
<6>[ 60.946943] azx_probe_work+0x71/0x84c [snd_hda_intel]
<6>[ 60.946974] process_one_work+0x275/0x5c0
<6>[ 60.947010] worker_thread+0x37/0x370
<6>[ 60.947028] ? process_one_work+0x5c0/0x5c0
<6>[ 60.947038] kthread+0xef/0x120
<6>[ 60.947047] ? kthread_complete_and_exit+0x20/0x20
<6>[ 60.947065] ret_from_fork+0x22/0x30
<6>[ 60.947110] </TASK>
Signed-off-by: Ramalingam C <ramalingam.c at intel.com>
cc: Kai Vehmanen <kai.vehmanen at intel.com>
cc: Lucas De Marchi <lucas.demarchi at intel.com>
---
sound/hda/hdac_i915.c | 17 ++++++++++++++---
1 file changed, 14 insertions(+), 3 deletions(-)
diff --git a/sound/hda/hdac_i915.c b/sound/hda/hdac_i915.c
index d20a450a9a15..daaeebc5099e 100644
--- a/sound/hda/hdac_i915.c
+++ b/sound/hda/hdac_i915.c
@@ -6,6 +6,7 @@
#include <linux/init.h>
#include <linux/module.h>
#include <linux/pci.h>
+#include <linux/sched/sysctl.h>
#include <sound/core.h>
#include <sound/hdaudio.h>
#include <sound/hda_i915.h>
@@ -163,7 +164,8 @@ static bool dg1_gfx_present(void)
int snd_hdac_i915_init(struct hdac_bus *bus)
{
struct drm_audio_component *acomp;
- int err;
+ unsigned long timeout, ret = 0;
+ int err, i, itr_cnt;
if (!i915_gfx_present())
return -ENODEV;
@@ -182,9 +184,18 @@ int snd_hdac_i915_init(struct hdac_bus *bus)
if (!acomp->ops) {
if (!IS_ENABLED(CONFIG_MODULES) ||
!request_module("i915")) {
+ if (!sysctl_hung_task_timeout_secs) {
+ itr_cnt = 1;
+ timeout = msecs_to_jiffies(60 * 1000);
+ } else {
+ itr_cnt = DIV_ROUND_UP(60, sysctl_hung_task_timeout_secs);
+ timeout = msecs_to_jiffies(sysctl_hung_task_timeout_secs * 1000);
+ }
+
/* 60s timeout */
- wait_for_completion_timeout(&acomp->master_bind_complete,
- msecs_to_jiffies(30 * 1000));
+ for (i = 0; i < itr_cnt || !ret; i++)
+ ret = wait_for_completion_timeout(&acomp->master_bind_complete,
+ timeout);
}
}
if (!acomp->ops) {
--
2.20.1
More information about the dri-devel
mailing list