Skip to content
  • Chen Yu's avatar
    PM/hibernate: touch NMI watchdog when creating snapshot · 556b969a
    Chen Yu authored
    There is a problem that when counting the pages for creating the
    hibernation snapshot will take significant amount of time, especially on
    system with large memory.  Since the counting job is performed with irq
    disabled, this might lead to NMI lockup.  The following warning were
    found on a system with 1.5TB DRAM:
    
      Freezing user space processes ... (elapsed 0.002 seconds) done.
      OOM killer disabled.
      PM: Preallocating image memory...
      NMI watchdog: Watchdog detected hard LOCKUP on cpu 27
      CPU: 27 PID: 3128 Comm: systemd-sleep Not tainted 4.13.0-0.rc2.git0.1.fc27.x86_64 #1
      task: ffff9f01971ac000 task.stack: ffffb1a3f325c000
      RIP: 0010:memory_bm_find_bit+0xf4/0x100
      Call Trace:
       swsusp_set_page_free+0x2b/0x30
       mark_free_pages+0x147/0x1c0
       count_data_pages+0x41/0xa0
       hibernate_preallocate_memory+0x80/0x450
       hibernation_snapshot+0x58/0x410
       hibernate+0x17c/0x310
       state_store+0xdf/0xf0
       kobj_attr_store+0xf/0x20
       sysfs_kf_write+0x37/0x40
       kernfs_fop_write+0x11c/0x1a0
       __vfs_write+0x37/0x170
       vfs_write+0xb1/0x1a0
       SyS_write+0x55/0xc0
       entry_SYSCALL_64_fastpath+0x1a/0xa5
      ...
      done (allocated 6590003 pages)
      PM: Allocated 26360012 kbytes in 19.89 seconds (1325.28 MB/s)
    
    It has taken nearly 20 seconds(2.10GHz CPU) thus the NMI lockup was
    triggered.  In case the timeout of the NMI watch dog has been set to 1
    second, a safe interval should be 6590003/20 = 320k pages in theory.
    However there might also be some platforms running at a lower frequency,
    so feed the watchdog every 100k pages.
    
    [yu.c.chen@intel.com: simplification]
      Link: http://lkml.kernel.org/r/1503460079-29721-1-git-send-email-yu.c.chen@intel.com
    [yu.c.chen@intel.com: use interval of 128k instead of 100k to avoid modulus]
    Link: http://lkml.kernel.org/r/1503328098-5120-1-git-send-email-yu.c.chen@intel.com
    
    
    Signed-off-by: default avatarChen Yu <yu.c.chen@intel.com>
    Reported-by: default avatarJan Filipcewicz <jan.filipcewicz@intel.com>
    Suggested-by: default avatarMichal Hocko <mhocko@suse.com>
    Reviewed-by: default avatarMichal Hocko <mhocko@suse.com>
    Acked-by: default avatarRafael J. Wysocki <rafael.j.wysocki@intel.com>
    Cc: Mel Gorman <mgorman@techsingularity.net>
    Cc: Vlastimil Babka <vbabka@suse.cz>
    Cc: Len Brown <lenb@kernel.org>
    Cc: Dan Williams <dan.j.williams@intel.com>
    Cc: <stable@vger.kernel.org>
    Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
    Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
    556b969a