On Fri, Oct 18, 2013 at 5:26 AM, Mushtaq Khan <mushtaqkhan921@xxxxxxxxx> wrote: > Hi, > > In kernel driver, using Semaphore to block on resources (Descriptors and > memory). > Semaphore is initialized in locking state using call "init_MTEX_LOCKED()", > when resources are not available process calls down_interruptible() and > blocks. Once resources are freed up() is called, and blocked process is > unblocked. up() is called from interrupt context which frees resources on > receiving ACK-Interrupt. > Following is the code snippet for blocking: > do { > ret = down_interruptible(sem) > if (ret == 0) { > break; > } else { > printk("Semaphore is not acquired try again\n"); > continue; > } > } while (1); > > While loop is used to make sure down_interrptible() is called until process > acquires the semaphore. If process receives signal, process unblocks from > down_interrptible() without acquiring the semaphore. > Issue am seeing is once signal is received under the blocking state, again > trying to acquire semaphore using down_interruptible() return value is > always non-zero and process is looping in while loop. Please post your full code here. > > Can someone explain this behavior, I wrote the code with expectation that > after signal is received again trying to acquire lock will either block the > process or process will get semaphore. > Please help me on this. > > Thanks, > Mushtaq Khan > > _______________________________________________ > Kernelnewbies mailing list > Kernelnewbies@xxxxxxxxxxxxxxxxx > http://lists.kernelnewbies.org/mailman/listinfo/kernelnewbies > _______________________________________________ Kernelnewbies mailing list Kernelnewbies@xxxxxxxxxxxxxxxxx http://lists.kernelnewbies.org/mailman/listinfo/kernelnewbies