On Sat, Feb 1, 2014 at 11:49 PM, m silverstri <michael.j.silverstri@gmail.com> wrote:
On Sat, Feb 1, 2014 at 5:34 AM, Josh Cartwright <joshc@eso.teric.us> 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@gmail.com> 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.