Re: [PATCH 6/11] arm: convert to generic helpers for IPI function calls

Catalin Marinas
2008-04-22T15:23:09Z

On Tue, 2008-04-22 at 09:57 +0200, Jens Axboe wrote:
> This converts arm to use the new helpers for smp_call_function() and
> friends, and adds support for smp_call_function_single(). Not tested
> at all, not even compiled.

With the minor fixes below, it compiles and seems to run OK on RealView
EB + ARM11MPCore (4 CPUs):

diff --git a/arch/arm/kernel/smp.c b/arch/arm/kernel/smp.c
index 9c85329..6344466 100644
--- a/arch/arm/kernel/smp.c
+++ b/arch/arm/kernel/smp.c
@@ -484,7 +484,7 @@ asmlinkage void __exception do_IPI(struct pt_regs *regs)
generic_smp_call_function_interrupt();
break;

- case IPI_CALL_FUNC:
+ case IPI_CALL_FUNC_SINGLE:
generic_smp_call_function_single_interrupt();
break;

@@ -536,14 +536,13 @@ int setup_profiling_timer(unsigned int multiplier)
}

static int
-on_each_cpu_mask(void (*func)(void *), void *info, int retry, int wait,
- cpumask_t mask)
+on_each_cpu_mask(void (*func)(void *), void *info, int wait, cpumask_t mask)
{
int ret = 0;

preempt_disable();

- ret = smp_call_function_mask(mask, func, info, retry, wait);
+ ret = smp_call_function_mask(mask, func, info, wait);
if (cpu_isset(smp_processor_id(), mask))
func(info);

@@ -612,7 +611,7 @@ void flush_tlb_mm(struct mm_struct *mm)
{
cpumask_t mask = mm->cpu_vm_mask;

- on_each_cpu_mask(ipi_flush_tlb_mm, mm, 1, 1, mask);
+ on_each_cpu_mask(ipi_flush_tlb_mm, mm, 1, mask);
}

void flush_tlb_page(struct vm_area_struct *vma, unsigned long uaddr)
@@ -623,7 +622,7 @@ void flush_tlb_page(struct vm_area_struct *vma, unsigned long uaddr)
ta.ta_vma = vma;
ta.ta_start = uaddr;

- on_each_cpu_mask(ipi_flush_tlb_page, &ta, 1, 1, mask);
+ on_each_cpu_mask(ipi_flush_tlb_page, &ta, 1, mask);
}

void flush_tlb_kernel_page(unsigned long kaddr)
@@ -645,7 +644,7 @@ void flush_tlb_range(struct vm_area_struct *vma,
ta.ta_start = start;
ta.ta_end = end;

- on_each_cpu_mask(ipi_flush_tlb_range, &ta, 1, 1, mask);
+ on_each_cpu_mask(ipi_flush_tlb_range, &ta, 1, mask);
}

void flush_tlb_kernel_range(unsigned long start, unsigned long end)

--
Catalin