Merge branch 'pm-sleep'
authorRafael J. Wysocki <rafael.j.wysocki@intel.com>
Thu, 18 Aug 2016 01:27:08 +0000 (03:27 +0200)
committerRafael J. Wysocki <rafael.j.wysocki@intel.com>
Thu, 18 Aug 2016 01:27:08 +0000 (03:27 +0200)
* pm-sleep:
  PM / hibernate: Fix rtree_next_node() to avoid walking off list ends
  x86/power/64: Use __pa() for physical address computation
  PM / sleep: Update some system sleep documentation

1  2 
kernel/power/snapshot.c

diff --combined kernel/power/snapshot.c
@@@ -835,9 -835,9 +835,9 @@@ static bool memory_bm_pfn_present(struc
   */
  static bool rtree_next_node(struct memory_bitmap *bm)
  {
-       bm->cur.node = list_entry(bm->cur.node->list.next,
-                                 struct rtree_node, list);
-       if (&bm->cur.node->list != &bm->cur.zone->leaves) {
+       if (!list_is_last(&bm->cur.node->list, &bm->cur.zone->leaves)) {
+               bm->cur.node = list_entry(bm->cur.node->list.next,
+                                         struct rtree_node, list);
                bm->cur.node_pfn += BM_BITS_PER_BLOCK;
                bm->cur.node_bit  = 0;
                touch_softlockup_watchdog();
        }
  
        /* No more nodes, goto next zone */
-       bm->cur.zone = list_entry(bm->cur.zone->list.next,
+       if (!list_is_last(&bm->cur.zone->list, &bm->zones)) {
+               bm->cur.zone = list_entry(bm->cur.zone->list.next,
                                  struct mem_zone_bm_rtree, list);
-       if (&bm->cur.zone->list != &bm->zones) {
                bm->cur.node = list_entry(bm->cur.zone->leaves.next,
                                          struct rtree_node, list);
                bm->cur.node_pfn = 0;
@@@ -1627,11 -1627,11 +1627,11 @@@ static unsigned long minimum_image_size
        unsigned long size;
  
        size = global_page_state(NR_SLAB_RECLAIMABLE)
 -              + global_page_state(NR_ACTIVE_ANON)
 -              + global_page_state(NR_INACTIVE_ANON)
 -              + global_page_state(NR_ACTIVE_FILE)
 -              + global_page_state(NR_INACTIVE_FILE)
 -              - global_page_state(NR_FILE_MAPPED);
 +              + global_node_page_state(NR_ACTIVE_ANON)
 +              + global_node_page_state(NR_INACTIVE_ANON)
 +              + global_node_page_state(NR_ACTIVE_FILE)
 +              + global_node_page_state(NR_INACTIVE_FILE)
 +              - global_node_page_state(NR_FILE_MAPPED);
  
        return saveable <= size ? 0 : saveable - size;
  }