Index: uspace/drv/bus/usb/xhci/transfers.c
===================================================================
--- uspace/drv/bus/usb/xhci/transfers.c	(revision 957ea3a5214cbbd5b086171e4b7e8cd700bae8c8)
+++ uspace/drv/bus/usb/xhci/transfers.c	(revision 309d98654eff661ee05c4e42c31dc8ad9bbdad58)
@@ -267,6 +267,5 @@
 	xhci_endpoint_t *ep = xhci_endpoint_get(ep_base);
 
-	/* FIXME: This is racy. Do we care? */
-	ep->ring.dequeue = addr;
+	xhci_trb_ring_update_dequeue(&ep->ring, addr);
 
 	if (ep->base.transfer_type == USB_TRANSFER_ISOCHRONOUS) {
Index: uspace/drv/bus/usb/xhci/trb_ring.h
===================================================================
--- uspace/drv/bus/usb/xhci/trb_ring.h	(revision 957ea3a5214cbbd5b086171e4b7e8cd700bae8c8)
+++ uspace/drv/bus/usb/xhci/trb_ring.h	(revision 309d98654eff661ee05c4e42c31dc8ad9bbdad58)
@@ -91,5 +91,8 @@
  * pointer inside the ring. Otherwise, the ring will soon show up as full.
  */
-static inline void xhci_trb_ring_update_dequeue(xhci_trb_ring_t *ring, uintptr_t phys) {}
+static inline void xhci_trb_ring_update_dequeue(xhci_trb_ring_t *ring, uintptr_t phys) {
+	ring->dequeue = phys;
+}
+
 uintptr_t xhci_trb_ring_get_dequeue_ptr(xhci_trb_ring_t *);
 
