Index: uspace/drv/bus/usb/xhci/commands.c
===================================================================
--- uspace/drv/bus/usb/xhci/commands.c	(revision e50bdd92f9146bdc96f1e8cbf38239a28c189f77)
+++ uspace/drv/bus/usb/xhci/commands.c	(revision c46c35679bb04ee4af5c27267fafe2be0b25e6cc)
@@ -50,4 +50,16 @@
 	list_initialize(&hc->commands);
 	return EOK;
+}
+
+void xhci_fini_commands(xhci_hc_t *hc)
+{
+	// Note: Untested.
+	assert(hc);
+
+	// We assume that the hc is dying/stopping, so we ignore
+	// the ownership of the commands.
+	list_foreach(hc->commands, link, xhci_cmd_t, cmd) {
+		xhci_free_command(cmd);
+	}
 }
 
Index: uspace/drv/bus/usb/xhci/commands.h
===================================================================
--- uspace/drv/bus/usb/xhci/commands.h	(revision e50bdd92f9146bdc96f1e8cbf38239a28c189f77)
+++ uspace/drv/bus/usb/xhci/commands.h	(revision c46c35679bb04ee4af5c27267fafe2be0b25e6cc)
@@ -57,4 +57,5 @@
 
 int xhci_init_commands(xhci_hc_t *);
+void xhci_fini_commands(xhci_hc_t *);
 int xhci_wait_for_command(xhci_cmd_t *, uint32_t);
 xhci_cmd_t *xhci_alloc_command(void);
Index: uspace/drv/bus/usb/xhci/hc.c
===================================================================
--- uspace/drv/bus/usb/xhci/hc.c	(revision e50bdd92f9146bdc96f1e8cbf38239a28c189f77)
+++ uspace/drv/bus/usb/xhci/hc.c	(revision c46c35679bb04ee4af5c27267fafe2be0b25e6cc)
@@ -489,4 +489,5 @@
 	xhci_event_ring_fini(&hc->event_ring);
 	hc_dcbaa_fini(hc);
+	xhci_fini_commands(hc);
 	pio_disable(hc->base, RNGSZ(hc->mmio_range));
 	usb_log_info("HC(%p): Finalized.", hc);
