Date: Tue, 29 Apr 2008 22:00:03 -0700 From: Peter Grehan <grehan@freebsd.org> To: =?ISO-8859-1?Q?S=F8ren_Schmidt?= <sos@FreeBSD.org>, ppc@FreeBSD.org Subject: Re: FYI: ata(4) is broken for kauai and macio Message-ID: <4817FCD3.7000906@freebsd.org> In-Reply-To: <4816BC52.5090500@freebsd.org> References: <0AF29BD3-59F9-4EBA-BB6A-07D3661E8253@mac.com> <4816BC52.5090500@freebsd.org>
next in thread | previous in thread | raw e-mail | index | archive | help
This is a multi-part message in MIME format. --------------060104010404080000020008 Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 8bit > I have it to the point where the system doesn't crash or hang, but is > barely usable due to ATA i/o's taking 300ms. It helps to remove the 300ms DELAY() used during debugging :) Patch attached. Søren: this fixes the ata issues on Powermacs, and it may help other platforms that have PIO ATA. I haven't tested the floppy and tape code, though it appears based on RELENG_7 that the change should work. later, Peter. --------------060104010404080000020008 Content-Type: text/plain; name="ata_patch.txt" Content-Transfer-Encoding: 7bit Content-Disposition: inline; filename="ata_patch.txt" Index: ata-disk.c =================================================================== RCS file: /usr/home/ncvs/src/sys/dev/ata/ata-disk.c,v retrieving revision 1.210 diff -d -u -r1.210 ata-disk.c --- ata-disk.c 17 Apr 2008 12:29:35 -0000 1.210 +++ ata-disk.c 29 Apr 2008 05:37:33 -0000 @@ -125,7 +125,7 @@ adp->disk->d_dump = ad_dump; adp->disk->d_name = "ad"; adp->disk->d_drv1 = dev; - adp->disk->d_maxsize = ch->dma.max_iosize; + adp->disk->d_maxsize = ch->dma.max_iosize ? ch->dma.max_iosize : DFLTPHYS; adp->disk->d_sectorsize = DEV_BSIZE; adp->disk->d_mediasize = DEV_BSIZE * (off_t)adp->total_secs; adp->disk->d_fwsectors = adp->sectors; Index: ata-lowlevel.c =================================================================== RCS file: /usr/home/ncvs/src/sys/dev/ata/ata-lowlevel.c,v retrieving revision 1.83 diff -d -u -r1.83 ata-lowlevel.c --- ata-lowlevel.c 17 Apr 2008 12:29:35 -0000 1.83 +++ ata-lowlevel.c 27 Apr 2008 23:33:50 -0000 @@ -213,7 +213,9 @@ printf("ata_begin_transaction OOPS!!!\n"); begin_finished: - ch->dma.unload(request); + if (ch->dma.unload) { + ch->dma.unload(request); + } return ATA_OP_FINISHED; begin_continue: Index: atapi-cd.c =================================================================== RCS file: /usr/home/ncvs/src/sys/dev/ata/atapi-cd.c,v retrieving revision 1.199 diff -d -u -r1.199 atapi-cd.c --- atapi-cd.c 17 Apr 2008 12:29:35 -0000 1.199 +++ atapi-cd.c 29 Apr 2008 05:05:49 -0000 @@ -906,8 +906,11 @@ { struct ata_channel *ch = device_get_softc(device_get_parent(dev)); struct acd_softc *cdp = device_get_ivars(dev); + uint32_t max_iosize; - cdp->iomax = min(ch->dma.max_iosize, 65534); + max_iosize = ch->dma.max_iosize ? ch->dma.max_iosize : DFLTPHYS; + + cdp->iomax = min(max_iosize, 65534); } static void Index: atapi-fd.c =================================================================== RCS file: /usr/home/ncvs/src/sys/dev/ata/atapi-fd.c,v retrieving revision 1.114 diff -d -u -r1.114 atapi-fd.c --- atapi-fd.c 17 Apr 2008 12:29:35 -0000 1.114 +++ atapi-fd.c 30 Apr 2008 04:53:28 -0000 @@ -105,7 +105,7 @@ fdp->disk->d_ioctl = afd_ioctl; fdp->disk->d_name = "afd"; fdp->disk->d_drv1 = dev; - fdp->disk->d_maxsize = ch->dma.max_iosize; + fdp->disk->d_maxsize = ch->dma.max_iosize ? ch->dma.max_iosize : DFLTPHYS; fdp->disk->d_unit = device_get_unit(dev); disk_create(fdp->disk, DISK_VERSION); return 0; Index: atapi-tape.c =================================================================== RCS file: /usr/home/ncvs/src/sys/dev/ata/atapi-tape.c,v retrieving revision 1.107 diff -d -u -r1.107 atapi-tape.c --- atapi-tape.c 17 Apr 2008 12:29:35 -0000 1.107 +++ atapi-tape.c 30 Apr 2008 04:55:08 -0000 @@ -142,7 +142,7 @@ UID_ROOT, GID_OPERATOR, 0640, "ast%d", device_get_unit(dev)); device->si_drv1 = dev; - device->si_iosize_max = ch->dma.max_iosize; + device->si_iosize_max = ch->dma.max_iosize ? ch->dma.max_iosize : DFLTPHYS; stp->dev1 = device; device = make_dev(&ast_cdevsw, 2 * device_get_unit(dev) + 1, UID_ROOT, GID_OPERATOR, 0640, "nast%d", --------------060104010404080000020008--
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?4817FCD3.7000906>