aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDavid S. Miller <davem@sunset.davemloft.net>2006-02-13 22:56:27 -0800
committerDavid S. Miller <davem@sunset.davemloft.net>2006-03-20 01:12:51 -0800
commitc4bea2883974a59ab7a0ac6c01d34f7ae0e8cd8e (patch)
tree3d32f942cd0a62f6ca89fe7781f59708845d7a38
parent4bf447d6f7c2357dec8bdc24ce0fcffd71cc29c0 (diff)
[SPARC64]: Make error codes available from sun4v_intr_get*().
And check for errors at call sites. Signed-off-by: David S. Miller <davem@davemloft.net>
-rw-r--r--arch/sparc64/kernel/irq.c21
-rw-r--r--include/asm-sparc64/hypervisor.h6
2 files changed, 21 insertions, 6 deletions
diff --git a/arch/sparc64/kernel/irq.c b/arch/sparc64/kernel/irq.c
index c57b1708ae8..0d3b0ea329c 100644
--- a/arch/sparc64/kernel/irq.c
+++ b/arch/sparc64/kernel/irq.c
@@ -154,9 +154,16 @@ void enable_irq(unsigned int irq)
if (tlb_type == hypervisor) {
unsigned int ino = __irq_ino(irq);
int cpu = hard_smp_processor_id();
+ int err;
- sun4v_intr_settarget(ino, cpu);
+ err = sun4v_intr_settarget(ino, cpu);
+ if (err != HV_EOK)
+ printk("sun4v_intr_settarget(%x,%d): err(%d)\n",
+ ino, cpu, err);
sun4v_intr_setenabled(ino, HV_INTR_ENABLED);
+ if (err != HV_EOK)
+ printk("sun4v_intr_setenabled(%x): err(%d)\n",
+ ino, err);
} else {
if (tlb_type == cheetah || tlb_type == cheetah_plus) {
unsigned long ver;
@@ -216,8 +223,12 @@ void disable_irq(unsigned int irq)
if (imap != 0UL) {
if (tlb_type == hypervisor) {
unsigned int ino = __irq_ino(irq);
+ int err;
- sun4v_intr_setenabled(ino, HV_INTR_DISABLED);
+ err = sun4v_intr_setenabled(ino, HV_INTR_DISABLED);
+ if (err != HV_EOK)
+ printk("sun4v_intr_setenabled(%x): "
+ "err(%d)\n", ino, err);
} else {
u32 tmp;
@@ -647,8 +658,12 @@ static void process_bucket(int irq, struct ino_bucket *bp, struct pt_regs *regs)
if (bp->pil != 0) {
if (tlb_type == hypervisor) {
unsigned int ino = __irq_ino(bp);
+ int err;
- sun4v_intr_setstate(ino, HV_INTR_STATE_IDLE);
+ err = sun4v_intr_setstate(ino, HV_INTR_STATE_IDLE);
+ if (err != HV_EOK)
+ printk("sun4v_intr_setstate(%x): "
+ "err(%d)\n", ino, err);
} else {
upa_writel(ICLR_IDLE, bp->iclr);
/* Test and add entropy */
diff --git a/include/asm-sparc64/hypervisor.h b/include/asm-sparc64/hypervisor.h
index 76a9d0fa272..f14992ab7fe 100644
--- a/include/asm-sparc64/hypervisor.h
+++ b/include/asm-sparc64/hypervisor.h
@@ -1238,7 +1238,7 @@ extern unsigned long sun4v_intr_getenabled(unsigned long sysino);
#define HV_FAST_INTR_SETENABLED 0xa2
#ifndef __ASSEMBLY__
-extern void sun4v_intr_setenabled(unsigned long sysino, unsigned long intr_enabled);
+extern unsigned long sun4v_intr_setenabled(unsigned long sysino, unsigned long intr_enabled);
#endif
/* intr_getstate()
@@ -1274,7 +1274,7 @@ extern unsigned long sun4v_intr_getstate(unsigned long sysino);
#define HV_FAST_INTR_SETSTATE 0xa4
#ifndef __ASSEMBLY__
-extern void sun4v_intr_setstate(unsigned long sysino, unsigned long intr_state);
+extern unsigned long sun4v_intr_setstate(unsigned long sysino, unsigned long intr_state);
#endif
/* intr_gettarget()
@@ -1309,7 +1309,7 @@ extern unsigned long sun4v_intr_gettarget(unsigned long sysino);
#define HV_FAST_INTR_SETTARGET 0xa6
#ifndef __ASSEMBLY__
-extern void sun4v_intr_settarget(unsigned long sysino, unsigned long cpuid);
+extern unsigned long sun4v_intr_settarget(unsigned long sysino, unsigned long cpuid);
#endif
/* PCI IO services.