linux/drivers
Tang Chen e8d1955258 acpi, memory-hotplug: parse SRAT before memblock is ready
On linux, the pages used by kernel could not be migrated.  As a result,
if a memory range is used by kernel, it cannot be hot-removed.  So if we
want to hot-remove memory, we should prevent kernel from using it.

The way now used to prevent this is specify a memory range by
movablemem_map boot option and set it as ZONE_MOVABLE.

But when the system is booting, memblock will allocate memory, and
reserve the memory for kernel.  And before we parse SRAT, and know the
node memory ranges, memblock is working.  And it may allocate memory in
ranges to be set as ZONE_MOVABLE.  This memory can be used by kernel,
and never be freed.

So, let's parse SRAT before memblock is called first.  And it is early
enough.

The first call of memblock_find_in_range_node() is in:

  setup_arch()
    |-->setup_real_mode()

so, this patch add a function early_parse_srat() to parse SRAT, and call
it before setup_real_mode() is called.

NOTE:

1) early_parse_srat() is called before numa_init(), and has initialized
   numa_meminfo.  So DO NOT clear numa_nodes_parsed in numa_init() and DO
   NOT zero numa_meminfo in numa_init(), otherwise we will lose memory
   numa info.

2) I don't know why using count of memory affinities parsed from SRAT
   as a return value in original acpi_numa_init().  So I add a static
   variable srat_mem_cnt to remember this count and use it as the return
   value of the new acpi_numa_init()

