diff options
| -rw-r--r-- | arch/sparc64/kernel/smp.c | 27 |
1 files changed, 5 insertions, 22 deletions
diff --git a/arch/sparc64/kernel/smp.c b/arch/sparc64/kernel/smp.c index 3aba47624df..0d6403a630a 100644 --- a/arch/sparc64/kernel/smp.c +++ b/arch/sparc64/kernel/smp.c | |||
| @@ -865,21 +865,14 @@ void smp_call_function_client(int irq, struct pt_regs *regs) | |||
| 865 | void *info = call_data->info; | 865 | void *info = call_data->info; |
| 866 | 866 | ||
| 867 | clear_softint(1 << irq); | 867 | clear_softint(1 << irq); |
| 868 | |||
| 869 | irq_enter(); | ||
| 870 | |||
| 871 | if (!call_data->wait) { | ||
| 872 | /* let initiator proceed after getting data */ | ||
| 873 | atomic_inc(&call_data->finished); | ||
| 874 | } | ||
| 875 | |||
| 876 | func(info); | ||
| 877 | |||
| 878 | irq_exit(); | ||
| 879 | |||
| 880 | if (call_data->wait) { | 868 | if (call_data->wait) { |
| 881 | /* let initiator proceed only after completion */ | 869 | /* let initiator proceed only after completion */ |
| 870 | func(info); | ||
| 882 | atomic_inc(&call_data->finished); | 871 | atomic_inc(&call_data->finished); |
| 872 | } else { | ||
| 873 | /* let initiator proceed after getting data */ | ||
| 874 | atomic_inc(&call_data->finished); | ||
| 875 | func(info); | ||
| 883 | } | 876 | } |
| 884 | } | 877 | } |
| 885 | 878 | ||
| @@ -1041,9 +1034,7 @@ void smp_receive_signal(int cpu) | |||
| 1041 | 1034 | ||
| 1042 | void smp_receive_signal_client(int irq, struct pt_regs *regs) | 1035 | void smp_receive_signal_client(int irq, struct pt_regs *regs) |
| 1043 | { | 1036 | { |
| 1044 | irq_enter(); | ||
| 1045 | clear_softint(1 << irq); | 1037 | clear_softint(1 << irq); |
| 1046 | irq_exit(); | ||
| 1047 | } | 1038 | } |
| 1048 | 1039 | ||
| 1049 | void smp_new_mmu_context_version_client(int irq, struct pt_regs *regs) | 1040 | void smp_new_mmu_context_version_client(int irq, struct pt_regs *regs) |
| @@ -1051,8 +1042,6 @@ void smp_new_mmu_context_version_client(int irq, struct pt_regs *regs) | |||
| 1051 | struct mm_struct *mm; | 1042 | struct mm_struct *mm; |
| 1052 | unsigned long flags; | 1043 | unsigned long flags; |
| 1053 | 1044 | ||
| 1054 | irq_enter(); | ||
| 1055 | |||
| 1056 | clear_softint(1 << irq); | 1045 | clear_softint(1 << irq); |
| 1057 | 1046 | ||
| 1058 | /* See if we need to allocate a new TLB context because | 1047 | /* See if we need to allocate a new TLB context because |
| @@ -1072,8 +1061,6 @@ void smp_new_mmu_context_version_client(int irq, struct pt_regs *regs) | |||
| 1072 | load_secondary_context(mm); | 1061 | load_secondary_context(mm); |
| 1073 | __flush_tlb_mm(CTX_HWBITS(mm->context), | 1062 | __flush_tlb_mm(CTX_HWBITS(mm->context), |
| 1074 | SECONDARY_CONTEXT); | 1063 | SECONDARY_CONTEXT); |
| 1075 | |||
| 1076 | irq_exit(); | ||
| 1077 | } | 1064 | } |
| 1078 | 1065 | ||
| 1079 | void smp_new_mmu_context_version(void) | 1066 | void smp_new_mmu_context_version(void) |
| @@ -1239,8 +1226,6 @@ void smp_penguin_jailcell(int irq, struct pt_regs *regs) | |||
| 1239 | { | 1226 | { |
| 1240 | clear_softint(1 << irq); | 1227 | clear_softint(1 << irq); |
| 1241 | 1228 | ||
| 1242 | irq_enter(); | ||
| 1243 | |||
| 1244 | preempt_disable(); | 1229 | preempt_disable(); |
| 1245 | 1230 | ||
| 1246 | __asm__ __volatile__("flushw"); | 1231 | __asm__ __volatile__("flushw"); |
| @@ -1253,8 +1238,6 @@ void smp_penguin_jailcell(int irq, struct pt_regs *regs) | |||
| 1253 | prom_world(0); | 1238 | prom_world(0); |
| 1254 | 1239 | ||
| 1255 | preempt_enable(); | 1240 | preempt_enable(); |
| 1256 | |||
| 1257 | irq_exit(); | ||
| 1258 | } | 1241 | } |
| 1259 | 1242 | ||
| 1260 | /* /proc/profile writes can call this, don't __init it please. */ | 1243 | /* /proc/profile writes can call this, don't __init it please. */ |
