Index: uspace/drv/ohci/endpoint_list.c
===================================================================
--- uspace/drv/ohci/endpoint_list.c	(revision 5e6e50bb1b779f712e2db4484d62aae669200eca)
+++ uspace/drv/ohci/endpoint_list.c	(revision 2aaf80403cfc5d32059b7711a076f77b1dcfd359)
@@ -34,4 +34,5 @@
 #include <errno.h>
 #include <usb/debug.h>
+#include <arch/barrier.h>
 
 #include "endpoint_list.h"
@@ -107,9 +108,14 @@
 		last_ed = last->ed;
 	}
-	/* keep link */
+	/* Keep link */
 	hcd_ep->ed->next = last_ed->next;
+	/* Make sure ED is written to the memory */
+	write_barrier();
+
+	/* Add ed to the hw list */
 	ed_append_ed(last_ed, hcd_ep->ed);
-
-	asm volatile ("": : :"memory");
+	/* Make sure ED is updated */
+	write_barrier();
+
 
 	/* Add to the driver list */
@@ -212,6 +218,7 @@
 	assert((prev_ed->next & ED_NEXT_PTR_MASK) == addr_to_phys(hcd_ep->ed));
 	prev_ed->next = hcd_ep->ed->next;
-
-	asm volatile ("": : :"memory");
+	/* Make sure ED is updated */
+	write_barrier();
+
 	usb_log_debug("HCD EP(%p) removed (%s) from %s, next %x.\n",
 	    hcd_ep, qpos, instance->name, hcd_ep->ed->next);
Index: uspace/drv/uhci-hcd/transfer_list.c
===================================================================
--- uspace/drv/uhci-hcd/transfer_list.c	(revision 5e6e50bb1b779f712e2db4484d62aae669200eca)
+++ uspace/drv/uhci-hcd/transfer_list.c	(revision 2aaf80403cfc5d32059b7711a076f77b1dcfd359)
@@ -34,4 +34,5 @@
 #include <errno.h>
 #include <usb/debug.h>
+#include <arch/barrier.h>
 
 #include "transfer_list.h"
@@ -126,9 +127,13 @@
 	assert((pa & LINK_POINTER_ADDRESS_MASK) == pa);
 
+	/* Make sure all data in the batch are written */
+	write_barrier();
+
 	/* keep link */
 	batch_qh(batch)->next = last_qh->next;
 	qh_set_next_qh(last_qh, batch_qh(batch));
 
-	asm volatile ("": : :"memory");
+	/* Make sure the pointer is updated */
+	write_barrier();
 
 	/* Add to the driver list */
@@ -222,5 +227,8 @@
 	    == addr_to_phys(batch_qh(batch)));
 	prev_qh->next = batch_qh(batch)->next;
-	asm volatile ("": : :"memory");
+
+	/* Make sure the pointer is updated */
+	write_barrier();
+
 	/* Remove from the batch list */
 	list_remove(&batch->link);
Index: uspace/drv/uhci-hcd/utils/malloc32.h
===================================================================
--- uspace/drv/uhci-hcd/utils/malloc32.h	(revision 5e6e50bb1b779f712e2db4484d62aae669200eca)
+++ uspace/drv/uhci-hcd/utils/malloc32.h	(revision 2aaf80403cfc5d32059b7711a076f77b1dcfd359)
@@ -74,5 +74,6 @@
 	if (size <= SLAB_ELEMENT_SIZE)
 		return slab_malloc_g();
-	assert(false);
+	usb_log_warning("Requested %zu bytes, current allocator can't handle "
+	    "that amount, pray that the standard malloc will suffice.");
 	return memalign(UHCI_STRCUTURES_ALIGNMENT, size);
 }