[mhocko@suse.cz: parse SRAT before memblock is ready fix]
Signed-off-by: Tang Chen <tangchen@cn.fujitsu.com>
Reviewed-by: Wen Congyang <wency@cn.fujitsu.com>
Cc: KOSAKI Motohiro <kosaki.motohiro@jp.fujitsu.com>
Cc: Jiang Liu <jiang.liu@huawei.com>
Cc: Jianguo Wu <wujianguo@huawei.com>
Cc: Kamezawa Hiroyuki <kamezawa.hiroyu@jp.fujitsu.com>
Cc: Lai Jiangshan <laijs@cn.fujitsu.com>
Cc: Wu Jianguo <wujianguo@huawei.com>
Cc: Yasuaki Ishimatsu <isimatu.yasuaki@jp.fujitsu.com>
Cc: Ingo Molnar <mingo@elte.hu>
Cc: Thomas Gleixner <tglx@linutronix.de>
Cc: "H. Peter Anvin" <hpa@zytor.com>
Cc: Len Brown <lenb@kernel.org>
Cc: "Brown, Len" <len.brown@intel.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
2013-02-23 17:50:14 -08:00
..
accessibility
acpi acpi, memory-hotplug: parse SRAT before memblock is ready 2013-02-23 17:50:14 -08:00
amba
ata Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/s390/linux 2013-02-21 17:54:03 -08:00
atm atm/iphase: rename fregt_t -> ffreg_t 2013-02-08 14:22:05 -05:00
auxdisplay
base memory-hotplug: check whether all memory blocks are offlined or not when removing memory 2013-02-23 17:50:11 -08:00
bcma Merge branch 'master' of git://git.kernel.org/pub/scm/linux/kernel/git/linville/wireless 2013-02-14 14:23:33 -05:00
block Driver core patches for 3.9-rc1 2013-02-21 12:05:51 -08:00
bluetooth Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/jikos/trivial 2013-02-21 17:40:58 -08:00
bus
cdrom
char Char/Misc driver patches for 3.9-rc1 2013-02-21 13:57:13 -08:00
clk arm-soc: device tree conversions 2013-02-21 15:38:49 -08:00
clocksource arm-soc: virtualization changes 2013-02-21 15:40:16 -08:00
connector net: proc: change proc_net_remove to remove_proc_entry 2013-02-18 14:53:08 -05:00
cpufreq arm-soc: driver specific changes 2013-02-21 15:12:18 -08:00
cpuidle arm-soc: soc-specific updates 2013-02-21 15:27:22 -08:00
crypto
dca
devfreq Merge branch 'master' into for-next 2013-01-29 10:48:30 +01:00
dio
dma arm-soc: soc-specific updates 2013-02-21 15:27:22 -08:00
edac Driver core patches for 3.9-rc1 2013-02-21 12:05:51 -08:00
eisa
extcon Char/Misc driver patches for 3.9-rc1 2013-02-21 13:57:13 -08:00
firewire Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/jikos/trivial 2013-02-21 17:40:58 -08:00
firmware memory-hotplug: remove /sys/firmware/memmap/X sysfs 2013-02-23 17:50:12 -08:00
gpio Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/s390/linux 2013-02-21 17:54:03 -08:00
gpu Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/jikos/trivial 2013-02-21 17:40:58 -08:00
hid Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/jikos/hid 2013-02-21 17:41:38 -08:00
hsi
hv Char/Misc driver patches for 3.9-rc1 2013-02-21 13:57:13 -08:00
hwmon ACPI and power management updates for 3.9-rc1 2013-02-20 11:26:56 -08:00
hwspinlock
i2c arm-soc: soc-specific updates 2013-02-21 15:27:22 -08:00
ide Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/jikos/trivial 2013-02-21 17:40:58 -08:00
idle Driver core patches for 3.9-rc1 2013-02-21 12:05:51 -08:00
iio Staging tree update for 3.9-rc1 2013-02-21 12:11:44 -08:00
infiniband Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/jikos/trivial 2013-02-21 17:40:58 -08:00
input arm-soc: soc-specific updates 2013-02-21 15:27:22 -08:00
iommu Driver core patches for 3.9-rc1 2013-02-21 12:05:51 -08:00
ipack Char/Misc driver patches for 3.9-rc1 2013-02-21 13:57:13 -08:00
irqchip arm-soc: cleanups 2013-02-21 14:58:40 -08:00
isdn Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/jikos/trivial 2013-02-21 17:40:58 -08:00
leds
lguest tty/serial patches for 3.9-rc1 2013-02-21 13:41:04 -08:00
macintosh
mailbox ARM / highbank: add support for pl320 IPC 2013-02-02 00:01:15 +01:00
md drivers/md/persistent-data/dm-transaction-manager.c: rename HASH_SIZE 2013-02-23 17:50:08 -08:00
media Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/s390/linux 2013-02-21 17:54:03 -08:00
memory
memstick
message
mfd arm-soc: driver specific changes 2013-02-21 15:12:18 -08:00
misc Char/Misc driver patches for 3.9-rc1 2013-02-21 13:57:13 -08:00
mmc Char/Misc driver patches for 3.9-rc1 2013-02-21 13:57:13 -08:00
mtd arm-soc: device tree conversions 2013-02-21 15:38:49 -08:00
net Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/s390/linux 2013-02-21 17:54:03 -08:00
nfc Merge branch 'master' of git://git.kernel.org/pub/scm/linux/kernel/git/linville/wireless-next into for-davem 2013-02-18 13:47:13 -05:00
ntb
nubus
of Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/jikos/trivial 2013-02-21 17:40:58 -08:00
oprofile
parisc
parport Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/s390/linux 2013-02-21 17:54:03 -08:00
pci Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/s390/linux 2013-02-21 17:54:03 -08:00
pcmcia Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/jikos/trivial 2013-02-21 17:40:58 -08:00
pinctrl arm-soc: device tree conversions 2013-02-21 15:38:49 -08:00
platform Staging tree update for 3.9-rc1 2013-02-21 12:11:44 -08:00
pnp PNPACPI: Fix acpi_bus_get_device() check in drivers/pnp/pnpacpi/core.c 2013-01-31 21:11:08 +01:00
power Staging tree update for 3.9-rc1 2013-02-21 12:11:44 -08:00
pps pps: Move timestamp read into PPS code proper 2013-02-13 10:13:58 -08:00
ps3
ptp
pwm
rapidio
regulator Merge remote-tracking branch 'regulator/topic/tps65090' into regulator-next 2013-02-19 12:43:12 +00:00
remoteproc arm-soc: multiplatform support 2013-02-21 15:20:41 -08:00
rpmsg Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/jikos/trivial 2013-02-21 17:40:58 -08:00
rtc Merge branch 'akpm' (incoming from Andrew) 2013-02-21 17:38:49 -08:00
s390 Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/s390/linux 2013-02-21 17:54:03 -08:00
sbus
scsi Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/jikos/trivial 2013-02-21 17:40:58 -08:00
sfi
sh Merge branch 'pfc' of git://git.kernel.org/pub/scm/linux/kernel/git/horms/renesas into next/sh-pinmux 2013-01-29 08:56:25 -08:00
sn
spi arm-soc: soc-specific updates 2013-02-21 15:27:22 -08:00
ssb Merge branch 'master' of git://git.kernel.org/pub/scm/linux/kernel/git/linville/wireless 2013-02-14 14:23:33 -05:00
staging Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/jikos/trivial 2013-02-21 17:40:58 -08:00
target Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/jikos/trivial 2013-02-21 17:40:58 -08:00
tc
thermal
tty Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/s390/linux 2013-02-21 17:54:03 -08:00
uio uio: remove !S390 dependency from Kconfig 2013-02-14 15:55:18 +01:00
usb arm-soc: soc-specific updates 2013-02-21 15:27:22 -08:00
uwb driver-core: constify data for class_find_device() 2013-02-06 12:18:56 -08:00
vfio
vhost Driver core patches for 3.9-rc1 2013-02-21 12:05:51 -08:00
video Merge branch 'akpm' (incoming from Andrew) 2013-02-21 17:38:49 -08:00
virt
virtio
vlynq
vme vme: add missing put_device() after device_register() fails 2013-02-14 09:24:14 -08:00
w1 Char/Misc driver patches for 3.9-rc1 2013-02-21 13:57:13 -08:00
watchdog
xen Merge branch 'x86-mm-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip 2013-02-21 18:06:55 -08:00
zorro
Kconfig Char/Misc driver patches for 3.9-rc1 2013-02-21 13:57:13 -08:00
Makefile Char/Misc driver patches for 3.9-rc1 2013-02-21 13:57:13 -08:00