android_kernel_xiaomi_sm8350/include
Zou Nan hai a3f5c338b9 [IA64] min_low_pfn and max_low_pfn calculation fix
We have seen bad_pte_print when testing crashdump on an SN machine in
recent 2.6.20 kernel.  There are tons of bad pte print (pfn < max_low_pfn)
reports when the crash kernel boots up, all those reported bad pages
are inside initmem range; That is because if the crash kernel code and
data happens to be at the beginning of the 1st node. build_node_maps in
discontig.c will bypass reserved regions with filter_rsvd_memory. Since
min_low_pfn is calculated in build_node_map, so in this case, min_low_pfn
will be greater than kernel code and data.

Because pages inside initmem are freed and reused later, we saw
pfn_valid check fail on those pages.

I think this theoretically happen on a normal kernel. When I check
min_low_pfn and max_low_pfn calculation in contig.c and discontig.c.
I found more issues than this.

1. min_low_pfn and max_low_pfn calculation is inconsistent between
contig.c and discontig.c,
min_low_pfn is calculated as the first page number of boot memmap in
contig.c (Why? Though this may work at the most of the time, I don't
think it is the right logic). It is calculated as the lowest physical
memory page number bypass reserved regions in discontig.c.
max_low_pfn is calculated include reserved regions in contig.c. It is
calculated exclude reserved regions in discontig.c.

2. If kernel code and data region is happen to be at the begin or the
end of physical memory, when min_low_pfn and max_low_pfn calculation is
bypassed kernel code and data, pages in initmem will report bad.

3. initrd is also in reserved regions, if it is at the begin or at the
end of physical memory, kernel will refuse to reuse the memory. Because
the virt_addr_valid check in free_initrd_mem.

So it is better to fix and clean up those issues.
Calculate min_low_pfn and max_low_pfn in a consistent way.

Signed-off-by:	Zou Nan hai <nanhai.zou@intel.com>
Acked-by: Jay Lan <jlan@sgi.com>
Signed-off-by: Tony Luck <tony.luck@intel.com>
2007-03-20 13:41:57 -07:00
..
acpi
asm-alpha
asm-arm [PATCH] gpio_keys driver shouldn't be ARM-specific 2007-03-05 07:57:51 -08:00
asm-arm26
asm-avr32 avr32: dma-mapping.h 2007-03-07 10:50:30 +01:00
asm-cris
asm-frv [PATCH] FRV: Add some missng lazy MMU hooks for NOMMU mode 2007-03-01 14:53:36 -08:00
asm-generic Revert "[PATCH] LOG2: Alter get_order() so that it can make use of ilog2() on a constant" 2007-03-06 19:38:01 -08:00
asm-h8300
asm-i386 [PATCH] i386: make x86_64 tsc header require i386 rather than vice-versa 2007-03-06 09:30:24 -08:00
asm-ia64 [IA64] min_low_pfn and max_low_pfn calculation fix 2007-03-20 13:41:57 -07:00
asm-m32r
asm-m68k
asm-m68knommu [PATCH] m68knommu: GPIO line defines for the ColdFire 5282 2007-03-06 18:08:38 -08:00
asm-mips [MIPS] Sibyte: Fix ZBbus profiler 2007-03-09 20:27:31 +00:00
asm-parisc Merge master.kernel.org:/pub/scm/linux/kernel/git/kyle/parisc-2.6 2007-02-26 12:48:06 -08:00
asm-powerpc [PATCH] sched: remove SMT nice 2007-03-05 07:57:51 -08:00
asm-ppc
asm-s390 [S390] check_bugs() should be inline. 2007-03-05 23:35:50 +01:00
asm-sh sh: Revert lazy dcache writeback changes. 2007-03-05 19:46:47 +09:00
asm-sh64
asm-sparc [SPARC]: Provide 'get_property()' alias for of_get_property(). 2007-03-02 15:22:53 -08:00
asm-sparc64 [SPARC64]: Fix PARPORT build (again). 2007-03-08 15:00:03 -08:00
asm-um [PATCH] uml: pte_mkread fix 2007-03-01 14:53:38 -08:00
asm-v850
asm-x86_64 Merge branch 'release' of git://git.kernel.org/pub/scm/linux/kernel/git/aegl/linux-2.6 2007-03-06 18:05:10 -08:00
asm-xtensa
crypto
keys
linux Merge git://git.infradead.org/mtd-2.6 2007-03-09 10:34:55 -08:00
math-emu
media V4L/DVB (5271): Add VIDIOC_TRY_ENCODER_CMD and VIDIOC_ENCODER_CMD ioctls. 2007-03-01 13:09:46 -02:00
mtd
net [IPSEC]: xfrm_policy delete security check misplaced 2007-03-07 16:08:09 -08:00
pcmcia
rdma
rxrpc
scsi
sound [ALSA] version 1.0.14rc3 2007-03-06 14:10:08 +01:00
video
Kbuild