aboutsummaryrefslogtreecommitdiffstats
path: root/arch/sparc/kernel/smp_64.c
diff options
context:
space:
mode:
authorDavid S. Miller <davem@davemloft.net>2011-02-27 02:40:02 -0500
committerDavid S. Miller <davem@davemloft.net>2011-03-16 21:19:15 -0400
commitc6fee0810df4e0f4cf9c4834d2569ca01c02cffc (patch)
tree7b6adabf750ca0279895f8b9aa8a42eb9837e4e2 /arch/sparc/kernel/smp_64.c
parent0399bb5b918bd8ffbf065a3db142ff121aaa18e0 (diff)
sparc64: Fix build errors with gcc-4.6.0
Most of the warnings emitted (we fail arch/sparc file builds with -Werror) were legitimate but harmless, however one case (n2_pcr_write) was a genuine bug. Based almost entirely upon a patch by Sam Ravnborg. Reported-by: Dennis Gilmore <dennis@ausil.us> Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'arch/sparc/kernel/smp_64.c')
-rw-r--r--arch/sparc/kernel/smp_64.c11
1 files changed, 4 insertions, 7 deletions
diff --git a/arch/sparc/kernel/smp_64.c b/arch/sparc/kernel/smp_64.c
index 555a76d1f4a1..3e94a8c23238 100644
--- a/arch/sparc/kernel/smp_64.c
+++ b/arch/sparc/kernel/smp_64.c
@@ -189,7 +189,7 @@ static inline long get_delta (long *rt, long *master)
189void smp_synchronize_tick_client(void) 189void smp_synchronize_tick_client(void)
190{ 190{
191 long i, delta, adj, adjust_latency = 0, done = 0; 191 long i, delta, adj, adjust_latency = 0, done = 0;
192 unsigned long flags, rt, master_time_stamp, bound; 192 unsigned long flags, rt, master_time_stamp;
193#if DEBUG_TICK_SYNC 193#if DEBUG_TICK_SYNC
194 struct { 194 struct {
195 long rt; /* roundtrip time */ 195 long rt; /* roundtrip time */
@@ -208,10 +208,8 @@ void smp_synchronize_tick_client(void)
208 { 208 {
209 for (i = 0; i < NUM_ROUNDS; i++) { 209 for (i = 0; i < NUM_ROUNDS; i++) {
210 delta = get_delta(&rt, &master_time_stamp); 210 delta = get_delta(&rt, &master_time_stamp);
211 if (delta == 0) { 211 if (delta == 0)
212 done = 1; /* let's lock on to this... */ 212 done = 1; /* let's lock on to this... */
213 bound = rt;
214 }
215 213
216 if (!done) { 214 if (!done) {
217 if (i > 0) { 215 if (i > 0) {
@@ -933,13 +931,12 @@ void smp_flush_dcache_page_impl(struct page *page, int cpu)
933void flush_dcache_page_all(struct mm_struct *mm, struct page *page) 931void flush_dcache_page_all(struct mm_struct *mm, struct page *page)
934{ 932{
935 void *pg_addr; 933 void *pg_addr;
936 int this_cpu;
937 u64 data0; 934 u64 data0;
938 935
939 if (tlb_type == hypervisor) 936 if (tlb_type == hypervisor)
940 return; 937 return;
941 938
942 this_cpu = get_cpu(); 939 preempt_disable();
943 940
944#ifdef CONFIG_DEBUG_DCFLUSH 941#ifdef CONFIG_DEBUG_DCFLUSH
945 atomic_inc(&dcpage_flushes); 942 atomic_inc(&dcpage_flushes);
@@ -964,7 +961,7 @@ void flush_dcache_page_all(struct mm_struct *mm, struct page *page)
964 } 961 }
965 __local_flush_dcache_page(page); 962 __local_flush_dcache_page(page);
966 963
967 put_cpu(); 964 preempt_enable();
968} 965}
969 966
970void __irq_entry smp_new_mmu_context_version_client(int irq, struct pt_regs *regs) 967void __irq_entry smp_new_mmu_context_version_client(int irq, struct pt_regs *regs)