Index: kernel/genarch/src/kbd/ns16550.c
===================================================================
--- kernel/genarch/src/kbd/ns16550.c	(revision 4874c2dc3da3748951cb71f24805c35b88106d0f)
+++ kernel/genarch/src/kbd/ns16550.c	(revision 8cee7054021b8feabfbbb8d0e8ed691c0dc8e680)
@@ -81,4 +81,6 @@
 void ns16550_grab(void)
 {
+	ipl_t ipl = interrupts_disable();
+
 	ns16550_ier_write(&ns16550, IER_ERBFI);		/* enable receiver interrupt */
 	
@@ -86,5 +88,8 @@
 		(void) ns16550_rbr_read(&ns16550);
 
+	spinlock_lock(&ns16550_irq.lock);
 	ns16550_irq.notif_cfg.notify = false;
+	spinlock_unlock(&ns16550_irq.lock);
+	interrupts_restore(ipl);
 }
 
@@ -92,6 +97,10 @@
 void ns16550_release(void)
 {
+	ipl_t ipl = interrupts_disable();
+	spinlock_lock(&ns16550_irq.lock);
 	if (ns16550_irq.notif_cfg.answerbox)
 		ns16550_irq.notif_cfg.notify = true;
+	spinlock_unlock(&ns16550_irq.lock);
+	interrupts_restore(ipl);
 }
 
Index: kernel/genarch/src/kbd/z8530.c
===================================================================
--- kernel/genarch/src/kbd/z8530.c	(revision 4874c2dc3da3748951cb71f24805c35b88106d0f)
+++ kernel/genarch/src/kbd/z8530.c	(revision 8cee7054021b8feabfbbb8d0e8ed691c0dc8e680)
@@ -75,4 +75,6 @@
 void z8530_grab(void)
 {
+	ipl_t ipl = interrupts_disable();
+
 	(void) z8530_read_a(&z8530, RR8);
 
@@ -90,5 +92,8 @@
 	z8530_write_a(&z8530, WR9, WR9_MIE);		/* Master Interrupt Enable. */
 	
+	spinlock_lock(&z8530_irq.lock);
 	z8530_irq.notif_cfg.notify = false;
+	spinlock_unlock(&z8530_irq.lock);
+	interrupts_restore(ipl);
 }
 
@@ -96,6 +101,10 @@
 void z8530_release(void)
 {
+	ipl_t ipl = interrupts_disable();
+	spinlock_lock(&z8530_irq.lock);
 	if (z8530_irq.notif_cfg.answerbox)
 		z8530_irq.notif_cfg.notify = true;
+	spinlock_unlock(&z8530_irq.lock);
+	interrupts_restore(ipl);
 }
 
