[linux-pm] [PATCH 3/4] x86 hibernate: Mark ACPI NVS memory region at startup

Zhang Rui rui.zhang at intel.com
Wed Oct 29 02:21:31 PDT 2008


Hi, sorry for the delay,

On Sun, 2008-10-26 at 20:29 +0800, Rafael J. Wysocki wrote:
> On Sunday, 26 of October 2008, Pavel Machek wrote:
> > On Wed 2008-10-22 22:53:15, Rafael J. Wysocki wrote:
> > > From: Rafael J. Wysocki <rjw at sisk.pl>
> > > 
> > > x86 hibernate: Mark ACPI NVS memory region at startup
> > > 
> > > Introduce new initcall for marking the ACPI NVS memory at startup, so
> > > that it can be saved/restore during hibernation/resume.
> > > 
> > > Based on a patch by Zhang Rui.
> > > 
> > > Signed-off-by: Rafael J. Wysocki <rjw at sisk.pl>
> > > Cc: Zhang Rui <rui.zhang at intel.com>
> > > ---
> > >  arch/x86/kernel/e820.c |   25 +++++++++++++++++++++++++
> > >  1 file changed, 25 insertions(+)
> > > 
> > > Index: linux-2.6/arch/x86/kernel/e820.c
> > > ===================================================================
> > > --- linux-2.6.orig/arch/x86/kernel/e820.c
> > > +++ linux-2.6/arch/x86/kernel/e820.c
> > > @@ -20,6 +20,7 @@
> > >  #include <linux/pfn.h>
> > >  #include <linux/suspend.h>
> > >  #include <linux/firmware-map.h>
> > > +#include <linux/efi.h>
> > >  
> > >  #include <asm/pgtable.h>
> > >  #include <asm/page.h>
> > 
> > Unrelated chunk?
> > 
> > > @@ -665,6 +666,30 @@ void __init e820_mark_nosave_regions(uns
> > >  }
> > >  #endif
> > >  
> > > +#ifdef CONFIG_HIBERNATION
> > > +/**
> > > + * Mark ACPI NVS memory region, so that we can save/restore it during
> > > + * hibernation and the subsequent resume.
> > > + */
> > > +static int __init e820_mark_nvs_memory(void)
> > > +{
> > > +	int i;
> > > +
> > > +	if (efi_enabled)
> > > +		return 0;
> > 
> > Aha, not unrelated... why is that? EFI does not use acpi? 
> 
> With EFI we are not supposed to do that.  Rui knows the details.  Rui?
> 
well, 
about EFI nvs memory, I only get
"EfiACPIMemoryNVS: The OS and loader must preserve this memory range in
the working and ACPI S1–S3 states." in the ACPI spec 3.0b.
whether we should save/restore this piece of memory is not clear.
I'd prefer not to touch it currently.

thanks,
rui

> > > +	for (i = 0; i < e820.nr_map; i++) {
> > > +		struct e820entry *ei = &e820.map[i];
> > > +
> > > +		if (ei->type == E820_NVS)
> > > +			hibernate_nvs_register(ei->addr, ei->size);
> > 
> > can nvs_register fail? (OOM?)
> 
> It can, in which case it will do the cleanup.
> 
> Thanks,
> Rafael



More information about the linux-pm mailing list