INTR_FILTER?

Rui Paulo rpaulo at freebsd.org
Thu Jan 29 14:30:34 PST 2009


On 29 Jan 2009, at 17:51, Andriy Gapon wrote:

> on 29/01/2009 19:17 Rui Paulo said the following:
>>
>> On 29 Jan 2009, at 11:47, Andriy Gapon wrote:
>>
>>> INTR_FILTER - what does it do?
>>> It doesn't seem to be documented anywhere, but seems to affect  
>>> interrupt
>>> code.
>>
>> INTR_FILTER allows you to skip the FILTER+ITHREAD headache.
>
> Could you please explain a little bit what is this headache?

Basically, you use filter + ithread (intr_filter) when you want to do  
more than basic things in your interrupt handler routine. For example,  
allocating memory must be done in a ithread, it can't be done on the  
interrupt routine.

> I thought, similarly to what Ed said, that in filter one could quickly
> check for a stray interrupt (or shared interrupt from other device)  
> and
> in ithread one could perform meaningful work.

That's right. But INTR_FILTER does all the filter + ithread setup for  
you via FILTER_SCHEDULE_THREAD.

> But I also had some doubts about what is legal and what is illegal in
> ithread. E.g. could I take a non-spin mutex or wait on a condvar? I
> guess not - because in the case of shared interrupts the same  
> ithread is
> used to handle everything.
>
>> See dev/asmc/asmc.c for an example.
>
> Thank you, the example is enlightening. But also one has to look into
> how "the framework" works (or just know it) to understand why things  
> are
> done this way but not the other. E.g. why you have to use a  
> taskqueue in
> non-INTR_FILTER case.

I needed a taskqueue because devctl_notify() calls malloc and you  
can't call malloc (which holds some type of lock, I can't remember)  
from an interrupt context (asmc_sms_intrfast())


> BTW, INTR_FILTER seems quite useful. Why, then, it is not the default?

The drivers would have to be ported to INTR_FILTER. Right now, only  
asmc is using INTR_FILTER, so I don't think there is much gain in  
making it the default.

--
Rui Paulo



More information about the freebsd-hackers mailing list