Index: uspace/drv/char/i8042/buffer.h
===================================================================
--- uspace/drv/char/i8042/buffer.h	(revision 4005e37a2d1535eb6403d0b6cb288e64c71a8a0c)
+++ uspace/drv/char/i8042/buffer.h	(revision 32ba5a6418efdf8ce0e6740d04883aff0402f4d3)
@@ -64,11 +64,14 @@
 {
 	fibril_mutex_lock(&buffer->guard);
+
 	/* Next position. */
 	uint8_t *new_head = buffer->write_head + 1;
 	if (new_head == buffer->buffer_end)
 		new_head = buffer->buffer;
+
 	/* Buffer full. */
 	while (new_head == buffer->read_head)
 		fibril_condvar_wait(&buffer->change, &buffer->guard);
+
 	/* Write data. */
 	*buffer->write_head = data;
@@ -102,6 +105,7 @@
 	if (new_write_head == buffer->buffer_end)
 		new_write_head = buffer->buffer;
-	while (new_write_head == buffer->read_head)
+	if (new_write_head == buffer->read_head)
 		fibril_condvar_broadcast(&buffer->change);
+
 	/* Move head */
 	buffer->read_head = new_head;
