On Tue, Sep 8, 2015 at 10:19 AM, Daniel. <[email protected]> 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? > > Here is the code. > https://gist.github.com/gkos/4cce494e90518077084a#file-gpio-mcp23s08-c-L440 > > The functions are mcp23s17_read_irqsafe and mcp23s17_read_irqsafe_complete > > PS: 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 > [email protected] > http://lists.kernelnewbies.org/mailman/listinfo/kernelnewbies > >
_______________________________________________ Kernelnewbies mailing list [email protected] http://lists.kernelnewbies.org/mailman/listinfo/kernelnewbies
