Hi Yu, Thanks for your reviewing. On Thu, Aug 13, 2015 at 02:45:32AM +0000, Chen, Yu C wrote: > Hi Chun-yi, > On Tue, 2015-08-11 at 14:16 +0800, Lee, Chun-Yi wrote: > > > +/* A page used to keep hibernation keys */ > > +static struct hibernation_keys *hibernation_keys; > > + > > +void __init parse_hibernation_keys(u64 phys_addr, u32 data_len) > > +{ > > + struct setup_data *hibernation_setup_data; > > + > > + /* Reserve keys memory, will copy and erase in init_hibernation_keys() */ > > + keys_phys_addr = phys_addr + sizeof(struct setup_data); > > + memblock_reserve(keys_phys_addr, sizeof(struct hibernation_keys)); > > + > > + /* clear hibernation_data */ > > + hibernation_setup_data = early_memremap(phys_addr, data_len); > > + if (!hibernation_setup_data) > > + return; > > + > should we invoke memblock_free if early_memremap failed? > > Best Regards, > Yu > > Should not free memblock reservation of key data. Using memblock_reserve is for reserve hibernation key until init_hibernation_keys() copy key data to arbitrary allocated page. Using early_memremap is for cleaning the setup_data header that's used to carry key. That above 2 actions are different purposes. So, even the action of cleaning setup_data failed, it doesn't affect to the action for reserve hibernation key by memblock until copy it. Thanks a lot! Joey Lee -- To unsubscribe from this list: send the line "unsubscribe linux-efi" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html