synchronize_kernel(); 
synchronize_sched(); 
sys_init_module(void __user *umod,		unsigned long len,		const char __user *uargs){	struct module *mod;	int ret = 0;	/* Must have permission */	if (!capable(CAP_SYS_MODULE))		return -EPERM;	/* Only one module load at a time, please */	if (down_interruptible(&module_mutex) != 0)		return -EINTR;	/* Do all the hard work */	mod = load_module(umod, len, uargs);	if (IS_ERR(mod)) {		up(&module_mutex);		return PTR_ERR(mod);	}	/* Flush the instruction cache, since we've played with text */	if (mod->module_init)		flush_icache_range((unsigned long)mod->module_init,				   (unsigned long)mod->module_init				   + mod->init_size);	flush_icache_range((unsigned long)mod->module_core,			   (unsigned long)mod->module_core + mod->core_size);	/* Now sew it into the lists.  They won't access us, since           strong_try_module_get() will fail. */	stop_machine_run(__link_module, mod, NR_CPUS);	/* Drop lock so they can recurse */	up(&module_mutex);	down(&notify_mutex);	notifier_call_chain(&module_notify_list, MODULE_STATE_COMING, mod);	up(&notify_mutex);	/* Start the module */	if (mod->init != NULL)		ret = mod->init();	if (ret < 0) {		/* Init routine failed: abort.  Try to protect us from                   buggy refcounters. */		mod->state = MODULE_STATE_GOING;		synchronize_kernel();		if (mod->unsafe)			printk(KERN_ERR "%s: module is now stuck!\n",			       mod->name);		else {			module_put(mod);			down(&module_mutex);			free_module(mod);			up(&module_mutex);		}		return ret;	}	/* Now it's a first class citizen! */	down(&module_mutex);	mod->state = MODULE_STATE_LIVE;	/* Drop initial reference. */	module_put(mod);	module_free(mod, mod->module_init);	mod->module_init = NULL;	mod->init_size = 0;	mod->init_text_size = 0;	up(&module_mutex);	return 0;}
10457	/local/tlutelli/issta_data/temp/c/2005_temp/2005/10457/fbd568a3e61a7decb8a754ad952aaa5b5c82e9e5/module.c/clean/kernel/module.c