Signalling a process from a INTR_FAST handler

Scott scottl at samsco.org
Sun Feb 20 07:10:12 PST 2005


Daniel O'Connor wrote:
> On Sun, 20 Feb 2005 16:12, Peter Jeremy wrote:
> 
>>I have a hardware interrupt handler that has to forward a signal to
>>userland and that I'd like to mark INTR_FAST.  AFAIK, the normal way
>>to forward a signal is:
>>	if ((p = pfind(sc->pid_to_signal)) != NULL) {
>>		psignal(p, SIGUSR2);
>>		PROC_UNLOCK(p);
>>	}
>>
>>But pfind(9) does a PROC_LOCK() which implies it can sleep and therefore
>>can't be used by an INTR_FAST handler.
>>
>>Firstly, am I correct?  If so, is there an alternative approach I can use?
> 
> 
> I think you are, and I think the only way to do it is to schedule another 
> kernel [heavy] thread to do the wakeup.
> 

You can shift the operation off to a fast taskqueue.  This assumes that
latency between the interrupt and the signal delivery is not critical.

Scott


More information about the freebsd-hackers mailing list