Date: Sun, 28 Jun 1998 21:35:27 +0930 (CST) From: Peter Childs <pjchilds@imforei.apana.org.au> To: FreeBSD-gnats-submit@FreeBSD.ORG Subject: kern/7095: Gravis MAX in 2.2.6 suffers from isa.c bitrot Message-ID: <199806281205.VAA02342@al.imforei.apana.org.au>
next in thread | raw e-mail | index | archive | help
>Number: 7095 >Category: kern >Synopsis: Gravis MAX in 2.2.6 suffers from isa.c bitrot >Confidential: no >Severity: non-critical >Priority: medium >Responsible: freebsd-bugs >State: open >Quarter: >Keywords: >Date-Required: >Class: sw-bug >Submitter-Id: current-users >Arrival-Date: Sun Jun 28 05:10:01 PDT 1998 >Last-Modified: >Originator: Peter Childs >Organization: imforei >Release: FreeBSD 2.2.6-STABLE i386 >Environment: 2.2.6-RELEASE with Voxware snd and Gravis Ultrasound MAX (non-pnp) >Description: When stuffing large amounts of digital audio out of the GUS the console is flooded (as is syslog) with isa_dmastart: channel 1 not acquired isa_dmastart: channel 1 not acquired isa_dmastart: channel 1 busy A quick comparison between /sys/i386/isa/isa.c in RELENG_2_2 and HEAD shows why this is occuring in 2.2-stable and not current... >How-To-Repeat: Steal a Gravis Ultrasound MAX and install 2.2.6-RELEASE (or around) >Fix: Apply patch like this... this stops my syslog/xconsole getting flooded.. I still get a strange effect for the first few seconds of playing mp3 files like the "buffers" haven't been cleaned from the last mp3 file played (i can hear snippets of the last song...) I'll chase that.. but this will fix the isa_dmastart prob for 2.2.7-RELEASE at least... *** isa.c.orig Mon Jun 29 04:09:33 1998 --- isa.c Sun Jun 28 21:18:49 1998 *************** *** 732,738 **** * isa_dmastart(): program 8237 DMA controller channel, avoid page alignment * problems by using a bounce buffer. */ ! void isa_dmastart(int flags, caddr_t addr, u_int nbytes, int chan) { vm_offset_t phys; int waport; --- 732,739 ---- * isa_dmastart(): program 8237 DMA controller channel, avoid page alignment * problems by using a bounce buffer. */ ! void ! isa_dmastart(int flags, caddr_t addr, u_int nbytes, int chan) { vm_offset_t phys; int waport; *************** *** 745,757 **** if ((chan < 4 && nbytes > (1<<16)) || (chan >= 4 && (nbytes > (1<<17) || (u_int)addr & 1))) panic("isa_dmastart: impossible request"); ! #endif if ((dma_inuse & (1 << chan)) == 0) printf("isa_dmastart: channel %d not acquired\n", chan); if (!(flags & B_RAW)) if (dma_busy & (1 << chan)) printf("isa_dmastart: channel %d busy\n", chan); dma_busy |= (1 << chan); --- 746,766 ---- if ((chan < 4 && nbytes > (1<<16)) || (chan >= 4 && (nbytes > (1<<17) || (u_int)addr & 1))) panic("isa_dmastart: impossible request"); ! if ((dma_inuse & (1 << chan)) == 0) printf("isa_dmastart: channel %d not acquired\n", chan); + #endif + #if 0 + /* + * XXX This should be checked, but drivers like ad1848 only call + * isa_dmastart() once because they use Auto DMA mode. If we + * leave this in, drivers that do this will print this continuously. + */ if (!(flags & B_RAW)) if (dma_busy & (1 << chan)) printf("isa_dmastart: channel %d busy\n", chan); + #endif dma_busy |= (1 << chan); >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?199806281205.VAA02342>