• Jens Axboe's avatar
    io_uring: ensure that threads freeze on suspend · e4b4a13f
    Jens Axboe authored
    Alex reports that his system fails to suspend using 5.12-rc1, with the
    following dump:
    
    [  240.650300] PM: suspend entry (deep)
    [  240.650748] Filesystems sync: 0.000 seconds
    [  240.725605] Freezing user space processes ...
    [  260.739483] Freezing of tasks failed after 20.013 seconds (3 tasks refusing to freeze, wq_busy=0):
    [  260.739497] task:iou-mgr-446     state:S stack:    0 pid:  516 ppid:   439 flags:0x00004224
    [  260.739504] Call Trace:
    [  260.739507]  ? sysvec_apic_timer_interrupt+0xb/0x81
    [  260.739515]  ? pick_next_task_fair+0x197/0x1cde
    [  260.739519]  ? sysvec_reschedule_ipi+0x2f/0x6a
    [  260.739522]  ? asm_sysvec_reschedule_ipi+0x12/0x20
    [  260.739525]  ? __schedule+0x57/0x6d6
    [  260.739529]  ? del_timer_sync+0xb9/0x115
    [  260.739533]  ? schedule+0x63/0xd5
    [  260.739536]  ? schedule_timeout+0x219/0x356
    [  260.739540]  ? __next_timer_interrupt+0xf1/0xf1
    [  260.739544]  ? io_wq_manager+0x73/0xb1
    [  260.739549]  ? io_wq_create+0x262/0x262
    [  260.739553]  ? ret_from_fork+0x22/0x30
    [  260.739557] task:iou-mgr-517     state:S stack:    0 pid:  522 ppid:   439 flags:0x00004224
    [  260.739561] Call Trace:
    [  260.739563]  ? sysvec_apic_timer_interrupt+0xb/0x81
    [  260.739566]  ? pick_next_task_fair+0x16f/0x1cde
    [  260.739569]  ? sysvec_apic_timer_interrupt+0xb/0x81
    [  260.739571]  ? asm_sysvec_apic_timer_interrupt+0x12/0x20
    [  260.739574]  ? __schedule+0x5b7/0x6d6
    [  260.739578]  ? del_timer_sync+0x70/0x115
    [  260.739581]  ? schedule_timeout+0x211/0x356
    [  260.739585]  ? __next_timer_interrupt+0xf1/0xf1
    [  260.739588]  ? io_wq_check_workers+0x15/0x11f
    [  260.739592]  ? io_wq_manager+0x69/0xb1
    [  260.739596]  ? io_wq_create+0x262/0x262
    [  260.739600]  ? ret_from_fork+0x22/0x30
    [  260.739603] task:iou-wrk-517     state:S stack:    0 pid:  523 ppid:   439 flags:0x00004224
    [  260.739607] Call Trace:
    [  260.739609]  ? __schedule+0x5b7/0x6d6
    [  260.739614]  ? schedule+0x63/0xd5
    [  260.739617]  ? schedule_timeout+0x219/0x356
    [  260.739621]  ? __next_timer_interrupt+0xf1/0xf1
    [  260.739624]  ? task_thread.isra.0+0x148/0x3af
    [  260.739628]  ? task_thread_unbound+0xa/0xa
    [  260.739632]  ? task_thread_bound+0x7/0x7
    [  260.739636]  ? ret_from_fork+0x22/0x30
    [  260.739647] OOM killer enabled.
    [  260.739648] Restarting tasks ... done.
    [  260.740077] PM: suspend exit
    
    Play nice and ensure that any thread we create will call try_to_freeze()
    at an opportune time so that memory suspend can proceed. For the io-wq
    worker threads, mark them as PF_NOFREEZE. They could potentially be
    blocked for a long time.
    Reported-by: default avatarAlex Xu (Hello71) <alex_y_xu@yahoo.ca>
    Tested-by: default avatarAlex Xu (Hello71) <alex_y_xu@yahoo.ca>
    Signed-off-by: default avatarJens Axboe <axboe@kernel.dk>
    e4b4a13f
io-wq.c 26.7 KB