On Sat, Feb 1, 2014 at 5:34 AM, Josh Cartwright <joshc@xxxxxxxxxxxx> wrote: > On Sat, Feb 01, 2014 at 01:32:49AM -0800, anish singh wrote: >> On Sat, Feb 1, 2014 at 1:15 AM, m silverstri >> <michael.j.silverstri@xxxxxxxxx> wrote: >> > By driver code , I mean the code which set the register values and >> > wait till the values is set (via an interrupt handler) before >> > continues doing something else >> ok so you are looking for below code: >> >> >> some_func() >> { >> set_register_value >> x_variable=0 >> wait_for_event*(x_variable); >> } >> >> interrupt_handler(){ >> x_variable=1 >> wake_up(); >> } >> >> request_irq(interrupt_handler); > > Please investigate the usage of completions in your driver. See > include/linux/completion.h. It sounds like it fits your usecase nicely. > > Josh I have loooked at linux completion for my usecase So I think I can do DECLARE_COMPLETION(my_completion); some_func() { set_register_value wait_for_completion(my_completion); } interrupt_handler(){ complete(my_completion); } request_irq(interrupt_handler); My question now is what if 1 kernel thread execute some_funct(), but before interrupt_handler() get invoked (from HW), another kernel thread executes some_func(). In essence, set_register_value is execute twice before interrupt_handler() return once. how can I prevent another kernel thread from executing "set_register_value()" when 1 is wait_for_completion? _______________________________________________ Kernelnewbies mailing list Kernelnewbies@xxxxxxxxxxxxxxxxx http://lists.kernelnewbies.org/mailman/listinfo/kernelnewbies