diff --git a/kern/arch/riscv/trap.c b/kern/arch/riscv/trap.c
index 0e8a980..d3be282 100644
--- a/kern/arch/riscv/trap.c
+++ b/kern/arch/riscv/trap.c
@@ -343,7 +343,8 @@
 	printk("%s not implemented\n", __FUNCTION);
 }
 
-int register_irq(int irq, isr_t handler, void *irq_arg, uint32_t tbdf)
+struct irq_handler *register_irq(int irq, isr_t handler, void *irq_arg,
+				 uint32_t tbdf)
 {
 	printk("%s not implemented\n", __FUNCTION);
 	return -1;
diff --git a/kern/arch/x86/trap.c b/kern/arch/x86/trap.c
index 7647360..15fbdc8 100644
--- a/kern/arch/x86/trap.c
+++ b/kern/arch/x86/trap.c
@@ -780,7 +780,8 @@
 }
 
 /* The irq field may be ignored based on the type of Bus. */
-int register_irq(int irq, isr_t handler, void *irq_arg, uint32_t tbdf)
+struct irq_handler *register_irq(int irq, isr_t handler, void *irq_arg,
+				 uint32_t tbdf)
 {
 	struct irq_handler *irq_h;
 	int vector;
@@ -792,7 +793,7 @@
 	vector = bus_irq_setup(irq_h);
 	if (vector == -1) {
 		kfree(irq_h);
-		return -1;
+		return NULL;
 	}
 	printk("IRQ %d, vector %d (0x%x), type %s\n", irq, vector, vector,
 	       irq_h->type);
@@ -811,7 +812,7 @@
 	 * The lapic IRQs need to be unmasked on a per-core basis */
 	if (irq_h->unmask && strcmp(irq_h->type, "lapic"))
 		irq_h->unmask(irq_h, vector);
-	return 0;
+	return irq_h;
 }
 
 /* These routing functions only allow the routing of an irq to a single core.
diff --git a/kern/drivers/dma/ioat/init.c b/kern/drivers/dma/ioat/init.c
index badca85..fda838f 100644
--- a/kern/drivers/dma/ioat/init.c
+++ b/kern/drivers/dma/ioat/init.c
@@ -412,6 +412,7 @@
 	int i, j, msixcnt;
 	int err = -EINVAL;
 	uint8_t intrctrl = 0;
+	struct irq_handler *irq_h;
 
 #if 1 // AKAROS
 	/* Our IRQ setup needs a lot of work.  Let's just assume MSI-X, since
@@ -435,12 +436,12 @@
 		 * for msi/msix.  Passing 0 for now, since -1 doesn't seem like
 		 * a good idea.  This tries to do too much, and you have no
 		 * control / insight into what its doing. */
-		err = register_irq(0 /* ignored for msi(x)! */,
-				   ioat_dma_do_interrupt_msix, ioat_chan,
-				   pci_to_tbdf(pdev));
+		irq_h = register_irq(0 /* ignored for msi(x)! */,
+				     ioat_dma_do_interrupt_msix, ioat_chan,
+				     pci_to_tbdf(pdev));
 		/* TODO: this is a mess - we also don't know if we're actually
 		 * MSIX or not!  We don't even know our vector... */
