smp.c (9a64e8e0ace51b309fdcff4b4754b3649250382a) smp.c (5d2068da8d339e4dff8f9b9a1246e6a79e2949d8)
1/*
2 * SMP Support
3 *
4 * Copyright (C) 1999 Walt Drummond <drummond@valinux.com>
5 * Copyright (C) 1999, 2001, 2003 David Mosberger-Tang <davidm@hpl.hp.com>
6 *
7 * Lots of stuff stolen from arch/alpha/kernel/smp.c
8 *

--- 248 unchanged lines hidden (view full) ---

257{
258 unsigned short *counts = __ia64_per_cpu_var(shadow_flush_counts);
259 cpumask_t cpumask = xcpumask;
260 int mycpu, cpu, flush_mycpu = 0;
261
262 preempt_disable();
263 mycpu = smp_processor_id();
264
1/*
2 * SMP Support
3 *
4 * Copyright (C) 1999 Walt Drummond <drummond@valinux.com>
5 * Copyright (C) 1999, 2001, 2003 David Mosberger-Tang <davidm@hpl.hp.com>
6 *
7 * Lots of stuff stolen from arch/alpha/kernel/smp.c
8 *

--- 248 unchanged lines hidden (view full) ---

257{
258 unsigned short *counts = __ia64_per_cpu_var(shadow_flush_counts);
259 cpumask_t cpumask = xcpumask;
260 int mycpu, cpu, flush_mycpu = 0;
261
262 preempt_disable();
263 mycpu = smp_processor_id();
264
265 for_each_cpu_mask(cpu, cpumask)
265 for_each_cpu(cpu, &cpumask)
266 counts[cpu] = local_tlb_flush_counts[cpu].count & 0xffff;
267
268 mb();
266 counts[cpu] = local_tlb_flush_counts[cpu].count & 0xffff;
267
268 mb();
269 for_each_cpu_mask(cpu, cpumask) {
269 for_each_cpu(cpu, &cpumask) {
270 if (cpu == mycpu)
271 flush_mycpu = 1;
272 else
273 smp_send_local_flush_tlb(cpu);
274 }
275
276 if (flush_mycpu)
277 smp_local_flush_tlb();
278
270 if (cpu == mycpu)
271 flush_mycpu = 1;
272 else
273 smp_send_local_flush_tlb(cpu);
274 }
275
276 if (flush_mycpu)
277 smp_local_flush_tlb();
278
279 for_each_cpu_mask(cpu, cpumask)
279 for_each_cpu(cpu, &cpumask)
280 while(counts[cpu] == (local_tlb_flush_counts[cpu].count & 0xffff))
281 udelay(FLUSH_DELAY);
282
283 preempt_enable();
284}
285
286void
287smp_flush_tlb_all (void)

--- 55 unchanged lines hidden ---
280 while(counts[cpu] == (local_tlb_flush_counts[cpu].count & 0xffff))
281 udelay(FLUSH_DELAY);
282
283 preempt_enable();
284}
285
286void
287smp_flush_tlb_all (void)

--- 55 unchanged lines hidden ---