aboutsummaryrefslogtreecommitdiffstats
path: root/arch/powerpc
diff options
context:
space:
mode:
authorBenjamin Herrenschmidt <benh@kernel.crashing.org>2010-04-06 11:03:40 -0400
committerBenjamin Herrenschmidt <benh@kernel.crashing.org>2010-04-28 02:23:24 -0400
commitb4a26be9f6f8bb72998e445cc75fc6dc0c29513a (patch)
tree0cb681f30a873a615d4f4a648fb6ee392b278b06 /arch/powerpc
parent4b83c330b4d38e869111bda6e9077d4f61ed974a (diff)
powerpc/pseries: Flush lazy kernel mappings after unplug operations
This ensures that the translations for unmapped IO mappings or unmapped memory are properly removed from the MMU hash table before such an unplug. Without this, the hypervisor refuses the unplug operations due to those resources still being mapped by the partition. Signed-off-by: Benjamin Herrenschmidt <benh@kernel.crashing.org>
Diffstat (limited to 'arch/powerpc')
-rw-r--r--arch/powerpc/platforms/pseries/hotplug-memory.c7
1 files changed, 7 insertions, 0 deletions
diff --git a/arch/powerpc/platforms/pseries/hotplug-memory.c b/arch/powerpc/platforms/pseries/hotplug-memory.c
index 9b21ee68ea50..01e7b5bb3c1d 100644
--- a/arch/powerpc/platforms/pseries/hotplug-memory.c
+++ b/arch/powerpc/platforms/pseries/hotplug-memory.c
@@ -11,6 +11,7 @@
11 11
12#include <linux/of.h> 12#include <linux/of.h>
13#include <linux/lmb.h> 13#include <linux/lmb.h>
14#include <linux/vmalloc.h>
14#include <asm/firmware.h> 15#include <asm/firmware.h>
15#include <asm/machdep.h> 16#include <asm/machdep.h>
16#include <asm/pSeries_reconfig.h> 17#include <asm/pSeries_reconfig.h>
@@ -54,6 +55,12 @@ static int pseries_remove_lmb(unsigned long base, unsigned int lmb_size)
54 */ 55 */
55 start = (unsigned long)__va(base); 56 start = (unsigned long)__va(base);
56 ret = remove_section_mapping(start, start + lmb_size); 57 ret = remove_section_mapping(start, start + lmb_size);
58
59 /* Ensure all vmalloc mappings are flushed in case they also
60 * hit that section of memory
61 */
62 vm_unmap_aliases();
63
57 return ret; 64 return ret;
58} 65}
59 66