From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1753216AbbHMOeW (ORCPT ); Thu, 13 Aug 2015 10:34:22 -0400 Received: from smtp.nue.novell.com ([195.135.221.5]:45916 "EHLO smtp.nue.novell.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1753102AbbHMOd5 (ORCPT ); Thu, 13 Aug 2015 10:33:57 -0400 Date: Thu, 13 Aug 2015 22:33:37 +0800 From: joeyli To: "Lee, Chun-Yi" , linux-kernel@vger.kernel.org Cc: linux-kernel@vger.kernel.org, linux-efi@vger.kernel.org, linux-pm@vger.kernel.org, "Rafael J. Wysocki" , Matthew Garrett , Len Brown , Pavel Machek , Josh Boyer , Vojtech Pavlik , Matt Fleming , Jiri Kosina , "H. Peter Anvin" , Ingo Molnar Subject: Re: [PATCH v2 09/16] PM / hibernate: Reserve hibernation key and erase footprints Message-ID: <20150813143337.GA31748@linux-rxt1.site> References: <1439273796-25359-1-git-send-email-jlee@suse.com> <1439273796-25359-10-git-send-email-jlee@suse.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <1439273796-25359-10-git-send-email-jlee@suse.com> User-Agent: Mutt/1.5.21 (2010-09-15) Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Tue, Aug 11, 2015 at 02:16:29PM +0800, Lee, Chun-Yi wrote: > Add handler to parse the setup data that carrying hibernation key, it > reserves hibernation key by memblock then copies key to a allocated page > in later initcall stage. > [...snip] > diff --git a/arch/x86/power/hibernate_keys.c b/arch/x86/power/hibernate_keys.c > new file mode 100644 > index 0000000..357dc0e > --- /dev/null > +++ b/arch/x86/power/hibernate_keys.c > @@ -0,0 +1,78 @@ > +/* Hibernation keys handler > + * [...snip] > +static int __init init_hibernation_keys(void) > +{ > + struct hibernation_keys *keys; > + int ret = 0; > + > + if (!keys_phys_addr) > + return -ENODEV; > + > + keys = early_memremap(keys_phys_addr, sizeof(struct hibernation_keys)); > + > + /* Copy hibernation keys to a allocated page */ > + hibernation_keys = (struct hibernation_keys *)get_zeroed_page(GFP_KERNEL); > + if (hibernation_keys) { > + *hibernation_keys = *keys; > + } else { > + pr_err("PM: Allocate hibernation keys page failed\n"); > + ret = -ENOMEM; > + } > + > + /* Erase keys data no matter copy success or failed */ > + memset(keys, 0, sizeof(struct hibernation_keys)); > + early_memunmap(keys, sizeof(struct hibernation_keys)); > + memblock_free(keys_phys_addr, sizeof(struct hibernation_keys)); > + keys_phys_addr = 0; > + > + return ret; > +} > + > +late_initcall(init_hibernation_keys); Yu's reviewing triggered me rethinking... I afraid that's too late in late_initcall stage for copying key data that reserved by memblock. I will try to move this copy action to setup_arch(). Regards Joey Lee