while (atomic_read(&set_timeout_tofree)) { set_current_state(TASK_UNINTERRUPTIBLE); schedule_timeout(1); } 
while (atomic_read(&set_timeout_tofree)) schedule_timeout_uninterruptible(1); 
static __exit void ipmi_unregister_watchdog(void){	int rv;	down_write(&register_sem);#ifdef HAVE_NMI_HANDLER	if (preaction_val == WDOG_PRETIMEOUT_NMI)		release_nmi(&ipmi_nmi_handler);#endif	notifier_chain_unregister(&panic_notifier_list, &wdog_panic_notifier);	unregister_reboot_notifier(&wdog_reboot_notifier);	if (! watchdog_user)		goto out;	/* Make sure no one can call us any more. */	misc_deregister(&ipmi_wdog_miscdev);	/* Wait to make sure the message makes it out.  The lower layer has	   pointers to our buffers, we want to make sure they are done before	   we release our memory. */	while (atomic_read(&set_timeout_tofree)) {		set_current_state(TASK_UNINTERRUPTIBLE);		schedule_timeout(1);	}	/* Disconnect from IPMI. */	rv = ipmi_destroy_user(watchdog_user);	if (rv) {		printk(KERN_WARNING PFX "error unlinking from IPMI: %d\n",		       rv);	}	watchdog_user = NULL; out:	up_write(&register_sem);}
10457	/local/tlutelli/issta_data/temp/c/2005_temp/2005/10457/da4cd8dfe18ee901b880f94ca0fa79d5cc1cd0eb/ipmi_watchdog.c/buggy/drivers/char/ipmi/ipmi_watchdog.c