> > I have question related to suspend flow and completion signal: > > > > Is it possible that a completion signal could be missed in S3 flow > > after processes are frozen? > > What do you mean by "completion signal"? In our case we have an interrupt that signals completion of the interrupt using complete() For a waiting thread. > > > The scenario is: > > > > Suspend_thread->...->dpm_suspend_start->suspend- > >Wait_for_completion_t > > imeout->do > > es not receive signal and times out > > dpm_suspend_start doesn't run until processes are frozen, and frozen processes > cannot be waiting for a completion. Therefore this can't happen. > > > Interrupt->complete-> > > > > This happens very rare, there are other reason why > > wait_for_completion_times out like interrupt not received but I just > > want To make sure if completion signal is not lost during S3. > > Of course it's possible that interrupts will not be delivered while the computer is > suspending or suspended. Those interrupts should be delivered later, when the > computer wakes up again. > Our interrupt is configured with IRQ_NO_SUSPEND so we expect interrupts during Suspend also. So here is what I'm seeing in the panic logs: <4>[ 7960.661939] Call Trace: <4>[ 7960.661953] [<c12384a5>] ? sub_preempt_count+0x85/0xc0 <4>[ 7960.661965] [<c12735b5>] refrigerator+0xa5/0x160 <4>[ 7960.661977] [<c125f64d>] get_signal_to_deliver+0x9ad/0xdc0 <4>[ 7960.661991] [<c120257b>] do_signal+0x6b/0xa20 <4>[ 7960.662003] [<c186ffbd>] ? schedule_hrtimeout_range+0x1cd/0x220 <4>[ 7960.662018] [<c122d4a4>] ? pmu_sc_irq+0x364/0x3d0 <==============This is where in the interrupt we signal completion using complete() <4>[ 7960.662030] [<c18715f3>] ? _raw_spin_unlock_irqrestore+0x23/0x50 <4>[ 7960.662043] [<c12384a5>] ? sub_preempt_count+0x85/0xc0 <4>[ 7960.662056] [<c134c162>] ? sys_epoll_wait+0x72/0x300 <4>[ 7960.662069] [<c1242c40>] ? default_wake_function+0x0/0x20 <4>[ 7960.662082] [<c1202f85>] do_notify_resume+0x55/0x90 <4>[ 7960.662094] [<c1871e99>] work_notifysig+0x9/0x1 <6>[ 7960.380768] suspend R running 0 19 2 0x00000000 <4>[ 7960.380780] f78e3c94 00000000 c1204760 f78e3c8c c12047eb f78e3c94 00000000 f78e3c04 <4>[ 7960.380800] 00000004 00000000 00030002 c1852942 00000001 00000001 00000282 f78e3c5c <4>[ 7960.380820] f78e3c30 c12384a5 00000282 f78e3c3c c18715f3 f7868000 f78e3c84 c186eebc <4>[ 7960.380840] Call Trace: <4>[ 7960.380850] [<c1204760>] ? do_invalid_op+0x0/0xb0 <4>[ 7960.380862] [<c12047eb>] ? do_invalid_op+0x8b/0xb0 <4>[ 7960.380875] [<c1852942>] ? pmu_pci_set_power_state+0x322/0x6e0 <==== here is where wait_for_completion_timeout call BUG() after timeout. <4>[ 7960.380888] [<c12384a5>] ? sub_preempt_count+0x85/0xc0 <4>[ 7960.380901] [<c18715f3>] ? _raw_spin_unlock_irqrestore+0x23/0x50 <4>[ 7960.380913] [<c186eebc>] ? schedule_timeout+0x1dc/0x430 <4>[ 7960.380926] [<c1204760>] ? do_invalid_op+0x0/0xb0 <4>[ 7960.380937] [<c14b916c>] ? trace_hardirqs_off_thunk+0xc/0x10 <4>[ 7960.380950] [<c187244b>] ? error_code+0x6b/0x70 <4>[ 7960.380961] [<c186dd96>] ? wait_for_common+0x96/0x120 <4>[ 7960.380973] [<c1204760>] ? do_invalid_op+0x0/0xb0 <4>[ 7960.380985] [<c1852942>] ? pmu_pci_set_power_state+0x322/0x6e0 <4>[ 7960.380998] [<c14b502a>] ? put_dec+0x2a/0xa0 <4>[ 7960.381011] [<c14b502a>] ? put_dec+0x2a/0xa0 <4>[ 7960.381025] [<c12384a5>] ? sub_preempt_count+0x85/0xc0 <4>[ 7960.381038] [<c14cee6e>] ? pci_platform_power_transition+0x3e/0xa0 <4>[ 7960.381051] [<c18715f3>] ? _raw_spin_unlock_irqrestore+0x23/0x50 <4>[ 7960.381064] [<c14cf5df>] ? pci_set_power_state+0x3f/0x2c0 <4>[ 7960.381077] [<c14ced7c>] ? pci_update_current_state+0x3c/0x50 <4>[ 7960.381090] [<c14d180e>] ? pci_pm_runtime_resume+0x5e/0xa0 <4>[ 7960.381102] [<c12384a5>] ? sub_preempt_count+0x85/0xc0 <4>[ 7960.381114] [<c14d17b0>] ? pci_pm_runtime_resume+0x0/0xa0 <4>[ 7960.381126] [<c1554d7b>] ? rpm_callback+0x3b/0x70 <4>[ 7960.381137] [<c155577c>] ? rpm_resume+0x37c/0x5c0 <4>[ 7960.381150] [<c124923b>] ? release_console_sem+0x37b/0x3c0 <4>[ 7960.381164] [<c1238593>] ? add_preempt_count+0xb3/0xf0 <4>[ 7960.381176] [<c1556609>] ? __pm_runtime_resume+0x49/0xc0 <4>[ 7960.381189] [<c14d1b71>] ? pci_pm_prepare+0x21/0x60 <4>[ 7960.381200] [<c1553947>] ? dpm_suspend_start+0x137/0x7d0 <4>[ 7960.381213] [<c12384a5>] ? sub_preempt_count+0x85/0xc0 <4>[ 7960.381225] [<c18715f3>] ? _raw_spin_unlock_irqrestore+0x23/0x50 <4>[ 7960.381237] [<c126f548>] ? up+0x28/0x40 <4>[ 7960.381250] [<c1288f13>] ? suspend_devices_and_enter+0x73/0x1d0 <4>[ 7960.381262] [<c1289196>] ? enter_state+0x126/0x1e0 <4>[ 7960.381273] [<c1289277>] ? pm_suspend+0x27/0x70 <4>[ 7960.381285] [<c128acba>] ? suspend+0x8a/0x160 <4>[ 7960.381296] [<c186e445>] ? schedule+0x545/0x9e0 <4>[ 7960.381310] [<c12384a5>] ? sub_preempt_count+0x85/0xc0 <4>[ 7960.381322] [<c1265833>] ? worker_thread+0x123/0x2c0 <4>[ 7960.381333] [<c186e445>] ? schedule+0x545/0x9e0 <4>[ 7960.381346] [<c128ac30>] ? suspend+0x0/0x160 <4>[ 7960.381357] [<c12690d0>] ? autoremove_wake_function+0x0/0x50 <4>[ 7960.381369] [<c1265710>] ? worker_thread+0x0/0x2c0 <4>[ 7960.381381] [<c1268c34>] ? kthread+0x74/0x80 <4>[ 7960.381393] [<c1268bc0>] ? kthread+0x0/0x80 <4>[ 7960.381405] [<c120357a>] ? kernel_thread_helper+0x6/0x1 So my question, is it possible that the complete() called in interrupt context can be missed During S3? -Illyas
Attachment:
smime.p7s
Description: S/MIME cryptographic signature
_______________________________________________ linux-pm mailing list linux-pm@xxxxxxxxxxxxxxxxxxxxxxxxxx https://lists.linuxfoundation.org/mailman/listinfo/linux-pm