[alsa-devel] PM issue with Intel SST Atom driver
Takashi Iwai
tiwai at suse.de
Mon Apr 24 11:00:45 CEST 2017
On Mon, 24 Apr 2017 09:15:04 +0200,
Takashi Iwai wrote:
>
> > > But I wondered why this happened at all, and noticed that the machine
> > > driver (in my case bytcr_rt5640) has no its own PM ops. But hooking
> > > the snd_soc_pm_ops there seems causing a hang up at suspend by some
> > > reason.
> >
> > O yes, thats due to double suspend
> >
> > See 3639ac1cd5177685a5c8abb7230096b680e1d497
>
> I haven't followed the code deeply enough. Who is calling to trigger
> double-suspend?
Never mind, I figured out that it's in sst_soc_prepare().
So, it's specific to Atom (and Haswell).
> > Maybe this wasn't a big problem until now since the BYT/CHT didn't
> > > support the suspend/resume properly in the past. But now PM suspend
> > > is supported on these devices, so the problem surfaced more often.
> >
> > The Chromebooks shipped on BSW use this method so..
>
> Interestingly, when I checked another CHT machine with cx2072x codec,
> the PM works (although the playback doesn't restart at resume
> properly).
>
> Wait... Now closely looking at the code, I noticed the
> "ignore_suspend" marks in many places in bytcr_rt5640.c. Why is this
> needed?
>
> Other two machine drivers I've tested (cht_bsw_rt5672 and Pierre's
> cht_cx2072x) have no such a flag set, thus they work. With the
> ignore_suspend, the PCM suspend calls are prevented, and it shall hit
> the problem above.
Removing ignore_suspend makes the PM succeeds. But it hits some other
ugly kernel bugs.
At suspending:
[ 567.913706] WARNING: CPU: 3 PID: 3144 at ../kernel/softirq.c:161 __local_bh_enable_ip+0x71/0x90
[ 567.913842] CPU: 3 PID: 3144 Comm: systemd-sleep Tainted: G C O 4.11.0-rc7-3.g64b92e2-default #1
[ 567.913847] Call Trace:
[ 567.913861] dump_stack+0x5c/0x7a
[ 567.913869] __warn+0xbe/0xe0
[ 567.913879] __local_bh_enable_ip+0x71/0x90
[ 567.913891] sst_create_block+0x83/0xd0 [snd_intel_sst_core]
[ 567.913906] sst_create_block_and_ipc_msg+0x4a/0x70 [snd_intel_sst_core]
[ 567.913920] sst_prepare_and_post_msg+0x1a0/0x960 [snd_intel_sst_core]
[ 567.913936] sst_pause_stream+0x9b/0x110 [snd_intel_sst_core]
[ 567.913952] sst_platform_pcm_trigger+0x123/0x1b0 [snd_soc_sst_atom_hifi2_platform]
[ 567.913980] soc_pcm_trigger+0xa0/0x120 [snd_soc_core]
[ 567.913996] ? sst_soc_complete+0xa0/0xa0 [snd_soc_sst_atom_hifi2_platform]
[ 567.914012] dpcm_fe_dai_do_trigger+0xc8/0x1f0 [snd_soc_core]
[ 567.914034] snd_pcm_do_suspend+0x3d/0x40 [snd_pcm]
[ 567.914054] snd_pcm_action_single+0x2a/0x70 [snd_pcm]
[ 567.914065] snd_pcm_suspend+0x2c/0x40 [snd_pcm]
[ 567.914076] snd_pcm_suspend_all+0x32/0x70 [snd_pcm]
[ 567.914092] snd_soc_suspend+0x15c/0x3d0 [snd_soc_core]
[ 567.914102] sst_soc_prepare+0x23/0xa0 [snd_soc_sst_atom_hifi2_platform]
[ 567.914108] dpm_prepare+0x237/0x480
[ 567.914113] dpm_suspend_start+0xd/0x50
[ 567.914117] suspend_devices_and_enter+0xac/0x6f0
[ 567.914123] pm_suspend+0x304/0x380
[ 567.914128] state_store+0x5e/0x90
[ 567.914134] kernfs_fop_write+0xfc/0x190
[ 567.914140] __vfs_write+0x23/0x140
[ 567.914146] ? handle_mm_fault+0xd3/0x240
[ 567.914148] ? security_file_permission+0x36/0xb0
[ 567.914151] vfs_write+0xb0/0x190
[ 567.914156] SyS_write+0x42/0x90
[ 567.914160] entry_SYSCALL_64_fastpath+0x1e/0xad
[ 567.914164] ---[ end trace b3703d94611f9a06 ]---
[ 567.914176] BUG: scheduling while atomic: systemd-sleep/3144/0x00000003
[ 567.914260] CPU: 3 PID: 3144 Comm: systemd-sleep Tainted: G WC O 4.11.0-rc7-3.g64b92e2-default #1
[ 567.914262] Call Trace:
[ 567.914273] dump_stack+0x5c/0x7a
[ 567.914278] __schedule_bug+0x55/0x70
[ 567.914284] __schedule+0x63c/0x8c0
[ 567.914290] schedule+0x3d/0x90
[ 567.914295] schedule_timeout+0x16b/0x320
[ 567.914301] ? del_timer_sync+0x50/0x50
[ 567.914308] ? sst_wait_timeout+0xa9/0x170 [snd_intel_sst_core]
[ 567.914313] ? sst_wait_timeout+0xa9/0x170 [snd_intel_sst_core]
[ 567.914316] ? remove_wait_queue+0x60/0x60
[ 567.914321] ? sst_prepare_and_post_msg+0x275/0x960 [snd_intel_sst_core]
[ 567.914326] ? sst_pause_stream+0x9b/0x110 [snd_intel_sst_core]
[ 567.914333] ? sst_platform_pcm_trigger+0x123/0x1b0 [snd_soc_sst_atom_hifi2_platform]
[ 567.914346] ? soc_pcm_trigger+0xa0/0x120 [snd_soc_core]
[ 567.914353] ? sst_soc_complete+0xa0/0xa0 [snd_soc_sst_atom_hifi2_platform]
[ 567.914365] ? dpcm_fe_dai_do_trigger+0xc8/0x1f0 [snd_soc_core]
[ 567.914373] ? snd_pcm_do_suspend+0x3d/0x40 [snd_pcm]
[ 567.914381] ? snd_pcm_action_single+0x2a/0x70 [snd_pcm]
[ 567.914389] ? snd_pcm_suspend+0x2c/0x40 [snd_pcm]
[ 567.914396] ? snd_pcm_suspend_all+0x32/0x70 [snd_pcm]
[ 567.914408] ? snd_soc_suspend+0x15c/0x3d0 [snd_soc_core]
[ 567.914415] ? sst_soc_prepare+0x23/0xa0 [snd_soc_sst_atom_hifi2_platform]
[ 567.914418] ? dpm_prepare+0x237/0x480
[ 567.914421] ? dpm_suspend_start+0xd/0x50
[ 567.914423] ? suspend_devices_and_enter+0xac/0x6f0
[ 567.914426] ? pm_suspend+0x304/0x380
[ 567.914428] ? state_store+0x5e/0x90
[ 567.914430] ? kernfs_fop_write+0xfc/0x190
[ 567.914433] ? __vfs_write+0x23/0x140
[ 567.914437] ? handle_mm_fault+0xd3/0x240
[ 567.914439] ? security_file_permission+0x36/0xb0
[ 567.914442] ? vfs_write+0xb0/0x190
[ 567.914445] ? SyS_write+0x42/0x90
[ 567.914447] ? entry_SYSCALL_64_fastpath+0x1e/0xad
[ 567.914857] BUG: scheduling while atomic: systemd-sleep/3144/0x7fffffff
[ 567.915222] CPU: 1 PID: 3144 Comm: systemd-sleep Tainted: G WC O 4.11.0-rc7-3.g64b92e2-default #1
[ 567.915231] Call Trace:
[ 567.915300] dump_stack+0x5c/0x7a
[ 567.915324] __schedule_bug+0x55/0x70
[ 567.915345] __schedule+0x63c/0x8c0
[ 567.915375] schedule+0x3d/0x90
[ 567.915392] async_synchronize_cookie_domain+0x85/0x130
[ 567.915414] ? remove_wait_queue+0x60/0x60
[ 567.915472] dapm_power_widgets+0x3d4/0x9c0 [snd_soc_core]
[ 567.915530] ? sst_soc_complete+0xa0/0xa0 [snd_soc_sst_atom_hifi2_platform]
[ 567.915579] ? snd_soc_dapm_stream_event+0x87/0xa0 [snd_soc_core]
[ 567.915628] ? snd_soc_dapm_stream_event+0x87/0xa0 [snd_soc_core]
[ 567.915674] ? snd_soc_suspend+0x39c/0x3d0 [snd_soc_core]
[ 567.915699] ? sst_soc_prepare+0x23/0xa0 [snd_soc_sst_atom_hifi2_platform]
[ 567.915712] ? dpm_prepare+0x237/0x480
[ 567.915723] ? dpm_suspend_start+0xd/0x50
[ 567.915738] ? suspend_devices_and_enter+0xac/0x6f0
[ 567.915749] ? pm_suspend+0x304/0x380
[ 567.915757] ? state_store+0x5e/0x90
[ 567.915771] ? kernfs_fop_write+0xfc/0x190
[ 567.915785] ? __vfs_write+0x23/0x140
[ 567.915800] ? handle_mm_fault+0xd3/0x240
[ 567.915814] ? security_file_permission+0x36/0xb0
[ 567.915824] ? vfs_write+0xb0/0x190
[ 567.915834] ? SyS_write+0x42/0x90
[ 567.915846] ? entry_SYSCALL_64_fastpath+0x1e/0xad
... and at resume:
[ 574.320255] BUG: scheduling while atomic: alsa-source-3/1729/0x00000003
[ 574.320435] CPU: 1 PID: 1729 Comm: alsa-source-3 Tainted: G WC O 4.11.0-rc7-3.g64b92e2-default #1
[ 574.320440] Call Trace:
[ 574.320474] dump_stack+0x5c/0x7a
[ 574.320484] __schedule_bug+0x55/0x70
[ 574.320493] __schedule+0x63c/0x8c0
[ 574.320503] schedule+0x3d/0x90
[ 574.320509] schedule_timeout+0x16b/0x320
[ 574.320517] ? del_timer_sync+0x50/0x50
[ 574.320529] ? sst_wait_timeout+0xa9/0x170 [snd_intel_sst_core]
[ 574.320535] ? sst_wait_timeout+0xa9/0x170 [snd_intel_sst_core]
[ 574.320539] ? remove_wait_queue+0x60/0x60
[ 574.320546] ? sst_prepare_and_post_msg+0x275/0x960 [snd_intel_sst_core]
[ 574.320553] ? sst_resume_stream+0x5b/0x100 [snd_intel_sst_core]
[ 574.320564] ? sst_platform_pcm_trigger+0x6b/0x1b0 [snd_soc_sst_atom_hifi2_platform]
[ 574.320586] ? soc_pcm_trigger+0xa0/0x120 [snd_soc_core]
[ 574.320603] ? dpcm_fe_dai_do_trigger+0xc8/0x1f0 [snd_soc_core]
[ 574.320618] ? snd_pcm_action_single+0x2a/0x70 [snd_pcm]
[ 574.320628] ? snd_pcm_common_ioctl1+0x2e5/0xc60 [snd_pcm]
[ 574.320634] ? do_signal+0x23/0x670
[ 574.320644] ? snd_pcm_capture_ioctl1+0x117/0x280 [snd_pcm]
[ 574.320648] ? ktime_get_ts64+0x4a/0xf0
[ 574.320659] ? snd_pcm_capture_ioctl+0x2a/0x30 [snd_pcm]
[ 574.320663] ? do_vfs_ioctl+0x8f/0x5d0
[ 574.320667] ? __fget+0x70/0xc0
[ 574.320671] ? SyS_ioctl+0x74/0x80
[ 574.320675] ? entry_SYSCALL_64_fastpath+0x1e/0xad
[ 574.320799] show_signal_msg: 8 callbacks suppressed
[ 574.320805] alsa-source-3[1729]: segfault at 7f28e8052000 ip 00007f28f635eac4 sp 00007f28f0ad4be8 error 6
[ 574.320882] BUG: scheduling while atomic: alsa-source-3/1729/0x7fffffff
[ 574.321040] CPU: 1 PID: 1729 Comm: alsa-source-3 Tainted: G WC O 4.11.0-rc7-3.g64b92e2-default #1
[ 574.321043] Call Trace:
[ 574.321068] dump_stack+0x5c/0x7a
[ 574.321076] __schedule_bug+0x55/0x70
[ 574.321083] __schedule+0x63c/0x8c0
[ 574.321093] ? wakeup_preempt_entity.isra.58+0x3c/0x50
[ 574.321097] schedule+0x3d/0x90
[ 574.321104] schedule_timeout+0x25a/0x320
[ 574.321109] ? check_preempt_curr+0x79/0x90
[ 574.321113] ? select_task_rq_rt+0x57/0xa0
[ 574.321117] ? sched_clock+0x5/0x10
[ 574.321120] ? sched_clock_cpu+0xc/0xc0
[ 574.321124] ? wait_for_completion+0xe6/0x150
[ 574.321128] ? wait_for_completion+0xe6/0x150
[ 574.321131] ? wake_up_q+0x80/0x80
[ 574.321135] ? do_coredump+0x3ab/0xf10
[ 574.321139] ? __wake_up+0x34/0x50
[ 574.321144] ? get_signal+0x33b/0x660
[ 574.321150] ? do_signal+0x23/0x670
[ 574.321154] ? __send_signal+0x213/0x4d0
[ 574.321160] ? force_sig_info_fault+0x88/0xd0
[ 574.321166] ? exit_to_usermode_loop+0x71/0xb0
[ 574.321169] ? prepare_exit_to_usermode+0x2a/0x30
[ 574.321172] ? retint_user+0x8/0x10
There seem many beasts hidden in this jungle...
Takashi
More information about the Alsa-devel
mailing list