[SPARC64]: Make error codes available from sun4v_intr_get*().
authorDavid S. Miller <davem@sunset.davemloft.net>
Tue, 14 Feb 2006 06:56:27 +0000 (22:56 -0800)
committerDavid S. Miller <davem@sunset.davemloft.net>
Mon, 20 Mar 2006 09:12:51 +0000 (01:12 -0800)
And check for errors at call sites.

Signed-off-by: David S. Miller <davem@davemloft.net>
arch/sparc64/kernel/irq.c
include/asm-sparc64/hypervisor.h

index c57b1708ae8cfa9be9251576a494ed6af6d635ba..0d3b0ea329c13ecbf5a4b4f22f28a3219d399bf5 100644 (file)
@@ -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 */
index 76a9d0fa27244a6115e47b339ef2a4529725c45f..f14992ab7fec7b2f807c8fabc1981607a4b170cc 100644 (file)
@@ -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.