On Mon, Mar 23, 2015 at 2:18 PM, Milton Krutt <milton@krutt.org> wrote:
Hi. It is known that no semaphore synchronization should be used inside an interrupt handler.
Anyway, I am looking at a freeBSD device driver (written by a profesionist) and there are semaphores inside an interrupt handler's subroutine.
Since I should port to linux that driver, I ask you how can I reach such synchronization under linux; I tried to use semaphores inside my handler but I got complains, and I don't want to break the law, so no semaphores for me.
Perhaps spinlocks could be the solution :).
2.6.10 please no - :), Linux kernel is now at 4.0.
Daniel.
Yes and no. The routine the int. handler's delay depends on has to make some non atomic work. So if I lock a spinlock and then I do some "lengthy" (i.e. non atomic) job, then I get a warning message like "spinlock held while being preempted" (or similar). In symbols, you suggest something like process P{ spin_lock(lock); non_atomic_function(); spin_unlock(lock); } int. handler { spin_lock(lock); do_things(); /* preferably atomically */ spin_unlock(lock); } My first attempt is still to avoid both semaphores and the above remedy, in order to delay the int. handler up to a desired point. Thanks!