From owner-freebsd-current@FreeBSD.ORG Sun Sep 7 13:39:13 2003 Return-Path: Delivered-To: freebsd-current@freebsd.org Received: from mx1.FreeBSD.org (mx1.freebsd.org [216.136.204.125]) by hub.freebsd.org (Postfix) with ESMTP id 307DD16A4BF for ; Sun, 7 Sep 2003 13:39:13 -0700 (PDT) Received: from mail.cyberonic.com (mail.cyberonic.com [4.17.179.4]) by mx1.FreeBSD.org (Postfix) with ESMTP id 13D8043FEA for ; Sun, 7 Sep 2003 13:39:12 -0700 (PDT) (envelope-from jmg@hydrogen.funkthat.com) Received: from hydrogen.funkthat.com (node-40244c0a.sfo.onnet.us.uu.net [64.36.76.10]) by mail.cyberonic.com (8.12.8/8.12.5) with ESMTP id h87KfSbi005379; Sun, 7 Sep 2003 16:41:29 -0400 Received: (from jmg@localhost) by hydrogen.funkthat.com (8.12.9/8.11.6) id h87Kd8tf060139; Sun, 7 Sep 2003 13:39:08 -0700 (PDT) (envelope-from jmg) Date: Sun, 7 Sep 2003 13:39:08 -0700 From: John-Mark Gurney To: Barney Wolff Message-ID: <20030907203908.GI39788@funkthat.com> Mail-Followup-To: Barney Wolff , freebsd-current@freebsd.org References: <20030907064510.GA702@libertysurf.fr> <20030907073246.GD39788@funkthat.com> <20030907174649.GA4378@pit.databus.com> <20030907175524.GG39788@funkthat.com> <20030907194830.GA6420@pit.databus.com> Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="IS0zKkzwUGydFO0o" Content-Disposition: inline In-Reply-To: <20030907194830.GA6420@pit.databus.com> User-Agent: Mutt/1.4.1i X-Operating-System: FreeBSD 4.2-RELEASE i386 X-PGP-Fingerprint: B7 EC EF F8 AE ED A7 31 96 7A 22 B3 D8 56 36 F4 X-Files: The truth is out there X-URL: http://resnet.uoregon.edu/~gurney_j/ X-Resume: http://resnet.uoregon.edu/~gurney_j/resume.html cc: freebsd-current@freebsd.org Subject: Re: usb flashkey disk copy error X-BeenThere: freebsd-current@freebsd.org X-Mailman-Version: 2.1.1 Precedence: list Reply-To: John-Mark Gurney List-Id: Discussions about the use of FreeBSD-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 07 Sep 2003 20:39:13 -0000 --IS0zKkzwUGydFO0o Content-Type: text/plain; charset=us-ascii Content-Disposition: inline Barney Wolff wrote this message on Sun, Sep 07, 2003 at 15:48 -0400: > I can't do more detailed diagnosis right now, but could in a few days. When you get a chance (or anyone else who has this problem), try the attached patch, and add options BROKEN_OHCI to your kernel config file. Please set hw.usb.ohci.debug=1, and send me the dmesg output of the writes. (When you copy the data to the media.) Hmmm. I just thought of something. Now is the data corrupt still correupt on another system? What I mean is did the data get written properly, but just isn't being read back from the media correctly. Unless you are coping a file larger than memory size, the cmp just pulls it from memory, not from the media. The umount/mount forces a flush of the cache, and so attempts to read from the media. Thanks. -- John-Mark Gurney Voice: +1 415 225 5579 "All that I will do, has been done, All that I have, has not." --IS0zKkzwUGydFO0o Content-Type: text/plain; charset=us-ascii Content-Disposition: attachment; filename="ohci.patch" Index: ohci.c =================================================================== RCS file: /home/ncvs/src/sys/dev/usb/ohci.c,v retrieving revision 1.132 diff -u -r1.132 ohci.c --- ohci.c 2003/08/24 17:55:54 1.132 +++ ohci.c 2003/09/07 20:28:13 @@ -513,6 +513,14 @@ DPRINTFN(alen < 4096,("ohci_alloc_std_chain: start len=%d\n", alen)); + if (ohcidebug && alen > 4096) { + printf("len: %d, pages: ", alen); + for (len = 0; len < alen; len += OHCI_PAGE_SIZE) { + printf("%s0x%x", len == 0 ? "" : ", ", DMAADDR(dma, + len)); + } + } + len = alen; cur = sp; @@ -546,9 +554,14 @@ * We can describe the above using maxsegsz = 4k and nsegs = 2 * in the future. */ +#if BROKEN_OHCI + if (len < OHCI_PAGE_SIZE - OHCI_PAGE_OFFSET(dataphys)) +#else if (OHCI_PAGE(dataphys) == OHCI_PAGE(DMAADDR(dma, offset + len - 1)) || len - (OHCI_PAGE_SIZE - - OHCI_PAGE_OFFSET(dataphys)) <= OHCI_PAGE_SIZE) { + OHCI_PAGE_OFFSET(dataphys)) <= OHCI_PAGE_SIZE) +#endif + { /* we can handle it in this TD */ curlen = len; } else { --IS0zKkzwUGydFO0o--