UPSTREAM: PM: hibernate: Complain about memory map mismatches during resume
The system memory map can change over a hibernation-restore cycle due to a defect in the platform firmware, and some of the page frames used by the kernel before hibernation may not be available any more during the subsequent restore which leads to the error below. [ T357] PM: Image loading progress: 0% [ T357] PM: Read 2681596 kbytes in 0.03 seconds (89386.53 MB/s) [ T357] PM: Error -14 resuming [ T357] PM: Failed to load hibernation image, recovering. [ T357] PM: Basic memory bitmaps freed [ T357] OOM killer enabled. [ T357] Restarting tasks ... done. [ T357] PM: resume from hibernation failed (-14) [ T357] PM: Hibernation image not present or could not be loaded. Add an error message to the unpack() function to allow problematic page frames to be identified and the source of the problem to be diagnosed more easily. This can save developers quite a bit of debugging time. Bug: 311131385 (cherry picked from commit 3363e0adb3931e987caa6404327b35ea2db231d8 git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git) Signed-off-by: Xueqin Luo <luoxueqin@kylinos.cn> [ rjw: New subject, edited changelog ] Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com> Change-Id: I8283510db3d3217f679e3cda0c0991f3b9437c18 Signed-off-by: Pavankumar Kondeti <quic_pkondeti@quicinc.com> Signed-off-by: Mukesh Pilaniya <quic_mpilaniy@quicinc.com>
This commit is contained in:
parent
d2c0f4c450
commit
7385b83107
1 changed files with 6 additions and 2 deletions
|
|
@ -2260,10 +2260,14 @@ static int unpack_orig_pfns(unsigned long *buf, struct memory_bitmap *bm)
|
|||
if (unlikely(buf[j] == BM_END_OF_MAP))
|
||||
break;
|
||||
|
||||
if (pfn_valid(buf[j]) && memory_bm_pfn_present(bm, buf[j]))
|
||||
if (pfn_valid(buf[j]) && memory_bm_pfn_present(bm, buf[j])) {
|
||||
memory_bm_set_bit(bm, buf[j]);
|
||||
else
|
||||
} else {
|
||||
if (!pfn_valid(buf[j]))
|
||||
pr_err(FW_BUG "Memory map mismatch at 0x%llx after hibernation\n",
|
||||
(unsigned long long)PFN_PHYS(buf[j]));
|
||||
return -EFAULT;
|
||||
}
|
||||
}
|
||||
|
||||
return 0;
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue