Re: [PATCH] iio: st_sensors: request any context IRQ

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On 15/11/15 16:22, Linus Walleij wrote:
> Yeah. Somebody connected an ST accelerometer to an IRQ
> line that sits on and I2C expander in my design, meaning it needs
> to have a threaded interrupt handler, as it needs to talk I2C
> to handle the IRQ.
> 
> So somehow I need to handle any context of IRQs on the
> ST MEMS drivers.
Sure, clearly need some way around it and I've known it would come
up at some point for a while!

> 
>> > This then calls generic_handle_irq for each of devices hanging
>> > off the trigger and ultimately desc->handle_irq and on
>> > to handle_simple_irq (fun this isn't it ;) This calls onto
>> > handle_irq_event and after a few more jumps ends up at
>> > handle_irq_event_percpu in kernel/irq/handle.c

> I start to get the feeling tglx should review how IIO triggers handle
> IRQs... maybe he already has. 

Thomas did help us work it out via discussions about the design
back in 2011 when we moved to threaded interrupts.

Google fed me:
http://marc.info/?l=linux-kernel&m=129917247506111&w=2
which lines up with my local email threads from the time.

I'm having fun actually tracking down the archive for the email
threads related to the patches themselves.  The series is this one
http://www.spinics.net/lists/linux-iio/msg01563.html

(though there was definitely a v3 as the patch is:
d96d1337e339521a2bd56dc9d51fef140c1a49ee 
staging:iio: Add infrastructure for irq_chip based triggers

but I seem to have lost it locally (probably sat on some dead
PC in my old lab somewhere).

I remember a lot of this stuff came after a very detailed review
Arnd Bergman did which led to tidying up of how we did this and
other aspects of the subsystem (was very very helpful at that stage
as other reviews were all from guys working in IIO and not many of
us were very experienced!).

Not sure anything has fundamentally changed since then.
If tglx has time to take another look it would certainly be
welcome!  Any input on this particular problem also welcome.
(cc'd - Thomas, discussion is about the handling of interrupts
for IIO triggers where we split a single, typically real,
interrupt and feed it to any devices that are registered to
receive it - code is in
drivers/industrialio/industrialio-triggers.c.  Complexity
is that any trigger can be used by any device - including
stuff like timestamping, or capture pin wiggling which tends
to be in traditional irq top half.  In this case Linus
has an interrupt that is on a chip on an i2c bus so can't
drive that stuff...)

To all intents and purposes the IIO triggers are irq chips
so everything gets set up exactly the same way as if they were
hardware irqs.  Its very similar to what a lot of mfd devices
do though we effectively spread the interrupt out rather than
working out which device to send it to (as it needs to go to
all of them).

The nasty hoops are only jumped through when we
generate triggers in software (e.g. the sysfs trigger).  Fixing
it for your case would also allow us to hopefully drop some of
that complexity as well. 

>This brings into the question how
> that special trigger IRQ thread is created (haven't looked into
> that).
> 
The st sensors trigger never had a threaded part anyway so
I'm not sure why it was requesting it via the threaded_irq request.
That falls back to standard irq if no thread is provided though.

Jonathan
--
To unsubscribe from this list: send the line "unsubscribe linux-iio" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html



[Index of Archives]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux Input]     [Linux Kernel]     [Linux SCSI]     [X.org]

  Powered by Linux