diff options
Diffstat (limited to 'kernel/power')
-rw-r--r-- | kernel/power/hibernate.c | 4 | ||||
-rw-r--r-- | kernel/power/snapshot.c | 10 |
2 files changed, 7 insertions, 7 deletions
diff --git a/kernel/power/hibernate.c b/kernel/power/hibernate.c index a881c6a7ba74..33c79b6105c5 100644 --- a/kernel/power/hibernate.c +++ b/kernel/power/hibernate.c | |||
@@ -300,12 +300,12 @@ static int create_image(int platform_mode) | |||
300 | save_processor_state(); | 300 | save_processor_state(); |
301 | trace_suspend_resume(TPS("machine_suspend"), PM_EVENT_HIBERNATE, true); | 301 | trace_suspend_resume(TPS("machine_suspend"), PM_EVENT_HIBERNATE, true); |
302 | error = swsusp_arch_suspend(); | 302 | error = swsusp_arch_suspend(); |
303 | /* Restore control flow magically appears here */ | ||
304 | restore_processor_state(); | ||
303 | trace_suspend_resume(TPS("machine_suspend"), PM_EVENT_HIBERNATE, false); | 305 | trace_suspend_resume(TPS("machine_suspend"), PM_EVENT_HIBERNATE, false); |
304 | if (error) | 306 | if (error) |
305 | printk(KERN_ERR "PM: Error %d creating hibernation image\n", | 307 | printk(KERN_ERR "PM: Error %d creating hibernation image\n", |
306 | error); | 308 | error); |
307 | /* Restore control flow magically appears here */ | ||
308 | restore_processor_state(); | ||
309 | if (!in_suspend) | 309 | if (!in_suspend) |
310 | events_check_enabled = false; | 310 | events_check_enabled = false; |
311 | 311 | ||
diff --git a/kernel/power/snapshot.c b/kernel/power/snapshot.c index 9a0178c2ac1d..b02228411d57 100644 --- a/kernel/power/snapshot.c +++ b/kernel/power/snapshot.c | |||
@@ -835,9 +835,9 @@ static bool memory_bm_pfn_present(struct memory_bitmap *bm, unsigned long pfn) | |||
835 | */ | 835 | */ |
836 | static bool rtree_next_node(struct memory_bitmap *bm) | 836 | static bool rtree_next_node(struct memory_bitmap *bm) |
837 | { | 837 | { |
838 | bm->cur.node = list_entry(bm->cur.node->list.next, | 838 | if (!list_is_last(&bm->cur.node->list, &bm->cur.zone->leaves)) { |
839 | struct rtree_node, list); | 839 | bm->cur.node = list_entry(bm->cur.node->list.next, |
840 | if (&bm->cur.node->list != &bm->cur.zone->leaves) { | 840 | struct rtree_node, list); |
841 | bm->cur.node_pfn += BM_BITS_PER_BLOCK; | 841 | bm->cur.node_pfn += BM_BITS_PER_BLOCK; |
842 | bm->cur.node_bit = 0; | 842 | bm->cur.node_bit = 0; |
843 | touch_softlockup_watchdog(); | 843 | touch_softlockup_watchdog(); |
@@ -845,9 +845,9 @@ static bool rtree_next_node(struct memory_bitmap *bm) | |||
845 | } | 845 | } |
846 | 846 | ||
847 | /* No more nodes, goto next zone */ | 847 | /* No more nodes, goto next zone */ |
848 | bm->cur.zone = list_entry(bm->cur.zone->list.next, | 848 | if (!list_is_last(&bm->cur.zone->list, &bm->zones)) { |
849 | bm->cur.zone = list_entry(bm->cur.zone->list.next, | ||
849 | struct mem_zone_bm_rtree, list); | 850 | struct mem_zone_bm_rtree, list); |
850 | if (&bm->cur.zone->list != &bm->zones) { | ||
851 | bm->cur.node = list_entry(bm->cur.zone->leaves.next, | 851 | bm->cur.node = list_entry(bm->cur.zone->leaves.next, |
852 | struct rtree_node, list); | 852 | struct rtree_node, list); |
853 | bm->cur.node_pfn = 0; | 853 | bm->cur.node_pfn = 0; |