Author: gonzo
Date: Wed Oct 12 17:10:59 2016
New Revision: 307151
URL: https://svnweb.freebsd.org/changeset/base/307151

Log:
  INTRNG: Propagate IRQ activation error to API consumer
  
  Keep resource state consistent with INTRNG state - if intr_activate_irq
  fails - deactivate resource and propagate error to calling function
  
  Reviewed by:  mmel

Modified:
  head/sys/arm/arm/nexus.c
  head/sys/arm64/arm64/nexus.c
  head/sys/mips/mips/nexus.c

Modified: head/sys/arm/arm/nexus.c
==============================================================================
--- head/sys/arm/arm/nexus.c    Wed Oct 12 15:49:20 2016        (r307150)
+++ head/sys/arm/arm/nexus.c    Wed Oct 12 17:10:59 2016        (r307151)
@@ -383,7 +383,11 @@ nexus_activate_resource(device_t bus, de
                return (0);
        } else if (type == SYS_RES_IRQ) {
 #ifdef INTRNG
-               intr_activate_irq(child, r);
+               err = intr_activate_irq(child, r);
+               if (err != 0) {
+                       rman_deactivate_resource(r);
+                       return (err);
+               }
 #endif
        }
        return (0);

Modified: head/sys/arm64/arm64/nexus.c
==============================================================================
--- head/sys/arm64/arm64/nexus.c        Wed Oct 12 15:49:20 2016        
(r307150)
+++ head/sys/arm64/arm64/nexus.c        Wed Oct 12 17:10:59 2016        
(r307151)
@@ -347,7 +347,11 @@ nexus_activate_resource(device_t bus, de
                rman_set_virtual(r, (void *)vaddr);
                rman_set_bushandle(r, vaddr);
        } else if (type == SYS_RES_IRQ) {
-               intr_activate_irq(child, r);
+               err = intr_activate_irq(child, r);
+               if (err != 0) {
+                       rman_deactivate_resource(r);
+                       return (err);
+               }
        }
        return (0);
 }

Modified: head/sys/mips/mips/nexus.c
==============================================================================
--- head/sys/mips/mips/nexus.c  Wed Oct 12 15:49:20 2016        (r307150)
+++ head/sys/mips/mips/nexus.c  Wed Oct 12 17:10:59 2016        (r307151)
@@ -433,7 +433,11 @@ nexus_activate_resource(device_t bus, de
        } else if (type == SYS_RES_IRQ) {
 #ifdef INTRNG
 #ifdef FDT
-               intr_activate_irq(child, r);
+               err = intr_activate_irq(child, r);
+               if (err != 0) {
+                       rman_deactivate_resource(r);
+                       return (err);
+               }
 #else
                /*
                 * INTRNG without FDT needs to have the interrupt properly
_______________________________________________
svn-src-all@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "svn-src-all-unsubscr...@freebsd.org"

Reply via email to