if (smi_info->stop_operation) { smi_info->timer_stopped = 1; 
if (atomic_read(&smi_info->stop_operation)) 
static void smi_timeout(unsigned long data){	struct smi_info   *smi_info = (struct smi_info *) data;	enum si_sm_result smi_result;	unsigned long     flags;	unsigned long     jiffies_now;	long              time_diff;#ifdef DEBUG_TIMING	struct timeval    t;#endif	if (smi_info->stop_operation) {		smi_info->timer_stopped = 1;		return;	}	spin_lock_irqsave(&(smi_info->si_lock), flags);#ifdef DEBUG_TIMING	do_gettimeofday(&t);	printk("**Timer: %d.%9.9d\n", t.tv_sec, t.tv_usec);#endif	jiffies_now = jiffies;	time_diff = (((long)jiffies_now - (long)smi_info->last_timeout_jiffies)		     * SI_USEC_PER_JIFFY);	smi_result = smi_event_handler(smi_info, time_diff);	spin_unlock_irqrestore(&(smi_info->si_lock), flags);	smi_info->last_timeout_jiffies = jiffies_now;	if ((smi_info->irq) && (! smi_info->interrupt_disabled)) {		/* Running with interrupts, only do long timeouts. */		smi_info->si_timer.expires = jiffies + SI_TIMEOUT_JIFFIES;		spin_lock_irqsave(&smi_info->count_lock, flags);		smi_info->long_timeouts++;		spin_unlock_irqrestore(&smi_info->count_lock, flags);		goto do_add_timer;	}	/* If the state machine asks for a short delay, then shorten           the timer timeout. */	if (smi_result == SI_SM_CALL_WITH_DELAY) {#if defined(CONFIG_HIGH_RES_TIMERS)		unsigned long seq;#endif		spin_lock_irqsave(&smi_info->count_lock, flags);		smi_info->short_timeouts++;		spin_unlock_irqrestore(&smi_info->count_lock, flags);#if defined(CONFIG_HIGH_RES_TIMERS)		do {			seq = read_seqbegin_irqsave(&xtime_lock, flags);			smi_info->si_timer.expires = jiffies;			smi_info->si_timer.arch_cycle_expires				= get_arch_cycles(smi_info->si_timer.expires);		} while (read_seqretry_irqrestore(&xtime_lock, seq, flags));		add_usec_to_timer(&smi_info->si_timer, SI_SHORT_TIMEOUT_USEC);#else		smi_info->si_timer.expires = jiffies + 1;#endif	} else {		spin_lock_irqsave(&smi_info->count_lock, flags);		smi_info->long_timeouts++;		spin_unlock_irqrestore(&smi_info->count_lock, flags);		smi_info->si_timer.expires = jiffies + SI_TIMEOUT_JIFFIES;#if defined(CONFIG_HIGH_RES_TIMERS)		smi_info->si_timer.arch_cycle_expires = 0;#endif	} do_add_timer:	add_timer(&(smi_info->si_timer));}
10457	/local/tlutelli/issta_data/temp/c/2005_temp/2005/10457/a9a2c44ff0a1350f8bfe3a162ecf71b1c9ce5cc2/ipmi_si_intf.c/buggy/drivers/char/ipmi/ipmi_si_intf.c