-		if (err) {
+		if (!irq_h) {
 			warn("MSIX failed (cnt %d), leaking vectors etc!", i);
 			for (j = 0; j < i; j++) {
 				msix = &ioat_dma->msix_entries[j];
diff --git a/kern/drivers/net/bnx2x/bnx2x_cmn.c b/kern/drivers/net/bnx2x/bnx2x_cmn.c
index 835bd61..26cbb0a 100644
--- a/kern/drivers/net/bnx2x/bnx2x_cmn.c
+++ b/kern/drivers/net/bnx2x/bnx2x_cmn.c
@@ -1747,14 +1747,15 @@
 
 static int bnx2x_req_msix_irqs(struct bnx2x *bp)
 {
-	int i, rc, offset = 0;
+	int i, offset = 0;
+	struct irq_handler *irq_h;
 
 	/* no default status block for vf */
 	if (IS_PF(bp)) {
-		rc = register_irq(bp->msix_table[offset++].vector,
-				  bnx2x_msix_sp_int, bp->dev,
-				  pci_to_tbdf(bp->pdev));
-		if (rc) {
+		irq_h = register_irq(bp->msix_table[offset++].vector,
+				     bnx2x_msix_sp_int, bp->dev,
+				     pci_to_tbdf(bp->pdev));
+		if (!irq_h) {
 			BNX2X_ERR("request sp irq failed\n");
 			return -EBUSY;
 		}
@@ -1763,9 +1764,9 @@
 	if (CNIC_SUPPORT(bp)) {
 		offset++;
 		// AKAROS_PORT
-		rc = register_irq(0, bullshit_handler, 0,
-				  pci_to_tbdf(bp->pdev));
-		if (rc) {
+		irq_h = register_irq(0, bullshit_handler, 0,
+				     pci_to_tbdf(bp->pdev));
+		if (!irq_h) {
 			BNX2X_ERR("Fucked up getting a CNIC MSIX vector!");
 			return -EBUSY;
 		}
@@ -1776,11 +1777,12 @@
 		snprintf(fp->name, sizeof(fp->name), "%s-fp-%d",
 			 bp->dev->name, i);
 
-		rc = register_irq(bp->msix_table[offset].vector,
-				  bnx2x_msix_fp_int, fp, pci_to_tbdf(bp->pdev));
-		if (rc) {
-			BNX2X_ERR("request fp #%d irq (%d) failed  rc %d\n", i,
-			      bp->msix_table[offset].vector, rc);
+		irq_h = register_irq(bp->msix_table[offset].vector,
+				     bnx2x_msix_fp_int, fp,
+				     pci_to_tbdf(bp->pdev));
+		if (!irq_h) {
+			BNX2X_ERR("request fp #%d irq (%d) failed\n", i,
+			      bp->msix_table[offset].vector);
 			bnx2x_free_msix_irqs(bp, offset);
 			return -EBUSY;
 		}
diff --git a/kern/drivers/net/mlx4/eq.c b/kern/drivers/net/mlx4/eq.c
index 4589b08..3236ed9 100644
--- a/kern/drivers/net/mlx4/eq.c
+++ b/kern/drivers/net/mlx4/eq.c
@@ -1159,6 +1159,7 @@
 int mlx4_init_eq_table(struct mlx4_dev *dev)
 {
 	struct mlx4_priv *priv = mlx4_priv(dev);
+	struct irq_handler *irq_h;
 	int err;
 	int i;
 
@@ -1261,12 +1262,12 @@
 					   priv->eq_table.eq + i,
 					   pci_to_tbdf(PCIDEV));
 #else
-			err = register_irq(priv->eq_table.eq[i].irq,
-					   mlx4_msi_x_interrupt_akaros,
-					   priv->eq_table.eq + i,
-					   pci_to_tbdf(dev->persist->pdev));
+			irq_h = register_irq(priv->eq_table.eq[i].irq,
+					     mlx4_msi_x_interrupt_akaros,
+					     priv->eq_table.eq + i,
+					     pci_to_tbdf(dev->persist->pdev));
 #endif
-			if (err)
+			if (!irq_h)
 				goto err_out_async;
 
 			priv->eq_table.eq[i].have_irq = 1;
diff --git a/kern/drivers/net/r8169.c b/kern/drivers/net/r8169.c
index e2372b8..d75ccb8 100644
--- a/kern/drivers/net/r8169.c
+++ b/kern/drivers/net/r8169.c
@@ -7813,10 +7813,8 @@
 
 	rtl_request_firmware(tp);
 
-	retval = register_irq(pdev->irqline, rtl8169_interrupt, dev,
-			      pci_to_tbdf(pdev));
-
-	if (retval < 0)
+	if (!register_irq(pdev->irqline, rtl8169_interrupt, dev,
+			  pci_to_tbdf(pdev)))
 		goto err_release_fw_2;
 
 	rtl_lock_work(tp);
diff --git a/kern/include/trap.h b/kern/include/trap.h
index d8c2683..66d0d1b 100644
--- a/kern/include/trap.h
+++ b/kern/include/trap.h
@@ -14,7 +14,8 @@
 typedef void (*isr_t)(struct hw_trapframe *hw_tf, void *data);
 
 void idt_init(void);
-int register_irq(int irq, isr_t handler, void *irq_arg, uint32_t tbdf);
+struct irq_handler *register_irq(int irq, isr_t handler, void *irq_arg,
+				 uint32_t tbdf);
 int route_irqs(int cpu_vec, int coreid);
 void print_trapframe(struct hw_trapframe *hw_tf);
 void print_swtrapframe(struct sw_trapframe *sw_tf);
