All of lore.kernel.org
 help / color / mirror / Atom feed
From: Pavel Machek <pavel@ucw.cz>
To: Wu Zhangjin <wuzhangjin@gmail.com>
Cc: linux-mips@linux-mips.org, Ralf Baechle <ralf@linux-mips.org>,
	"Rafael J. Wysocki" <rjw@sisk.pl>
Subject: Re: [PATCH] MIPS: fix pfn_valid() for FLAGMEM
Date: Thu, 8 Oct 2009 12:36:14 +0200	[thread overview]
Message-ID: <20091008103614.GA27323@elf.ucw.cz> (raw)
In-Reply-To: <1254998019.14496.21.camel@falcon>

On Thu 2009-10-08 18:33:39, Wu Zhangjin wrote:
> Hi,
> 
> On Thu, 2009-10-08 at 11:29 +0200, Pavel Machek wrote:
> > On Thu 2009-10-08 16:57:32, Wu Zhangjin wrote:
> > > When CONFIG_FLAGMEM enabled, STD/Hiberation will fail on YeeLoong
> > > laptop, This patch fix it:
> > > 
> > > if pfn is between min_low_pfn and max_mapnr, the old pfn_valid() will
> > > return TRUE, but in reality, if the memory is not continuous, it should
> > > be false. for example:
> > > 
> > > $ cat /proc/iomem | grep "System RAM"
> > > 00000000-0fffffff : System RAM
> > > 90000000-bfffffff : System RAM
> > > 
> > > as we can see, it is not continuous, so, some of the memory is not valid
> > > but regarded as valid by pfn_valid(), and at last make STD/Hibernate
> > > fail when shrinking a too large number of invalid memory.
> > > 
> > > Here, we fix it via checking pfn is in the "System RAM" or not, if yes,
> > > return TRUE.
> > 
> > "return FALSE"?
> > 
> > > Signed-off-by: Wu Zhangjin <wuzhangjin@gmail.com>
> > 
> > Looks mostly ok, small comments below. 
> > 
> > > @@ -168,13 +168,10 @@ typedef struct { unsigned long pgprot; } pgprot_t;
> > >  
> > >  #ifdef CONFIG_FLATMEM
> > >  
> > > -#define pfn_valid(pfn)							\
> > > -({									\
> > > -	unsigned long __pfn = (pfn);					\
> > > -	/* avoid <linux/bootmem.h> include hell */			\
> > > -	extern unsigned long min_low_pfn;				\
> > > -									\
> > > -	__pfn >= min_low_pfn && __pfn < max_mapnr;			\
> > > +#define pfn_valid(pfn)				\
> > > +({						\
> > > +	extern int is_pfn_valid(unsigned long); \
> > > +	is_pfn_valid(pfn);			\
> > >  })
> > 
> > "extern int pfn_valid here"
> > 
> > ...and get away without the ugly macro?
> > 
> 
> Perhaps need to move the whole "#ifdef CONFIG_FLATMEM" to #ifndef
> ASSEMBLY, otherwise,
> 
> "arch/mips/include/asm/page.h:170: Error: unrecognized opcode `extern
> int pfn_valid(unsigned long)'". 

I guess so. pfn_valid() will not work from assembly, anywa, so...
									Pavel

-- 
(english) http://www.livejournal.com/~pavelmachek
(cesky, pictures) http://atrey.karlin.mff.cuni.cz/~pavel/picture/horses/blog.html

  reply	other threads:[~2009-10-08 10:36 UTC|newest]

Thread overview: 12+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2009-10-08  8:57 [PATCH] MIPS: fix pfn_valid() for FLAGMEM Wu Zhangjin
2009-10-08  9:29 ` Pavel Machek
2009-10-08 10:33   ` Wu Zhangjin
2009-10-08 10:36     ` Pavel Machek [this message]
2009-10-08 10:57       ` Wu Zhangjin
2009-10-08  9:58 ` Sergei Shtylyov
2009-10-08 10:36   ` Wu Zhangjin
2009-10-08 14:42 ` Ralf Baechle
2009-10-08 15:46   ` Wu Zhangjin
2009-10-08 18:50     ` Ralf Baechle
2009-10-09 15:43       ` Sergei Shtylyov
2009-10-09 15:48         ` Sergei Shtylyov

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=20091008103614.GA27323@elf.ucw.cz \
    --to=pavel@ucw.cz \
    --cc=linux-mips@linux-mips.org \
    --cc=ralf@linux-mips.org \
    --cc=rjw@sisk.pl \
    --cc=wuzhangjin@gmail.com \
    /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.