if (NULL != kenvctrld_task) { force_sig(SIGKILL, kenvctrld_task); for (;;) { struct task_struct *p; int found = 0;  read_lock(&tasklist_lock); for_each_process(p) { if (p == kenvctrld_task) { found = 1; break; } } read_unlock(&tasklist_lock);  if (!found) break;  msleep(1000); } kenvctrld_task = NULL; } 
kthread_stop(kenvctrld_task); 
static void __exit envctrl_cleanup(void){	int i;	if (NULL != kenvctrld_task) {		force_sig(SIGKILL, kenvctrld_task);		for (;;) {			struct task_struct *p;			int found = 0;			read_lock(&tasklist_lock);			for_each_process(p) {				if (p == kenvctrld_task) {					found = 1;					break;				}			}			read_unlock(&tasklist_lock);			if (!found)				break;			msleep(1000);		}		kenvctrld_task = NULL;	}	iounmap(i2c);	misc_deregister(&envctrl_dev);	for (i = 0; i < ENVCTRL_MAX_CPU * 2; i++) {		if (i2c_childlist[i].tables)			kfree(i2c_childlist[i].tables);	}}
10457	/local/tlutelli/issta_data/temp/c/2005_temp/2005/10457/218b29e0c3995ee15782de55ad1dd74cce1a728d/envctrl.c/buggy/drivers/sbus/char/envctrl.c