PERFORCE change 152649 for review

Hans Petter Selasky hselasky at FreeBSD.org
Sat Nov 8 01:10:55 PST 2008


http://perforce.freebsd.org/chv.cgi?CH=152649

Change 152649 by hselasky at hselasky_laptop001 on 2008/11/08 09:09:50

	
	Fix a serious BUSDMA bug: The initial virtual page offset is 
	not retained on the bounce pages, which is what the EHCI and
	the OHCI expects.

Affected files ...

.. //depot/projects/usb/src/sys/i386/i386/busdma_machdep.c#10 edit

Differences ...

==== //depot/projects/usb/src/sys/i386/i386/busdma_machdep.c#10 (text+ko) ====

@@ -938,7 +938,8 @@
 		if (op & BUS_DMASYNC_PREWRITE) {
 			while (bpage != NULL) {
 				bcopy((void *)bpage->datavaddr,
-				      (void *)bpage->vaddr,
+				      (void *)(bpage->vaddr + 
+				       ((vm_offset_t)(bpage->datavaddr) & PAGE_MASK)),
 				      bpage->datacount);
 				bpage = STAILQ_NEXT(bpage, links);
 			}
@@ -947,7 +948,8 @@
 
 		if (op & BUS_DMASYNC_POSTREAD) {
 			while (bpage != NULL) {
-				bcopy((void *)bpage->vaddr,
+				bcopy((void *)(bpage->vaddr +
+				       ((vm_offset_t)(bpage->datavaddr) & PAGE_MASK)),
 				      (void *)bpage->datavaddr,
 				      bpage->datacount);
 				bpage = STAILQ_NEXT(bpage, links);
@@ -1149,7 +1151,7 @@
 	bpage->datavaddr = vaddr;
 	bpage->datacount = size;
 	STAILQ_INSERT_TAIL(&(map->bpages), bpage, links);
-	return (bpage->busaddr);
+	return (bpage->busaddr + ((vm_offset_t)vaddr & PAGE_MASK));
 }
 
 static void


More information about the p4-projects mailing list