forked from rubenslte/android_kernel_samsung_msm8226
ASoC: ES705: fix mediaserver hang on restart
If mediaserver crashes it might hang in es705_wakeup() on restart, leading to watchdog killing systemserver and endless wait for service media.audio_policy. [10750.498808] kworker/0:3 D c0a354b4 0 19414 2 0x00000200 [10750.498840] [<c0a354b4>] (__schedule+0x590/0x7bc) from [<c0a35790>] (schedule_preempt_disabled+0x24/0x34) [10750.498862] [<c0a35790>] (schedule_preempt_disabled+0x24/0x34) from [<c0a34814>] (__mutex_lock_slowpath+0x170/0x1c8) [10750.498884] [<c0a34814>] (__mutex_lock_slowpath+0x170/0x1c8) from [<c0a3488c>] (mutex_lock+0x20/0x40) [10750.498908] [<c0a3488c>] (mutex_lock+0x20/0x40) from [<c08458f4>] (es705_bootup+0x2c/0xa4) [10750.498927] [<c08458f4>] (es705_bootup+0x2c/0xa4) from [<c08459a0>] (restore_std_fw+0x34/0x60) [10750.498946] [<c08459a0>] (restore_std_fw+0x34/0x60) from [<c08465b4>] (es705_sleep+0x84/0x1f4) [10750.498966] [<c08465b4>] (es705_sleep+0x84/0x1f4) from [<c01b012c>] (process_one_work+0x270/0x434) [10750.498987] [<c01b012c>] (process_one_work+0x270/0x434) from [<c01b0de4>] (worker_thread+0x198/0x2d8) [10750.499007] [<c01b0de4>] (worker_thread+0x198/0x2d8) from [<c01b52b0>] (kthread+0x84/0x90) [10750.499026] [<c01b52b0>] (kthread+0x84/0x90) from [<c0106ef0>] (kernel_thread_exit+0x0/0x8) [10750.499038] mediaserver D c0a354b4 0 21682 1 0x00000201 [10750.499068] [<c0a354b4>] (__schedule+0x590/0x7bc) from [<c0a33bd0>] (schedule_timeout+0x28/0x32c) [10750.499088] [<c0a33bd0>] (schedule_timeout+0x28/0x32c) from [<c0a35d64>] (wait_for_common+0x11c/0x15c) [10750.499108] [<c0a35d64>] (wait_for_common+0x11c/0x15c) from [<c01b0b14>] (wait_on_work+0xbc/0x108) [10750.499129] [<c01b0b14>] (wait_on_work+0xbc/0x108) from [<c01b0bd8>] (__cancel_work_timer+0x78/0xec) [10750.499149] [<c01b0bd8>] (__cancel_work_timer+0x78/0xec) from [<c0845a30>] (es705_wakeup+0x64/0x270) [10750.499169] [<c0845a30>] (es705_wakeup+0x64/0x270) from [<c08461ac>] (es705_power_control+0x154/0x4d8) [10750.499188] [<c08461ac>] (es705_power_control+0x154/0x4d8) from [<c0843360>] (es705_read_write_power_control+0x58/0x60) [10750.499209] [<c0843360>] (es705_read_write_power_control+0x58/0x60) from [<c0843664>] (es705_get_control_enum+0x18/0x64) [10750.499233] [<c0843664>] (es705_get_control_enum+0x18/0x64) from [<c07fcd8c>] (snd_ctl_ioctl+0x588/0xb1c) [10750.499258] [<c07fcd8c>] (snd_ctl_ioctl+0x588/0xb1c) from [<c02681fc>] (vfs_ioctl+0x28/0x3c) [10750.499279] [<c02681fc>] (vfs_ioctl+0x28/0x3c) from [<c0268c4c>] (do_vfs_ioctl+0x488/0x578) [10750.499297] [<c0268c4c>] (do_vfs_ioctl+0x488/0x578) from [<c0268d84>] (sys_ioctl+0x48/0x74) [10750.499317] [<c0268d84>] (sys_ioctl+0x48/0x74) from [<c010651c>] (__sys_trace_return+0x0/0x24) Change-Id: Ibe0750413b59301d0249c2c1a357880fc4dbde0f Signed-off-by: Kevin F. Haggerty <haggertk@lineageos.org>
This commit is contained in:
committed by
Francescodario Cuzzocrea
parent
38f1006d11
commit
82ee7cf405
@@ -1889,9 +1889,13 @@ static int es705_wakeup(struct es705_priv *es705)
|
||||
|
||||
if (delayed_work_pending(&es705->sleep_work) ||
|
||||
(es705->pm_state == ES705_POWER_SLEEP_PENDING)) {
|
||||
mutex_unlock(&es705->pm_mutex);
|
||||
cancel_delayed_work_sync(&es705->sleep_work);
|
||||
es705->pm_state = ES705_POWER_AWAKE;
|
||||
goto es705_wakeup_exit;
|
||||
mutex_lock(&es705->pm_mutex);
|
||||
if (es705->pm_state == ES705_POWER_SLEEP_PENDING) {
|
||||
es705->pm_state = ES705_POWER_AWAKE;
|
||||
goto es705_wakeup_exit;
|
||||
}
|
||||
}
|
||||
|
||||
/* Check if previous power state is not sleep then return */
|
||||
|
||||
Reference in New Issue
Block a user