All of lore.kernel.org
 help / color / mirror / Atom feed
From: joeyli <jlee@suse.com>
To: Yinghai Lu <yinghai@kernel.org>
Cc: "Rafael J. Wysocki" <rjw@rjwysocki.net>,
	"Lee, Chun-Yi" <joeyli.kernel@gmail.com>,
	Thomas Gleixner <tglx@linutronix.de>,
	Ingo Molnar <mingo@redhat.com>, "H. Peter Anvin" <hpa@zytor.com>,
	Len Brown <len.brown@intel.com>, Pavel Machek <pavel@ucw.cz>,
	Takashi Iwai <tiwai@suse.de>,
	Linux PM list <linux-pm@vger.kernel.org>,
	Linux Kernel Mailing List <linux-kernel@vger.kernel.org>
Subject: Re: [PATCH] Hibernate: Do not assume the first e820 area to be RAM
Date: Wed, 10 Sep 2014 21:43:47 +0800	[thread overview]
Message-ID: <20140910134347.GB18567@linux-rxt1.site> (raw)
In-Reply-To: <CAE9FiQUROUAxFk8_gtMp0Fu6aBLbL8GtKhJg0Y-01s4n3BDjtw@mail.gmail.com>

Hi Yinghai, 

Thanks for your review, first!

On Tue, Sep 09, 2014 at 11:08:45PM -0700, Yinghai Lu wrote:
> On Mon, Sep 8, 2014 at 3:52 PM, Rafael J. Wysocki <rjw@rjwysocki.net> wrote:
> > On Monday, August 11, 2014 06:50:52 PM Lee, Chun-Yi wrote:
> >> In arch/x86/kernel/setup.c::trim_bios_range(), the codes introduced
> >> by 1b5576e6 (base on d8a9e6a5), it updates the first 4Kb of memory
> >> to be E820_RESERVED region. That's because it's a BIOS owned area
> >> but generally not listed in the E820 table:
> >>
> >> [    0.000000] e820: BIOS-provided physical RAM map:
> >> [    0.000000] BIOS-e820: [mem 0x0000000000000000-0x0000000000096fff] usable
> >> [    0.000000] BIOS-e820: [mem 0x0000000000097000-0x0000000000097fff] reserved
> >> ...
> >> [    0.000000] e820: update [mem 0x00000000-0x00000fff] usable ==> reserved
> >> [    0.000000] e820: remove [mem 0x000a0000-0x000fffff] usable
> >>
> >> But the region of first 4Kb didn't register to nosave memory:
> >>
> >> [    0.000000] PM: Registered nosave memory: [mem 0x00097000-0x00097fff]
> >> [    0.000000] PM: Registered nosave memory: [mem 0x000a0000-0x000fffff]
> >>
> >> The codes in e820_mark_nosave_regions() assumes the first e820 area to be
> >> RAM, so it causes the first 4Kb E820_RESERVED region ignored when register
> >> to nosave. This patch removed assumption of the first e820 area.
> >>
> >> Cc: "Rafael J. Wysocki" <rjw@rjwysocki.net>
> >> Cc: Len Brown <len.brown@intel.com>
> >> Cc: Pavel Machek <pavel@ucw.cz>
> >> Cc: Thomas Gleixner <tglx@linutronix.de>
> >> Cc: Ingo Molnar <mingo@redhat.com>
> >> Cc: "H. Peter Anvin" <hpa@zytor.com>
> >> Signed-off-by: Lee, Chun-Yi <jlee@suse.com>
> >
> > Thomas, Ingo, Peter, any objections here?
> >
> > If not, do you want to handle it or do you want me to do that?
> 
> Did it address any regression?
> 

I found this situation when comparing the e820 region with nosave memory address.
But, I don't know any real machine which has bug report against this.

> >
> >> ---
> >>  arch/x86/kernel/e820.c | 7 +++----
> >>  1 file changed, 3 insertions(+), 4 deletions(-)
> >>
> >> diff --git a/arch/x86/kernel/e820.c b/arch/x86/kernel/e820.c
> >> index 988c00a..d595240 100644
> >> --- a/arch/x86/kernel/e820.c
> >> +++ b/arch/x86/kernel/e820.c
> >> @@ -682,18 +682,17 @@ void __init parse_e820_ext(u64 phys_addr, u32 data_len)
> >>   * hibernation (32 bit) or software suspend and suspend to RAM (64 bit).
> >>   *
> >>   * This function requires the e820 map to be sorted and without any
> >> - * overlapping entries and assumes the first e820 area to be RAM.
> >> + * overlapping entries.
> >>   */
> >>  void __init e820_mark_nosave_regions(unsigned long limit_pfn)
> >>  {
> >>       int i;
> >>       unsigned long pfn;
> >>
> >> -     pfn = PFN_DOWN(e820.map[0].addr + e820.map[0].size);
> >> -     for (i = 1; i < e820.nr_map; i++) {
> >> +     for (i = 0; i < e820.nr_map; i++) {
> >>               struct e820entry *ei = &e820.map[i];
> >>
> >> -             if (pfn < PFN_UP(ei->addr))
> >> +             if (i > 0 && pfn < PFN_UP(ei->addr))
> >>                       register_nosave_region(pfn, PFN_UP(ei->addr));
> 
> could avoid the i > 0 checking.
> 
> >>
> >>               pfn = PFN_DOWN(ei->addr + ei->size);
> >>
> >
> 
> following would be better ?
> 
> @@ -682,15 +682,14 @@ void __init parse_e820_ext(u64 phys_addr, u32 data_len)
>   * hibernation (32 bit) or software suspend and suspend to RAM (64 bit).
>   *
>   * This function requires the e820 map to be sorted and without any
> - * overlapping entries and assumes the first e820 area to be RAM.
> + * overlapping entries.
>   */
>  void __init e820_mark_nosave_regions(unsigned long limit_pfn)
>  {
>      int i;
> -    unsigned long pfn;
> +    unsigned long pfn = 0;
> 
> -    pfn = PFN_DOWN(e820.map[0].addr + e820.map[0].size);
> -    for (i = 1; i < e820.nr_map; i++) {
> +    for (i = 0; i < e820.nr_map; i++) {
>          struct e820entry *ei = &e820.map[i];
> 
>          if (pfn < PFN_UP(ei->addr))

Yes, thanks for your suggestion, your change can avoid the i > 0 checking.
I will send v2 patch to add your improvement.


Thanks a lot!
Joey Lee

      reply	other threads:[~2014-09-10 13:44 UTC|newest]

Thread overview: 6+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2014-08-11 10:50 [PATCH] Hibernate: Do not assume the first e820 area to be RAM Lee, Chun-Yi
2014-08-12  9:35 ` Pavel Machek
2014-09-08 22:52 ` Rafael J. Wysocki
2014-09-09  7:18   ` Pavel Machek
2014-09-10  6:08   ` Yinghai Lu
2014-09-10 13:43     ` joeyli [this message]

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20140910134347.GB18567@linux-rxt1.site \
    --to=jlee@suse.com \
    --cc=hpa@zytor.com \
    --cc=joeyli.kernel@gmail.com \
    --cc=len.brown@intel.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-pm@vger.kernel.org \
    --cc=mingo@redhat.com \
    --cc=pavel@ucw.cz \
    --cc=rjw@rjwysocki.net \
    --cc=tglx@linutronix.de \
    --cc=tiwai@suse.de \
    --cc=yinghai@kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.