> -----Original Message----- > From: kernelnewbies-bounce@xxxxxxxxxxxx > [mailto:kernelnewbies-bounce@xxxxxxxxxxxx] On Behalf Of pradeep singh > Sent: Wednesday, March 22, 2006 9:59 AM > To: kernel-issues > Subject: spinlocks and kernel timer !!! > > > Hi > > static void some_method() > { > unsigned long expires; > static struct timer_list *timer; > expires = jiffes + 20; > data = 5; > timer->expires = expires; > timer->function = my_function; > timer->data = data; > init_timer(timer); /*initalise timer*/ > spin_lock_irqsave(&spinlock, iflags); > spin_unlock_irqrestore(&spinlock, iflags); > > return 0; > } > > static int __init mod_init( void ) > { > printk(KERN_DEBUG "in init..\n"); > some_method(); > printk(KERN_DEBUG "after some method in init..\n"); > > return 0; > }; > > static void __exit mod_exit( void ) > { > printk(KERN_DEBUG "bye world...\n"); > > } > > My question is between spin_lock_irqsave() and > spin_unlock_irqrestore() code is supposed to be atomic right? > Now as i have initialised a timer structure in the > function.If the jiffies gets equal to expires in between > spinlock() and spinunlock() will my_function() execute? > > What will happen and why? You will OOPS as soon as you dereference "timer", since you did not initialize it. As for the behavior of the timer, I would expect that nothing is going to happen until after the spin_unlock_irqrestore() has been executed, since local interrupts are disabled. > > Am i missing something ? > Any pointers or links shall be appreciated. > thank you > > pradeep > > -- > play the game > > -- > Kernelnewbies: Help each other learn about the Linux kernel. > Archive: http://mail.nl.linux.org/kernelnewbies/ > FAQ: http://kernelnewbies.org/faq/ > > > -- Kernelnewbies: Help each other learn about the Linux kernel. Archive: http://mail.nl.linux.org/kernelnewbies/ FAQ: http://kernelnewbies.org/faq/