Index: uspace/drv/bus/usb/xhci/trb_ring.c
===================================================================
--- uspace/drv/bus/usb/xhci/trb_ring.c	(revision 1f76b7d62fc48c175fedb953696d100ebe43f4ae)
+++ uspace/drv/bus/usb/xhci/trb_ring.c	(revision a2b0ba37f6b2c642126f2a41e1b946bbb423c3dd)
@@ -114,4 +114,6 @@
 	ring->pcs = 1;
 
+	fibril_mutex_initialize(&ring->guard);
+
 	usb_log_debug("Initialized new TRB ring.");
 
@@ -170,4 +172,6 @@
 int xhci_trb_ring_enqueue(xhci_trb_ring_t *ring, xhci_trb_t *td, uintptr_t *phys)
 {
+	fibril_mutex_lock(&ring->guard);
+
 	xhci_trb_t * const saved_enqueue_trb = ring->enqueue_trb;
 	trb_segment_t * const saved_enqueue_segment = ring->enqueue_segment;
@@ -204,4 +208,5 @@
 
 		usb_log_debug2("TRB ring(%p): Enqueued TRB %p", ring, trb);
+		usb_log_error("RING->PCS: %u", ring->pcs);
 		ring->enqueue_trb++;
 
@@ -219,4 +224,5 @@
 	} while (xhci_trb_is_chained(trb++));
 
+	fibril_mutex_unlock(&ring->guard);
 	return EOK;
 
@@ -224,4 +230,5 @@
 	ring->enqueue_segment = saved_enqueue_segment;
 	ring->enqueue_trb = saved_enqueue_trb;
+	fibril_mutex_unlock(&ring->guard);
 	return EAGAIN;
 }
Index: uspace/drv/bus/usb/xhci/trb_ring.h
===================================================================
--- uspace/drv/bus/usb/xhci/trb_ring.h	(revision 1f76b7d62fc48c175fedb953696d100ebe43f4ae)
+++ uspace/drv/bus/usb/xhci/trb_ring.h	(revision a2b0ba37f6b2c642126f2a41e1b946bbb423c3dd)
@@ -44,4 +44,5 @@
 
 #include <adt/list.h>
+#include <fibril_synch.h>
 #include <libarch/config.h>
 
@@ -68,4 +69,6 @@
 	uintptr_t dequeue;              /* Last reported position of the dequeue pointer */
 	bool pcs;                       /* Producer Cycle State: section 4.9.2 */
+
+	fibril_mutex_t guard;
 } xhci_trb_ring_t;
 
