From owner-cvs-src@FreeBSD.ORG Wed Nov 22 17:56:37 2006 Return-Path: X-Original-To: cvs-src@FreeBSD.org Delivered-To: cvs-src@FreeBSD.org Received: from mx1.FreeBSD.org (mx1.freebsd.org [69.147.83.52]) by hub.freebsd.org (Postfix) with ESMTP id 52E9216A403; Wed, 22 Nov 2006 17:56:37 +0000 (UTC) (envelope-from imp@FreeBSD.org) Received: from repoman.freebsd.org (repoman.freebsd.org [69.147.83.41]) by mx1.FreeBSD.org (Postfix) with ESMTP id 5681543D46; Wed, 22 Nov 2006 17:56:07 +0000 (GMT) (envelope-from imp@FreeBSD.org) Received: from repoman.freebsd.org (localhost [127.0.0.1]) by repoman.freebsd.org (8.13.6/8.13.6) with ESMTP id kAMHuamJ020380; Wed, 22 Nov 2006 17:56:36 GMT (envelope-from imp@repoman.freebsd.org) Received: (from imp@localhost) by repoman.freebsd.org (8.13.6/8.13.4/Submit) id kAMHuapt020379; Wed, 22 Nov 2006 17:56:36 GMT (envelope-from imp) Message-Id: <200611221756.kAMHuapt020379@repoman.freebsd.org> From: Warner Losh Date: Wed, 22 Nov 2006 17:56:36 +0000 (UTC) To: src-committers@FreeBSD.org, cvs-src@FreeBSD.org, cvs-all@FreeBSD.org X-FreeBSD-CVS-Branch: HEAD Cc: Subject: cvs commit: src/sys/dev/usb usbdi.c X-BeenThere: cvs-src@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: CVS commit messages for the src tree List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 22 Nov 2006 17:56:37 -0000 imp 2006-11-22 17:56:36 UTC FreeBSD src repository Modified files: sys/dev/usb usbdi.c Log: Fix coherency issue. From submitter: I have been debugging the usb problems some more. Your were right in your assumption (thanks for the pointer) about lack of calls to bus_dmamap_sync(). In usbdi.c bus_dmamap_sync() does get used for transfers that move data from PC to USB and it is used for transfers that move data from USB to PC. But someone forgot that control transfers consist of possibly two data chunks : the request itself and optionally a buffer of data that should be transfered to or from the USB device. On requests to the control endpoint without additional data bus_dmamap_sync() didn't get called. For some reason my first tests with umass worked (due to enough cache poisening I guess). The attached patch adds a call to bus_dmamap_sync() to usbdi.c and now all devices I have tried work out of the box. I have successfully transfered large files using the if_axe driver and I have mounted several different umass devices. submitted by: Daan Vreeken sponsored by: Vitsch Electronics reviewed by: cognet@ Revision Changes Path 1.98 +7 -0 src/sys/dev/usb/usbdi.c