Date: Sun, 10 Sep 2000 21:43:04 +0200 (CEST) From: mbendiks@eunet.no To: FreeBSD-gnats-submit@freebsd.org Subject: kern/21175: ISA DMA incorrectly handled Message-ID: <200009101943.VAA71964@login-1.eunet.no>
next in thread | raw e-mail | index | archive | help
>Number: 21175 >Category: kern >Synopsis: ISA DMA channels 4-7 operate on wrong memory area >Confidential: no >Severity: serious >Priority: high >Responsible: freebsd-bugs >State: open >Quarter: >Keywords: >Date-Required: >Class: sw-bug >Submitter-Id: current-users >Arrival-Date: Sun Sep 10 12:50:00 PDT 2000 >Closed-Date: >Last-Modified: >Originator: Marius Bendiksen >Release: FreeBSD 5.0-CURRENT i386 >Organization: n/a >Environment: Any system from 3.x and beyond. >Description: The ISA DMA handling code in /sys/i386/isa/isa_dma.c appears incorrect, according to my PC hardware guide. For the high channels, the page of the bounce buffer is incorrectly shifted by 16 bits, when it should be shifted by 17. This could possibly cause unexplained memory corruption under certain conditions. As a side note, genuine Intel chips do not need bounce buffers, and have not since i386, as there exists a second page register. >How-To-Repeat: No problem here yet. >Fix: The following patch will correct the problem: --- isa_dma.c.orig Sun Sep 10 21:44:53 2000 +++ isa_dma.c Sun Sep 10 21:45:12 2000 @@ -317,9 +317,9 @@ /* send start address */ waport = DMA2_CHN(chan - 4); outb(waport, phys>>1); outb(waport, phys>>9); - outb(dmapageport[chan], phys>>16); + outb(dmapageport[chan], phys>>17); /* send count */ nbytes >>= 1; outb(waport + 2, --nbytes); >Release-Note: >Audit-Trail: >Unformatted: To Unsubscribe: send mail to majordomo@FreeBSD.org with "unsubscribe freebsd-bugs" in the body of the message
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200009101943.VAA71964>