|
@@ -39,6 +39,7 @@
|
|
|
#include <asm/smp.h>
|
|
|
#include <asm/atomic.h>
|
|
|
#include <asm/time.h>
|
|
|
+#include <asm/mmu.h>
|
|
|
|
|
|
struct rtas_t rtas = {
|
|
|
.lock = __RAW_SPIN_LOCK_UNLOCKED
|
|
@@ -713,6 +714,7 @@ static void rtas_percpu_suspend_me(void *info)
|
|
|
{
|
|
|
long rc = H_SUCCESS;
|
|
|
unsigned long msr_save;
|
|
|
+ u16 slb_size = mmu_slb_size;
|
|
|
int cpu;
|
|
|
struct rtas_suspend_me_data *data =
|
|
|
(struct rtas_suspend_me_data *)info;
|
|
@@ -735,13 +737,16 @@ static void rtas_percpu_suspend_me(void *info)
|
|
|
/* All other cpus are in H_JOIN, this cpu does
|
|
|
* the suspend.
|
|
|
*/
|
|
|
+ slb_set_size(SLB_MIN_SIZE);
|
|
|
printk(KERN_DEBUG "calling ibm,suspend-me on cpu %i\n",
|
|
|
smp_processor_id());
|
|
|
data->error = rtas_call(data->token, 0, 1, NULL);
|
|
|
|
|
|
- if (data->error)
|
|
|
+ if (data->error) {
|
|
|
printk(KERN_DEBUG "ibm,suspend-me returned %d\n",
|
|
|
data->error);
|
|
|
+ slb_set_size(slb_size);
|
|
|
+ }
|
|
|
} else {
|
|
|
printk(KERN_ERR "H_JOIN on cpu %i failed with rc = %ld\n",
|
|
|
smp_processor_id(), rc);
|