Index: uspace/drv/bus/usb/xhci/commands.c
===================================================================
--- uspace/drv/bus/usb/xhci/commands.c	(revision f45c78f205c41f1c67dfb0cfec097c87e866c376)
+++ uspace/drv/bus/usb/xhci/commands.c	(revision 74b852bcea4149baee916fef8e27effeeb124476)
@@ -67,4 +67,7 @@
 
 	list_initialize(&hc->commands);
+
+	fibril_mutex_initialize(&hc->commands_mtx);
+
 	return EOK;
 }
@@ -126,4 +129,6 @@
 static inline xhci_cmd_t *get_command(xhci_hc_t *hc, uint64_t phys)
 {
+	fibril_mutex_lock(&hc->commands_mtx);
+
 	link_t *cmd_link = list_first(&hc->commands);
 
@@ -139,8 +144,10 @@
 	if (cmd_link != NULL) {
 		list_remove(cmd_link);
+		fibril_mutex_unlock(&hc->commands_mtx);
 
 		return list_get_instance(cmd_link, xhci_cmd_t, link);
 	}
 
+	fibril_mutex_unlock(&hc->commands_mtx);
 	return NULL;
 }
@@ -151,5 +158,7 @@
 	assert(cmd);
 
+	fibril_mutex_lock(&hc->commands_mtx);
 	list_append(&cmd->link, &hc->commands);
+	fibril_mutex_unlock(&hc->commands_mtx);
 
 	xhci_trb_ring_enqueue(&hc->command_ring, &cmd->trb, &cmd->trb_phys);
Index: uspace/drv/bus/usb/xhci/hc.h
===================================================================
--- uspace/drv/bus/usb/xhci/hc.h	(revision f45c78f205c41f1c67dfb0cfec097c87e866c376)
+++ uspace/drv/bus/usb/xhci/hc.h	(revision 74b852bcea4149baee916fef8e27effeeb124476)
@@ -37,4 +37,5 @@
 #define XHCI_HC_H
 
+#include <fibril_synch.h>
 #include <usb/host/usb_transfer_batch.h>
 #include "hw_struct/regs.h"
@@ -82,4 +83,6 @@
 	/* Command list */
 	list_t commands;
+	fibril_mutex_t commands_mtx;
+
 	list_t transfers;
 
