Skip to content

Commit

Permalink
sparc64: Make smp_cross_call_masked() take a cpumask_t pointer.
Browse files Browse the repository at this point in the history
Ideally this could be simplified further such that we could pass
the pointer down directly into the xcall_deliver() implementation.

But if we do that we need to do the "cpu_online(cpu)" and
"cpu != self" checks down in those functions.

Signed-off-by: David S. Miller <davem@davemloft.net>
  • Loading branch information
David S. Miller committed Aug 4, 2008
1 parent 24445a4 commit 91a4231
Showing 1 changed file with 11 additions and 7 deletions.
18 changes: 11 additions & 7 deletions arch/sparc64/kernel/smp.c
Original file line number Diff line number Diff line change
Expand Up @@ -761,15 +761,19 @@ static void hypervisor_xcall_deliver(u64 data0, u64 data1, u64 data2, const cpum

static void (*xcall_deliver)(u64, u64, u64, const cpumask_t *);

/* Send cross call to all processors mentioned in MASK
* except self.
/* Send cross call to all processors mentioned in MASK_P
* except self. Really, there are only two cases currently,
* "&cpu_online_map" and "&mm->cpu_vm_mask".
*/
static void smp_cross_call_masked(unsigned long *func, u32 ctx, u64 data1, u64 data2, cpumask_t mask)
static void smp_cross_call_masked(unsigned long *func, u32 ctx, u64 data1, u64 data2, const cpumask_t *mask_p)
{
u64 data0 = (((u64)ctx)<<32 | (((u64)func) & 0xffffffff));
int this_cpu = get_cpu();
cpumask_t mask;

cpus_and(mask, mask, cpu_online_map);
mask = *mask_p;
if (mask_p != &cpu_online_map)
cpus_and(mask, mask, cpu_online_map);
cpu_clear(this_cpu, mask);

xcall_deliver(data0, data1, data2, &mask);
Expand Down Expand Up @@ -803,7 +807,7 @@ void arch_send_call_function_single_ipi(int cpu)

/* Send cross call to all processors except self. */
#define smp_cross_call(func, ctx, data1, data2) \
smp_cross_call_masked(func, ctx, data1, data2, cpu_online_map)
smp_cross_call_masked(func, ctx, data1, data2, &cpu_online_map)

void smp_call_function_client(int irq, struct pt_regs *regs)
{
Expand Down Expand Up @@ -1056,7 +1060,7 @@ void smp_flush_tlb_mm(struct mm_struct *mm)

smp_cross_call_masked(&xcall_flush_tlb_mm,
ctx, 0, 0,
mm->cpu_vm_mask);
&mm->cpu_vm_mask);

local_flush_and_out:
__flush_tlb_mm(ctx, SECONDARY_CONTEXT);
Expand All @@ -1074,7 +1078,7 @@ void smp_flush_tlb_pending(struct mm_struct *mm, unsigned long nr, unsigned long
else
smp_cross_call_masked(&xcall_flush_tlb_pending,
ctx, nr, (unsigned long) vaddrs,
mm->cpu_vm_mask);
&mm->cpu_vm_mask);

__flush_tlb_pending(ctx, nr, vaddrs);

Expand Down

0 comments on commit 91a4231

Please sign in to comment.