]> git.karo-electronics.de Git - karo-tx-linux.git/commit
x86: Hibernate: Fix breakage on x86_32 with CONFIG_NUMA set
authorRafael J. Wysocki <rjw@sisk.pl>
Sat, 22 Nov 2008 13:18:00 +0000 (14:18 +0100)
committerGreg Kroah-Hartman <gregkh@suse.de>
Fri, 5 Dec 2008 18:55:20 +0000 (10:55 -0800)
commit88a5a2f870aab1edab2bce0b0c7479a8958a1282
tree941bc45953759693254e15f228046a3310857d02
parent996d332bda837c93350e7f0ef4b85b90e4eec73f
x86: Hibernate: Fix breakage on x86_32 with CONFIG_NUMA set

backport of commit 97a70e548bd97d5a46ae9d44f24aafcc013fd701 to the 2.6.27 kernel.

The NUMA code on x86_32 creates special memory mapping that allows
each node's pgdat to be located in this node's memory.  For this
purpose it allocates a memory area at the end of each node's memory
and maps this area so that it is accessible with virtual addresses
belonging to low memory.  As a result, if there is high memory,
these NUMA-allocated areas are physically located in high memory,
although they are mapped to low memory addresses.

Our hibernation code does not take that into account and for this
reason hibernation fails on all x86_32 systems with CONFIG_NUMA=y and
with high memory present.  Fix this by adding a special mapping for
the NUMA-allocated memory areas to the temporary page tables created
during the last phase of resume.

Signed-off-by: Rafael J. Wysocki <rjw@sisk.pl>
Acked-by: Ingo Molnar <mingo@elte.hu>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
arch/x86/mm/discontig_32.c
arch/x86/power/hibernate_32.c
include/asm-x86/mmzone_32.h