On Tue, Sep 8, 2015 at 10:19 AM, Daniel. <danielhilst@xxxxxxxxx> wrote:
Hi all,I'm dealing with a SPI driver and I have a doubt. I need to read and write data to spi (registers and values) inside interrupt handler. I want to know if this pattern is safe or if I'll face problems with it.
AFAIK the spi calls sleep, so it is not safe.
This code is being added to gpio-mcp23s08.c driver to handle IRQ and save INTCAP at interruption time. INTCAP register keeps the input port status at interruption time. I want to capture this as fast as possible and put it at a circular queue. I write this code inspired by spi_sync function, but using spinlocks so it doesn't sleeps. But, these spin_(un)lock calls seems a bad ideia to me. Any better idea or guidelines?The functions are mcp23s17_read_irqsafe and mcp23s17_read_irqsafe_completePS: The code is a little messed up (because I've been trying to optimize this INTCAP capturing by many means)
What exactly you are trying to optimize you have not mentioned. I looked at the driver code
you pointed out in your mail and looks like they are using threaded irq and I am sure that you
understand that threaded irq can perform sleeping operations as it is basically a kthread.
http://lxr.free-electrons.com/source/drivers/gpio/gpio-mcp23s08.c#L494 so you can easily use
spinlock here. It is not interrupt context.
Generally if you are trying to optimize something in linux kernel you should be very clear about your goal.
Cheers- dhs
--"Do or do not. There is no try"
Yoda Master
_______________________________________________
Kernelnewbies mailing list
Kernelnewbies@xxxxxxxxxxxxxxxxx
http://lists.kernelnewbies.org/mailman/listinfo/kernelnewbies
_______________________________________________ Kernelnewbies mailing list Kernelnewbies@xxxxxxxxxxxxxxxxx http://lists.kernelnewbies.org/mailman/listinfo/kernelnewbies