diff options
Diffstat (limited to 'arch/s390/kernel/smp.c')
-rw-r--r-- | arch/s390/kernel/smp.c | 14 |
1 files changed, 6 insertions, 8 deletions
diff --git a/arch/s390/kernel/smp.c b/arch/s390/kernel/smp.c index aff9f853fc30..03674fbe598f 100644 --- a/arch/s390/kernel/smp.c +++ b/arch/s390/kernel/smp.c | |||
@@ -120,7 +120,7 @@ static void __smp_call_function_map(void (*func) (void *info), void *info, | |||
120 | if (wait) | 120 | if (wait) |
121 | data.finished = CPU_MASK_NONE; | 121 | data.finished = CPU_MASK_NONE; |
122 | 122 | ||
123 | spin_lock_bh(&call_lock); | 123 | spin_lock(&call_lock); |
124 | call_data = &data; | 124 | call_data = &data; |
125 | 125 | ||
126 | for_each_cpu_mask(cpu, map) | 126 | for_each_cpu_mask(cpu, map) |
@@ -129,18 +129,16 @@ static void __smp_call_function_map(void (*func) (void *info), void *info, | |||
129 | /* Wait for response */ | 129 | /* Wait for response */ |
130 | while (!cpus_equal(map, data.started)) | 130 | while (!cpus_equal(map, data.started)) |
131 | cpu_relax(); | 131 | cpu_relax(); |
132 | |||
133 | if (wait) | 132 | if (wait) |
134 | while (!cpus_equal(map, data.finished)) | 133 | while (!cpus_equal(map, data.finished)) |
135 | cpu_relax(); | 134 | cpu_relax(); |
136 | 135 | spin_unlock(&call_lock); | |
137 | spin_unlock_bh(&call_lock); | ||
138 | |||
139 | out: | 136 | out: |
140 | local_irq_disable(); | 137 | if (local) { |
141 | if (local) | 138 | local_irq_disable(); |
142 | func(info); | 139 | func(info); |
143 | local_irq_enable(); | 140 | local_irq_enable(); |
141 | } | ||
144 | } | 142 | } |
145 | 143 | ||
146 | /* | 144 | /* |