diff options
-rw-r--r-- | arch/powerpc/mm/slb.c | 8 | ||||
-rw-r--r-- | arch/powerpc/platforms/pseries/hotplug-cpu.c | 2 | ||||
-rw-r--r-- | arch/powerpc/platforms/pseries/lpar.c | 1 | ||||
-rw-r--r-- | include/asm-powerpc/mmu-hash64.h | 1 |
4 files changed, 12 insertions, 0 deletions
diff --git a/arch/powerpc/mm/slb.c b/arch/powerpc/mm/slb.c index 27922dff8b94..a282bc212e80 100644 --- a/arch/powerpc/mm/slb.c +++ b/arch/powerpc/mm/slb.c | |||
@@ -82,6 +82,14 @@ static inline void slb_shadow_clear(unsigned long entry) | |||
82 | get_slb_shadow()->save_area[entry].esid = 0; | 82 | get_slb_shadow()->save_area[entry].esid = 0; |
83 | } | 83 | } |
84 | 84 | ||
85 | void slb_shadow_clear_all(void) | ||
86 | { | ||
87 | int i; | ||
88 | |||
89 | for (i = 0; i < SLB_NUM_BOLTED; i++) | ||
90 | slb_shadow_clear(i); | ||
91 | } | ||
92 | |||
85 | static inline void create_shadowed_slbe(unsigned long ea, int ssize, | 93 | static inline void create_shadowed_slbe(unsigned long ea, int ssize, |
86 | unsigned long flags, | 94 | unsigned long flags, |
87 | unsigned long entry) | 95 | unsigned long entry) |
diff --git a/arch/powerpc/platforms/pseries/hotplug-cpu.c b/arch/powerpc/platforms/pseries/hotplug-cpu.c index fc48b96c81bf..412e6b42986f 100644 --- a/arch/powerpc/platforms/pseries/hotplug-cpu.c +++ b/arch/powerpc/platforms/pseries/hotplug-cpu.c | |||
@@ -29,6 +29,7 @@ | |||
29 | #include <asm/vdso_datapage.h> | 29 | #include <asm/vdso_datapage.h> |
30 | #include <asm/pSeries_reconfig.h> | 30 | #include <asm/pSeries_reconfig.h> |
31 | #include "xics.h" | 31 | #include "xics.h" |
32 | #include "plpar_wrappers.h" | ||
32 | 33 | ||
33 | /* This version can't take the spinlock, because it never returns */ | 34 | /* This version can't take the spinlock, because it never returns */ |
34 | static struct rtas_args rtas_stop_self_args = { | 35 | static struct rtas_args rtas_stop_self_args = { |
@@ -58,6 +59,7 @@ static void pseries_mach_cpu_die(void) | |||
58 | local_irq_disable(); | 59 | local_irq_disable(); |
59 | idle_task_exit(); | 60 | idle_task_exit(); |
60 | xics_teardown_cpu(0); | 61 | xics_teardown_cpu(0); |
62 | unregister_slb_shadow(hard_smp_processor_id(), __pa(get_slb_shadow())); | ||
61 | rtas_stop_self(); | 63 | rtas_stop_self(); |
62 | /* Should never get here... */ | 64 | /* Should never get here... */ |
63 | BUG(); | 65 | BUG(); |
diff --git a/arch/powerpc/platforms/pseries/lpar.c b/arch/powerpc/platforms/pseries/lpar.c index 9a455d46379d..34317aa148a8 100644 --- a/arch/powerpc/platforms/pseries/lpar.c +++ b/arch/powerpc/platforms/pseries/lpar.c | |||
@@ -272,6 +272,7 @@ void vpa_init(int cpu) | |||
272 | */ | 272 | */ |
273 | addr = __pa(&slb_shadow[cpu]); | 273 | addr = __pa(&slb_shadow[cpu]); |
274 | if (firmware_has_feature(FW_FEATURE_SPLPAR)) { | 274 | if (firmware_has_feature(FW_FEATURE_SPLPAR)) { |
275 | slb_shadow_clear_all(); | ||
275 | ret = register_slb_shadow(hwcpu, addr); | 276 | ret = register_slb_shadow(hwcpu, addr); |
276 | if (ret) | 277 | if (ret) |
277 | printk(KERN_ERR | 278 | printk(KERN_ERR |
diff --git a/include/asm-powerpc/mmu-hash64.h b/include/asm-powerpc/mmu-hash64.h index 82328dec2b52..951e2487aa69 100644 --- a/include/asm-powerpc/mmu-hash64.h +++ b/include/asm-powerpc/mmu-hash64.h | |||
@@ -286,6 +286,7 @@ extern void hpte_init_iSeries(void); | |||
286 | extern void hpte_init_beat(void); | 286 | extern void hpte_init_beat(void); |
287 | extern void hpte_init_beat_v3(void); | 287 | extern void hpte_init_beat_v3(void); |
288 | 288 | ||
289 | extern void slb_shadow_clear_all(void); | ||
289 | extern void stabs_alloc(void); | 290 | extern void stabs_alloc(void); |
290 | extern void slb_initialize(void); | 291 | extern void slb_initialize(void); |
291 | extern void slb_flush_and_rebolt(void); | 292 | extern void slb_flush_and_rebolt(void); |