On Sat, Feb 1, 2014 at 12:48 AM, anish singh <anish198519851985@xxxxxxxxx> wrote: > On Sat, Feb 1, 2014 at 12:32 AM, m silverstri > <michael.j.silverstri@xxxxxxxxx> wrote: > don't top-post > >> In my driver code, >> I want to set a bit in a HW Register 1. HW will send an interrupt > Yes this is how most drivers work. > >> when setting the register is done. >> I don't want my driver code to block until the interrupt is sent from the HW. > so i suppose this is what you want to do. > > > write ->register->interrupt happens->disable register ->handle interrupt > --->enable register. > Look at any driver code from linux kernel code and it mostly does this. >> Thanks. But I want my driver code to block until I get the interrupt from HW. >> >> >> On Sat, Feb 1, 2014 at 12:06 AM, anish singh >> <anish198519851985@xxxxxxxxx> wrote: >>> On Fri, Jan 31, 2014 at 11:55 PM, m silverstri >>> <michael.j.silverstri@xxxxxxxxx> 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@xxxxxxxxxxxxxxxxx >>>> http://lists.kernelnewbies.org/mailman/listinfo/kernelnewbies _______________________________________________ Kernelnewbies mailing list Kernelnewbies@xxxxxxxxxxxxxxxxx http://lists.kernelnewbies.org/mailman/listinfo/kernelnewbies