From owner-freebsd-hackers Tue Nov 28 01:05:04 1995 Return-Path: owner-hackers Received: (from root@localhost) by freefall.freebsd.org (8.6.12/8.6.6) id BAA18030 for hackers-outgoing; Tue, 28 Nov 1995 01:05:04 -0800 Received: from genesis.atrad.adelaide.edu.au (genesis.atrad.adelaide.edu.au [129.127.96.120]) by freefall.freebsd.org (8.6.12/8.6.6) with ESMTP id BAA18017 for ; Tue, 28 Nov 1995 01:04:56 -0800 Received: from msmith@localhost by genesis.atrad.adelaide.edu.au (8.6.12/8.6.9) id IAA07993; Tue, 28 Nov 1995 08:56:16 GMT From: Michael Smith Message-Id: <199511280856.IAA07993@genesis.atrad.adelaide.edu.au> Subject: Re: 16 ports Boca - anyone using it? To: jgreco@brasil.moneng.mei.com (Joe Greco) Date: Tue, 28 Nov 1995 08:56:16 +0000 () Cc: rich@spirit.com.au, hsu@clinet.fi, msmith@atrad.adelaide.edu.au, freebsd-hackers@freefall.freebsd.org In-Reply-To: <199511270623.AAA10644@brasil.moneng.mei.com> from "Joe Greco" at Nov 27, 95 00:23:17 am MIME-Version: 1.0 Content-Type: text/plain; charset=US-ASCII Content-Transfer-Encoding: 7bit Content-Length: 2216 Sender: owner-hackers@FreeBSD.ORG Precedence: bulk Joe Greco stands accused of saying: > > Um. "Fascinating", I say. I didn't have any diagnostic tools handy so I > rebooted the box and wrote a little program that would page me if the board > died again. The next day I went and hooked up my trusty logic probe, and > the wait began. :-) A week later (last nite, actually!), I got a page, > and fortunately somebody was at the office to observe the logic probe. > The interrupt line is being held ACTIVE....???!!! (solid red on the probe, > normally green). Yecch. > Do any sio-shared-interrupt-geniuses have any ideas? I can picture all > sorts of plausible race conditions and I have no idea what the code is > doing. ISA interrupts are edge-triggered, so something happened to lose you one. As far as I can tell, siopoll() doesn't check for pending interrupts on ports as it cycles around (I can imagine a possible race if it did...) You could possibly add some code to siopoll() to check the interrupt status of open ports, and spew a console printf if it found a port with pending interrupt status. Something like : if (incc <= 0 || !(tp->t_state & TS_ISOPEN)) continue; + disable_intr(); + iir = inb(com->int_id_port) & 0x07; + enable_intr(); + if (iir) + printf("sio%d: interrupt pending (%d) in poll\n", + com->unit,iir); /* * Avoid the grotesquely inefficient lineswitch routine * (ttyinput) in "raw" mode. It usually takes about 450 (Bruce is probably laughing himself silly over some obvious mistake I'm making here, but that's what I'd start with). If this "works" (it may fill your log partition pretty quickly 8), then we could find a way to call siointr to handle the missed interrupt. > Joe Greco - Systems Administrator jgreco@ns.sol.net -- ]] Mike Smith, Software Engineer msmith@atrad.adelaide.edu.au [[ ]] Genesis Software genesis@atrad.adelaide.edu.au [[ ]] High-speed data acquisition and (GSM mobile) 041-122-496 [[ ]] realtime instrument control (ph/fax) +61-8-267-3039 [[ ]] "Who does BSD?" "We do Chucky, we do." [[