From 6fb9ae8f4356f6b17f15894491d6339245dcd8ec Mon Sep 17 00:00:00 2001 From: cinap_lenrek Date: Sat, 5 Sep 2015 10:14:19 +0200 Subject: usbehci: clean cache unconditionally before handing a buffer to the hardware even in the read case, we need to clean the cache so the cpu will not flush out old changes while the hardware updates the buffer. --- sys/src/9/port/usbehci.c | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/sys/src/9/port/usbehci.c b/sys/src/9/port/usbehci.c index d9fd74d15..aab982b3c 100644 --- a/sys/src/9/port/usbehci.c +++ b/sys/src/9/port/usbehci.c @@ -2171,11 +2171,10 @@ epgettd(Ctlr *ctlr, Qio *io, int flags, void *a, int count, int maxpkt) td->buff = (*ctlr->dmaalloc)(count+0x1000); td->data = (uchar*)ROUND((uintptr)td->buff, 0x1000); } - if(a != nil && count > 0){ + if(a != nil && count > 0) memmove(td->data, a, count); - if(ctlr->dmaflush != nil && td->buff != nil) - (*ctlr->dmaflush)(1, td->data, count); - } + if(ctlr->dmaflush != nil && td->buff != nil) + (*ctlr->dmaflush)(1, td->data, count); pa = PADDR(td->data); for(i = 0; i < nelem(td->buffer); i++){ td->buffer[i] = pa; -- cgit v1.2.3