Question about using spinlock to synchronize between kernel driver and an interrupt handler

m silverstri michael.j.silverstri at gmail.com
Sat Feb 1 03:32:58 EST 2014


In my driver code,
I want to set a bit in a  HW Register 1. HW will send an interrupt
when setting the register is done.
I don't want my driver code to block until the interrupt is sent from the HW.



On Sat, Feb 1, 2014 at 12:06 AM, anish singh
<anish198519851985 at gmail.com> wrote:
> On Fri, Jan 31, 2014 at 11:55 PM, m silverstri
> <michael.j.silverstri at gmail.com> wrote:
>> Hi,
>>
>> I read this article http://www.linuxjournal.com/article/5833 to learn
>> about spinlock. I try this to use it in my kernel driver.
>>
>> Here is what my driver code needs to do:
>> In f1(), it will get the spin lock, and caller can call f2() will wait
>> for the lock since the spin lock is not being unlock. The spin lock
>> will be unlock in my interrupt handler (triggered by the HW).
> Wrong design!!!
>>
>> void f1() {
>> spin_lock(&mylock);
>> // write hardware
>> REG_ADDR += FLAG_A;
> So here you take spinlock and release in interrupt handler.What
> if there is no interrupt handler and someone calls this fucntion
> he will blocked forever.
>>
>> }
>>
>> void f2() {
>> spin_lock(&mylock);
>> //...
>> }
>>
>> The hardware will send the application an interrupt and my interrupt
>> handler will call spin_unlock(&mylock);
>>
>> My question is if I call
>> f1()
>> f2() // i want this to block until the interrupt return saying settingyou
>> REG_ADDR is done.
>>
>> when I run this, I get an exception in kernel saying a deadlock "
>> INFO: possible recursive locking detected"
>>
>> How  can I re-write my code so that kernel does not think I have a deadlock?
>>
>> I want my driver code to wait until HW sends me an interrupt saying
>> setting REG_ADDR is done.
> Let us know what is your requirement?I am sure there must be a simple
> way to handle than this magic done here.
> Explain what are you trying to do in detail and I am sure lot of
> people will jump
> to help.
>>
>> Thank you.
>>
>> _______________________________________________
>> Kernelnewbies mailing list
>> Kernelnewbies at kernelnewbies.org
>> http://lists.kernelnewbies.org/mailman/listinfo/kernelnewbies



More information about the Kernelnewbies mailing list