Path: utzoo!attcan!uunet!munnari!otc!metro!ditsyda!evans From: evans@ditsyda.oz (Bruce Evans) Newsgroups: comp.os.minix Subject: Re: Help! Minix 1.3 & PS/2 Model 80 Summary: EOI too early Message-ID: <1259@ditsyda.oz> Date: 18 Jan 89 21:32:07 GMT References: <1023@uvm-gen.UUCP> <1906@ast.cs.vu.nl> Organization: CSIRO DIT Sydney, Australia Lines: 27 In article <1907@ast.cs.vu.nl> ast@cs.vu.nl (Andy Tanenbaum) writes: >I suspect what they are trying to say is that if the EOI is issued when the >level-triggered interrupt is still asserted, you get another interrupt. That must be it! The EOI is issued in interrupt(), which is the *first* stage of interrupt handling. >[...] The floppy disk >controller must be given some sort of command to tell it to negate the >interrupt. Furthermore, every other device (clock, hard disk, network, >etc) that can generate interrupts has the same problem. The floppy task must not be getting a chance to do this, because the processor is interrupted again as soon as it finishes the low-level interrupt handling. This does not happen for edge-triggered interrupts since the device interrupt request remains asserted. So, the solution may be simply to remove all the EOI's in proc.c and put them in floppy.c. Similarly for *wini.c. The other drivers are probably OK. All except clock.c are low level and already do their own EOI's, and I think the clock interrupt turns off automatically. The EOI's never belonged in proc.c anyway, since they are machine-dependent (pc, at, ps, ...) while the rest is not. I put them elsewhere ages ago, centralized in save(). Even worse for level triggered interrupts :-{. -- Bruce Evans evans@ditsyda.oz.au D