aboutsummaryrefslogtreecommitdiffstats
path: root/arch
diff options
context:
space:
mode:
authorDavid S. Miller <davem@sunset.davemloft.net>2006-02-15 04:18:19 -0500
committerDavid S. Miller <davem@sunset.davemloft.net>2006-03-20 04:13:02 -0500
commitab66a50e31deb48b0444c248e67e5aa3217efda5 (patch)
treedd36ad6f69abe7a15eb2f990840512c803e980f7 /arch
parent7c3514e4501565d76f9e4dec43e1fc17389f4811 (diff)
[SPARC64]: Two IRQ handling fixes.
On SUN4V, force IRQ state to idle in enable_irq(). However, I'm still not sure this is %100 correct. Call add_interrupt_randomness() on SUN4V too. Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'arch')
-rw-r--r--arch/sparc64/kernel/irq.c11
1 files changed, 8 insertions, 3 deletions
diff --git a/arch/sparc64/kernel/irq.c b/arch/sparc64/kernel/irq.c
index c786d2549bce..4d9931d124ab 100644
--- a/arch/sparc64/kernel/irq.c
+++ b/arch/sparc64/kernel/irq.c
@@ -164,6 +164,10 @@ void enable_irq(unsigned int irq)
164 if (err != HV_EOK) 164 if (err != HV_EOK)
165 printk("sun4v_intr_setenabled(%x): err(%d)\n", 165 printk("sun4v_intr_setenabled(%x): err(%d)\n",
166 ino, err); 166 ino, err);
167 err = sun4v_intr_setstate(ino, HV_INTR_STATE_IDLE);
168 if (err != HV_EOK)
169 printk("sun4v_intr_setstate(%x): "
170 "err(%d)\n", ino, err);
167 } else { 171 } else {
168 if (tlb_type == cheetah || tlb_type == cheetah_plus) { 172 if (tlb_type == cheetah || tlb_type == cheetah_plus) {
169 unsigned long ver; 173 unsigned long ver;
@@ -663,10 +667,11 @@ static void process_bucket(int irq, struct ino_bucket *bp, struct pt_regs *regs)
663 "err(%d)\n", ino, err); 667 "err(%d)\n", ino, err);
664 } else { 668 } else {
665 upa_writel(ICLR_IDLE, bp->iclr); 669 upa_writel(ICLR_IDLE, bp->iclr);
666 /* Test and add entropy */
667 if (random & SA_SAMPLE_RANDOM)
668 add_interrupt_randomness(irq);
669 } 670 }
671
672 /* Test and add entropy */
673 if (random & SA_SAMPLE_RANDOM)
674 add_interrupt_randomness(irq);
670 } 675 }
671out: 676out:
672 bp->flags &= ~IBF_INPROGRESS; 677 bp->flags &= ~IBF_INPROGRESS;