while (!atomic_read(&smi_info->stop_operation)) { schedule_timeout(last); 
while (!kthread_should_stop()) { 
static int ipmi_thread(void *data){	struct smi_info *smi_info = data;	unsigned long flags, last=1;	enum si_sm_result smi_result;	daemonize("kipmi%d", smi_info->intf_num);	allow_signal(SIGKILL);	set_user_nice(current, 19);	while (!atomic_read(&smi_info->stop_operation)) {		schedule_timeout(last);		spin_lock_irqsave(&(smi_info->si_lock), flags);		smi_result=smi_event_handler(smi_info, 0);		spin_unlock_irqrestore(&(smi_info->si_lock), flags);		if (smi_result == SI_SM_CALL_WITHOUT_DELAY)			last = 0;		else if (smi_result == SI_SM_CALL_WITH_DELAY) {			udelay(1);			last = 0;		}		else {			/* System is idle; go to sleep */			last = 1;			current->state = TASK_INTERRUPTIBLE;		}	}	smi_info->thread_pid = 0;	complete_and_exit(&(smi_info->exiting), 0);	return 0;}
4520	/local/tlutelli/issta_data/temp/c/2005_temp/2005/4520/e9a705a0a0ed99833cfef40d509f63a052638f00/ipmi_si_intf.c/clean/drivers/char/ipmi/ipmi_si_intf.c