while (! to_clean->timer_stopped) { set_current_state(TASK_UNINTERRUPTIBLE); schedule_timeout(1); } 
while (!to_clean->timer_stopped) schedule_timeout_uninterruptible(1); 
static void __exit cleanup_one_si(struct smi_info *to_clean){	int           rv;	unsigned long flags;	if (! to_clean)		return;	/* Tell the timer and interrupt handlers that we are shutting	   down. */	spin_lock_irqsave(&(to_clean->si_lock), flags);	spin_lock(&(to_clean->msg_lock));	to_clean->stop_operation = 1;	to_clean->irq_cleanup(to_clean);	spin_unlock(&(to_clean->msg_lock));	spin_unlock_irqrestore(&(to_clean->si_lock), flags);	/* Wait until we know that we are out of any interrupt	   handlers might have been running before we freed the	   interrupt. */	synchronize_sched();	/* Wait for the timer to stop.  This avoids problems with race	   conditions removing the timer here. */	while (! to_clean->timer_stopped) {		set_current_state(TASK_UNINTERRUPTIBLE);		schedule_timeout(1);	}	/* Interrupts and timeouts are stopped, now make sure the	   interface is in a clean state. */	while (to_clean->curr_msg || (to_clean->si_state != SI_NORMAL)) {		poll(to_clean);		set_current_state(TASK_UNINTERRUPTIBLE);		schedule_timeout(1);	}	rv = ipmi_unregister_smi(to_clean->intf);	if (rv) {		printk(KERN_ERR		       "ipmi_si: Unable to unregister device: errno=%d\n",		       rv);	}	to_clean->handlers->cleanup(to_clean->si_sm);	kfree(to_clean->si_sm);	to_clean->io_cleanup(to_clean);}
10457	/local/tlutelli/issta_data/temp/c/2005_temp/2005/10457/da4cd8dfe18ee901b880f94ca0fa79d5cc1cd0eb/ipmi_si_intf.c/clean/drivers/char/ipmi/ipmi_si_intf.c