From mboxrd@z Thu Jan 1 00:00:00 1970 Date: Fri, 8 Sep 1995 13:42:09 -0400 From: Dave Burton daveb@tkg.com Subject: panic: ataintr: wait busy Topicbox-Message-UUID: 2240e8d4-eac8-11e9-9e20-41e7f4b1d025 Message-ID: <19950908174209.8K3qOP519o75T6rV9EM-V8QP-xQpb0B9XNilL6JJWgU@z> | The machine I can use for plan9 was finally delivered. It's a 486 with an | Adaptec 1542 of some flavor. When I boot I get wait busy panics. I updated | my disks this afternoon and when I copy b.com and 9dos to C: and do | | C:\b sd!0 | | It sees both of the disks I have installed, but after 9dos boots I get this: | | 5569 free pages, 22276K bytes, swap 11126K, highwater 1112K, headroom 1388K | CPU is a 33 MHz Intel486DX (cpuid: ax 400 dx 0) | scsi0: aha1542: port 330 irq 14 dma5 | panic: wait busy cmd=0 status=ff | | Anyone seen this one before? A search for adaptec and ataintr in my 9fans | archive didn't help much. I haven't made the fix for this yet, but can describe the problem, or at least one similar. I have a machine with an Adaptec 1542CF and no IDE. Every so often, I get a ``panic: ataintr: wait busy.'' This is due to a bogus irq 15, which is directed to the ata driver in the distributed 9pc kernel. The problem is related to that of the rogue irq 7's, which is tied to the implementation of interrupt detection on PC MB's. Basically, random noise spikes can induce a false interrupt on either irq 7 *or* irq 15, depending upon which 8259 detects the noise. + trap.c (sorry, I don't have the source code in front of me) has rogue irq detection and toss logic, but only for unregistered irqs. Since irq 15 is populated with the ata (IDE) driver, this means that rogue interrupts on irq 15 will hit the ata driver and cause a panic if there is no adapter to get status from. I think the default line printer driver goes to irq 7, but its interrupt routine simply does a wakeup, which doesn't cause any problems. I think the correct fix is to check for rogue interrupts in trap.c *before* dispatching to any registered interrupt handlers. This would involve moving the rogue interrupt logic to proceed the registration checks in trap.c. Of course, removing extraneous drivers will help, too. :-) I was waiting to post this until I could implement and test the fix, but I haven't had much spare time recently. Hopefully, I will get to this this weekend, and I'll post a tentative patch once I've tested it. BTW, kudos on both ACME and the general organization of the source code externally and internally. It is pleasant to work with such ``clean'' code. ACME allowed me to quickly understand much of the internal workings of plan9, and the sources did not obfuscate their intent. -- Dave + See MindShare, Inc's excellent book _ISA System Architecture_. ISBN: 1-881609-05-7.