diff options
-rw-r--r-- | arch/powerpc/kernel/rtas.c | 5 | ||||
-rw-r--r-- | arch/powerpc/platforms/pseries/suspend.c | 6 |
2 files changed, 8 insertions, 3 deletions
diff --git a/arch/powerpc/kernel/rtas.c b/arch/powerpc/kernel/rtas.c index 517b1d8f455b..9f843cdfee9e 100644 --- a/arch/powerpc/kernel/rtas.c +++ b/arch/powerpc/kernel/rtas.c | |||
@@ -716,7 +716,6 @@ static int __rtas_suspend_last_cpu(struct rtas_suspend_me_data *data, int wake_w | |||
716 | int cpu; | 716 | int cpu; |
717 | 717 | ||
718 | slb_set_size(SLB_MIN_SIZE); | 718 | slb_set_size(SLB_MIN_SIZE); |
719 | stop_topology_update(); | ||
720 | printk(KERN_DEBUG "calling ibm,suspend-me on cpu %i\n", smp_processor_id()); | 719 | printk(KERN_DEBUG "calling ibm,suspend-me on cpu %i\n", smp_processor_id()); |
721 | 720 | ||
722 | while (rc == H_MULTI_THREADS_ACTIVE && !atomic_read(&data->done) && | 721 | while (rc == H_MULTI_THREADS_ACTIVE && !atomic_read(&data->done) && |
@@ -732,7 +731,6 @@ static int __rtas_suspend_last_cpu(struct rtas_suspend_me_data *data, int wake_w | |||
732 | rc = atomic_read(&data->error); | 731 | rc = atomic_read(&data->error); |
733 | 732 | ||
734 | atomic_set(&data->error, rc); | 733 | atomic_set(&data->error, rc); |
735 | start_topology_update(); | ||
736 | pSeries_coalesce_init(); | 734 | pSeries_coalesce_init(); |
737 | 735 | ||
738 | if (wake_when_done) { | 736 | if (wake_when_done) { |
@@ -846,6 +844,7 @@ int rtas_ibm_suspend_me(struct rtas_args *args) | |||
846 | atomic_set(&data.error, 0); | 844 | atomic_set(&data.error, 0); |
847 | data.token = rtas_token("ibm,suspend-me"); | 845 | data.token = rtas_token("ibm,suspend-me"); |
848 | data.complete = &done; | 846 | data.complete = &done; |
847 | stop_topology_update(); | ||
849 | 848 | ||
850 | /* Call function on all CPUs. One of us will make the | 849 | /* Call function on all CPUs. One of us will make the |
851 | * rtas call | 850 | * rtas call |
@@ -858,6 +857,8 @@ int rtas_ibm_suspend_me(struct rtas_args *args) | |||
858 | if (atomic_read(&data.error) != 0) | 857 | if (atomic_read(&data.error) != 0) |
859 | printk(KERN_ERR "Error doing global join\n"); | 858 | printk(KERN_ERR "Error doing global join\n"); |
860 | 859 | ||
860 | start_topology_update(); | ||
861 | |||
861 | return atomic_read(&data.error); | 862 | return atomic_read(&data.error); |
862 | } | 863 | } |
863 | #else /* CONFIG_PPC_PSERIES */ | 864 | #else /* CONFIG_PPC_PSERIES */ |
diff --git a/arch/powerpc/platforms/pseries/suspend.c b/arch/powerpc/platforms/pseries/suspend.c index b84a8b2238dd..47226e04126d 100644 --- a/arch/powerpc/platforms/pseries/suspend.c +++ b/arch/powerpc/platforms/pseries/suspend.c | |||
@@ -24,6 +24,7 @@ | |||
24 | #include <asm/machdep.h> | 24 | #include <asm/machdep.h> |
25 | #include <asm/mmu.h> | 25 | #include <asm/mmu.h> |
26 | #include <asm/rtas.h> | 26 | #include <asm/rtas.h> |
27 | #include <asm/topology.h> | ||
27 | 28 | ||
28 | static u64 stream_id; | 29 | static u64 stream_id; |
29 | static struct device suspend_dev; | 30 | static struct device suspend_dev; |
@@ -138,8 +139,11 @@ static ssize_t store_hibernate(struct device *dev, | |||
138 | ssleep(1); | 139 | ssleep(1); |
139 | } while (rc == -EAGAIN); | 140 | } while (rc == -EAGAIN); |
140 | 141 | ||
141 | if (!rc) | 142 | if (!rc) { |
143 | stop_topology_update(); | ||
142 | rc = pm_suspend(PM_SUSPEND_MEM); | 144 | rc = pm_suspend(PM_SUSPEND_MEM); |
145 | start_topology_update(); | ||
146 | } | ||
143 | 147 | ||
144 | stream_id = 0; | 148 | stream_id = 0; |
145 | 149 | ||