RE: [PATCH][v10] PM / hibernate: Verify the consistent of e820 memory map by md5 digest
From: "Chen, Yu C" <yu.c.chen@intel.com>
Date: 2016-09-25 03:44:11
Also in:
lkml
Hi, Sorry for late response, I missed the thread in mailbox,
-----Original Message----- From: rjwysocki@gmail.com [mailto:rjwysocki@gmail.com] On Behalf Of Rafael J. Wysocki Sent: Monday, September 19, 2016 7:46 PM To: Chen, Yu C Cc: Linux PM; the arch/x86 maintainers; Linux Kernel Mailing List; Thomas Gleixner; Ingo Molnar; H. Peter Anvin; Wysocki, Rafael J; Pavel Machek; Lee Chun-Yi; Borislav Petkov Subject: Re: [PATCH][v10] PM / hibernate: Verify the consistent of e820 memory map by md5 digest On Fri, Sep 9, 2016 at 2:21 PM, Chen Yu [off-list ref] wrote:quoted
On some platforms, there is occasional panic triggered when trying to resume from hibernation, a typical panic looks like:[cut]quoted
@@ -211,10 +292,15 @@ int arch_hibernation_header_save(void *addr,unsigned int max_size)quoted
*/ int arch_hibernation_header_restore(void *addr) { + bool e820_mismatch = false;The extra local variable can be avoided if you structure the code slightly differently.quoted
struct restore_data_record *rdr = addr; restore_jump_address = rdr->jump_address; jump_address_phys = rdr->jump_address_phys; restore_cr3 = rdr->cr3; - return (rdr->magic == RESTORE_MAGIC) ? 0 : -EINVAL; + + e820_mismatch = hibernation_e820_mismatch(rdr->e820_digest);Also calling hibernation_e820_mismatch() before checking rdr->magic may not be useful at all.
Yes.
quoted
+ + return (rdr->magic == RESTORE_MAGIC) ? + (e820_mismatch ? -ENODEV : 0) : -EINVAL;So what about: if (rdr->magic != RESTORE_MAGIC) return -EINVAL; if (hibernation_e820_mismatch(rdr->e820_digest)) return -ENODEV; return 0;
Ok, will change it to this one. Thanks.
quoted
} --Thanks, Rafael
Thanks, Yu