On Thu, Oct 08, 2009 at 04:57:32PM +0800, 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: Hm... All that pfn_valid() indicates is that a page frame number is valid to index a pfn. That is that a pfn is valid to index the mem_map array. > $ 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. Are the non-memory parts marked as reserved? Ralf