Subject: Re: System hangs after BIOSCALL
To: Brian Clough <Brian_Clough@phoenix.com>
From: Frank van der Linden <fvdl@wasabisystems.com>
List: port-i386
Date: 10/18/2001 16:21:39
On Wed, Oct 17, 2001 at 05:31:40PM -0400, Brian Clough wrote:
> Okay, here's where I am right now.  When I return from bioscall, after doing a
> VESA function 02, the timer interrupt pending bit is set on port 20.  That means
> the once execution hits the halt, in the CPU idle loop it can never proceed
> because the hardware is waiting for an interrupt service to complete, and clear
> that bit, before it can accept another timer tick.

What you can try to do is the following:

#include <machine/intr.h>
...
int s;

s = splhigh();
bioscall(foo);

for all bits in the IRR at both 0x20 and 0xa0
	if (bit for IRQ N set)
		softintr(N)

splx(s);

This sets up the pending interrupts (registers them in the 'ipending' variable
through softintr()), so that they are noticed and handled when calling splx.

If this works for you, it's probably a good idea to add it to bioscall
itself, since it will make it a bit friendlier with regard to interrupts.

- Frank

-- 
Frank van der Linden                           fvdl@wasabisystems.com
======================================================================
Quality NetBSD CDs, Support & Service.   http://www.wasabisystems.com/