Subject: Re: port-xen/29999: ctrl_if_interrupt IPL problem
To: None <gnats-bugs@NetBSD.org>
From: Manuel Bouyer <bouyer@antioche.eu.org>
List: netbsd-bugs
Date: 04/18/2005 19:59:59
Hi,

On Sun, Apr 17, 2005 at 11:25:00PM +0000, yamt@mwd.biglobe.ne.jp wrote:
> Architecture: i386
> Machine: i386
> >Description:
> 	ctrl_if_interrupt uses wakeup(9) and softintr_schedule(9) from
> 	interrupt context with too high IPL.

We could move __ctrl_if_tx_tasklet() to run from the softintr. This would
fix the wakeup issue.
For softintr_schedule(), we could probably use IPL_SOFTXENEVT instead of
IPL_SOFTNET, and call ctrl_if_softintr_handler() from the assemby code
instead. This should take care of the issue.

> >How-To-Repeat:
> 	code inspection.
> >Fix:
> 	the easiest fix is, lower IPL_CTRL to IPL_SCHED (or even lower).
> 	i'm not sure why IPL_CTRL is that high at the first place.

IPL_CTRL needs to be very high because the console I/O is done though
control messages on guest domains, and there's no way to poll for keyboard
input. So, to get ddb working in guest domains, we need to have control
events enabled while in ddb.
I guess we could also be busy-looping waiting for the event, but it
would not be nice to other guests domains.
xen/xencons.c also has issues with interrupts level because of this,
I plan to fix this soon.

-- 
Manuel Bouyer <bouyer@antioche.eu.org>
     NetBSD: 26 ans d'experience feront toujours la difference
--