Skip site navigation (1)Skip section navigation (2)
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>