Skip to content

Commit

Permalink
sparc64: Kill error_mask from hypervisor_xcall_deliver().
Browse files Browse the repository at this point in the history
It can eat up a lot of stack space when NR_CPUS is large.
We retain some of it's functionality by reporting at least one
of the cpu's which are seen in error state.

Signed-off-by: David S. Miller <davem@davemloft.net>
  • Loading branch information
David S. Miller committed Aug 4, 2008
1 parent 90f7ae8 commit ed4d9c6
Showing 1 changed file with 7 additions and 13 deletions.
20 changes: 7 additions & 13 deletions arch/sparc64/kernel/smp.c
Original file line number Diff line number Diff line change
Expand Up @@ -626,16 +626,15 @@ static void cheetah_xcall_deliver(struct trap_per_cpu *tb, int cnt)
/* Multi-cpu list version. */
static void hypervisor_xcall_deliver(struct trap_per_cpu *tb, int cnt)
{
int retries, this_cpu, prev_sent, i;
int retries, this_cpu, prev_sent, i, saw_cpu_error;
unsigned long status;
cpumask_t error_mask;
u16 *cpu_list;

this_cpu = smp_processor_id();

cpu_list = __va(tb->cpu_list_pa);

cpus_clear(error_mask);
saw_cpu_error = 0;
retries = 0;
prev_sent = 0;
do {
Expand Down Expand Up @@ -680,10 +679,9 @@ static void hypervisor_xcall_deliver(struct trap_per_cpu *tb, int cnt)
continue;

err = sun4v_cpu_state(cpu);
if (err >= 0 &&
err == HV_CPU_STATE_ERROR) {
if (err == HV_CPU_STATE_ERROR) {
saw_cpu_error = (cpu + 1);
cpu_list[i] = 0xffff;
cpu_set(cpu, error_mask);
}
}
} else if (unlikely(status != HV_EWOULDBLOCK))
Expand All @@ -707,19 +705,15 @@ static void hypervisor_xcall_deliver(struct trap_per_cpu *tb, int cnt)
}
} while (1);

if (unlikely(!cpus_empty(error_mask)))
if (unlikely(saw_cpu_error))
goto fatal_mondo_cpu_error;

return;

fatal_mondo_cpu_error:
printk(KERN_CRIT "CPU[%d]: SUN4V mondo cpu error, some target cpus "
"were in error state\n",
this_cpu);
printk(KERN_CRIT "CPU[%d]: Error mask [ ", this_cpu);
for_each_cpu_mask_nr(i, error_mask)
printk("%d ", i);
printk("]\n");
"(including %d) were in error state\n",
this_cpu, saw_cpu_error - 1);
return;

fatal_mondo_timeout:
Expand Down

0 comments on commit ed4d9c6

Please sign in to comment.