summaryrefslogtreecommitdiff
path: root/kernel/power
diff options
context:
space:
mode:
authorStephen Rothwell <sfr@canb.auug.org.au>2019-01-25 14:43:54 +1100
committerStephen Rothwell <sfr@canb.auug.org.au>2019-01-25 14:43:54 +1100
commit5463235fb3e113017491fc58b1c44b50dbf512af (patch)
tree106e27b43f38331f0fb6d0707fe08a8ea4022c30 /kernel/power
parent20e7994d20fb52d23a2796bef5de282e136d7ffe (diff)
parentfc4d4bfc99dadacb276ab575cd3d4fc4e46e136d (diff)
downloadlinux-next-5463235fb3e113017491fc58b1c44b50dbf512af.tar.gz
Merge branch 'akpm-current/current'
Diffstat (limited to 'kernel/power')
-rw-r--r--kernel/power/snapshot.c17
1 files changed, 11 insertions, 6 deletions
diff --git a/kernel/power/snapshot.c b/kernel/power/snapshot.c
index 640b2034edd6..4802b039b89f 100644
--- a/kernel/power/snapshot.c
+++ b/kernel/power/snapshot.c
@@ -1215,14 +1215,16 @@ static struct page *saveable_highmem_page(struct zone *zone, unsigned long pfn)
if (!pfn_valid(pfn))
return NULL;
- page = pfn_to_page(pfn);
- if (page_zone(page) != zone)
+ page = pfn_to_online_page(pfn);
+ if (!page || page_zone(page) != zone)
return NULL;
BUG_ON(!PageHighMem(page));
- if (swsusp_page_is_forbidden(page) || swsusp_page_is_free(page) ||
- PageReserved(page))
+ if (swsusp_page_is_forbidden(page) || swsusp_page_is_free(page))
+ return NULL;
+
+ if (PageReserved(page) || PageOffline(page))
return NULL;
if (page_is_guard(page))
@@ -1277,8 +1279,8 @@ static struct page *saveable_page(struct zone *zone, unsigned long pfn)
if (!pfn_valid(pfn))
return NULL;
- page = pfn_to_page(pfn);
- if (page_zone(page) != zone)
+ page = pfn_to_online_page(pfn);
+ if (!page || page_zone(page) != zone)
return NULL;
BUG_ON(PageHighMem(page));
@@ -1286,6 +1288,9 @@ static struct page *saveable_page(struct zone *zone, unsigned long pfn)
if (swsusp_page_is_forbidden(page) || swsusp_page_is_free(page))
return NULL;
+ if (PageOffline(page))
+ return NULL;
+
if (PageReserved(page)
&& (!kernel_page_present(page) || pfn_is_nosave(pfn)))
return NULL;