spin_lock_irq(&base->lock); goto repeat; 
spin_lock_irq(&base->t_base.lock); 
static inline void __run_timers(tvec_base_t *base){	struct timer_list *timer;	spin_lock_irq(&base->lock);	while (time_after_eq(jiffies, base->timer_jiffies)) {		struct list_head work_list = LIST_HEAD_INIT(work_list);		struct list_head *head = &work_list; 		int index = base->timer_jiffies & TVR_MASK; 		/*		 * Cascade timers:		 */		if (!index &&			(!cascade(base, &base->tv2, INDEX(0))) &&				(!cascade(base, &base->tv3, INDEX(1))) &&					!cascade(base, &base->tv4, INDEX(2)))			cascade(base, &base->tv5, INDEX(3));		++base->timer_jiffies; 		list_splice_init(base->tv1.vec + index, &work_list);repeat:		if (!list_empty(head)) {			void (*fn)(unsigned long);			unsigned long data;			timer = list_entry(head->next,struct timer_list,entry); 			fn = timer->function; 			data = timer->data;			list_del(&timer->entry);			set_running_timer(base, timer);			smp_wmb();			timer->base = NULL;			spin_unlock_irq(&base->lock);			{				u32 preempt_count = preempt_count();				fn(data);				if (preempt_count != preempt_count()) {					printk("huh, entered %p with %08x, exited with %08x?\n", fn, preempt_count, preempt_count());					BUG();				}			}			spin_lock_irq(&base->lock);			goto repeat;		}	}	set_running_timer(base, NULL);	spin_unlock_irq(&base->lock);}
10457	/local/tlutelli/issta_data/temp/c/2005_temp/2005/10457/55c888d6d09a0df236adfaf8ccf06ff5d0646775/timer.c/buggy/kernel/timer.c