On Sat, Feb 1, 2014 at 11:49 PM, m silverstri <michael.j.silverstri@xxxxxxxxx> wrote: > 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? Please implement your driver or whatever you are doing and if you run into a wall then ask here as what you are asking is incoherent. _______________________________________________ Kernelnewbies mailing list Kernelnewbies@xxxxxxxxxxxxxxxxx http://lists.kernelnewbies.org/mailman/listinfo/kernelnewbies