summaryrefslogtreecommitdiffstats
path: root/arch/sparc64/kernel/irq.c
diff options
context:
space:
mode:
authorLinus Torvalds <torvalds@linux-foundation.org>2008-08-04 19:04:36 -0700
committerLinus Torvalds <torvalds@linux-foundation.org>2008-08-04 19:04:36 -0700
commite9ba9698187ddbc0c5bfcf41de0349a662d23d02 (patch)
treeb11f8658d0bb05fe8bd826de1ead328d44e84005 /arch/sparc64/kernel/irq.c
parent2e1e9212ed8c532c6b324de77d3cafef5d2bc846 (diff)
parentae583885bfd07474789059cdef399289bd66c8d0 (diff)
downloadblackbird-op-linux-e9ba9698187ddbc0c5bfcf41de0349a662d23d02.tar.gz
blackbird-op-linux-e9ba9698187ddbc0c5bfcf41de0349a662d23d02.zip
Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/sparc-2.6
* git://git.kernel.org/pub/scm/linux/kernel/git/davem/sparc-2.6: sparc64: Remove all cpumask_t local variables in xcall dispatch. sparc64: Kill error_mask from hypervisor_xcall_deliver(). sparc64: Build cpu list and mondo block at top-level xcall_deliver(). sparc64: Disable local interrupts around xcall_deliver_impl() invocation. sparc64: Make all xcall_deliver's go through common helper function. sparc64: Always allocate the send mondo blocks, even on non-sun4v. sparc64: Make smp_cross_call_masked() take a cpumask_t pointer. sparc64: Directly call xcall_deliver() in smp_start_sync_tick_client. sparc64: Call xcall_deliver() directly in some cases. sparc64: Use cpumask_t pointers and for_each_cpu_mask_nr() in xcall_deliver. sparc64: Use xcall_deliver() consistently. sparc64: Use function pointer for cross-call sending. arch/sparc64/kernel/signal.c: removed duplicated #include sparc64: Need to disable preemption around smp_tsb_sync().
Diffstat (limited to 'arch/sparc64/kernel/irq.c')
-rw-r--r--arch/sparc64/kernel/irq.c19
1 files changed, 16 insertions, 3 deletions
diff --git a/arch/sparc64/kernel/irq.c b/arch/sparc64/kernel/irq.c
index c481673d249c..ba43d85e8dde 100644
--- a/arch/sparc64/kernel/irq.c
+++ b/arch/sparc64/kernel/irq.c
@@ -915,12 +915,18 @@ static void __init sun4v_init_mondo_queues(void)
alloc_one_mondo(&tb->nonresum_mondo_pa, tb->nonresum_qmask);
alloc_one_kbuf(&tb->nonresum_kernel_buf_pa,
tb->nonresum_qmask);
+ }
+}
+
+static void __init init_send_mondo_info(void)
+{
+ int cpu;
+
+ for_each_possible_cpu(cpu) {
+ struct trap_per_cpu *tb = &trap_block[cpu];
init_cpu_send_mondo_info(tb);
}
-
- /* Load up the boot cpu's entries. */
- sun4v_register_mondo_queues(hard_smp_processor_id());
}
static struct irqaction timer_irq_action = {
@@ -949,6 +955,13 @@ void __init init_IRQ(void)
if (tlb_type == hypervisor)
sun4v_init_mondo_queues();
+ init_send_mondo_info();
+
+ if (tlb_type == hypervisor) {
+ /* Load up the boot cpu's entries. */
+ sun4v_register_mondo_queues(hard_smp_processor_id());
+ }
+
/* We need to clear any IRQ's pending in the soft interrupt
* registers, a spurious one could be left around from the
* PROM timer which we just disabled.
OpenPOWER on IntegriCloud