x86: check for unmask() during deregister_irq()

IRQ handlers for type "IPI" do not have mask or unmask methods.

Signed-off-by: Barret Rhoden <brho@cs.berkeley.edu>
diff --git a/kern/arch/x86/trap.c b/kern/arch/x86/trap.c
index b630aba..a365d70 100644
--- a/kern/arch/x86/trap.c
+++ b/kern/arch/x86/trap.c
@@ -843,7 +843,8 @@
 	/* Ideally, the driver should have told the device to not fire the IRQ
 	 * anymore.  If they do, we may get a warn_once.  This could be on
 	 * another core, etc. */
-	irq_h->mask(irq_h, irq_h->apic_vector);
+	if (irq_h->mask)
+		irq_h->mask(irq_h, irq_h->apic_vector);
 	synchronize_rcu();
 	if (irq_h->cleanup)
 		irq_h->cleanup(irq_h);