Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 461e34ae authored by Masami Hiramatsu's avatar Masami Hiramatsu Committed by Rusty Russell
Browse files

module: Unlink module with RCU synchronizing instead of stop_machine



Unlink module from module list with RCU synchronizing instead
of using stop_machine(). Since module list is already protected
by rcu, we don't need stop_machine() anymore.

Signed-off-by: default avatarMasami Hiramatsu <masami.hiramatsu.pt@hitachi.com>
Signed-off-by: default avatarRusty Russell <rusty@rustcorp.com.au>
parent 4f48795b
Loading
Loading
Loading
Loading
+5 −13
Original line number Diff line number Diff line
@@ -1697,18 +1697,6 @@ static void mod_sysfs_teardown(struct module *mod)
	mod_sysfs_fini(mod);
}

/*
 * unlink the module with the whole machine is stopped with interrupts off
 * - this defends against kallsyms not taking locks
 */
static int __unlink_module(void *_mod)
{
	struct module *mod = _mod;
	list_del(&mod->list);
	module_bug_cleanup(mod);
	return 0;
}

#ifdef CONFIG_DEBUG_SET_MODULE_RONX
/*
 * LKM RO/NX protection: protect module's text/ro-data
@@ -1860,7 +1848,11 @@ static void free_module(struct module *mod)

	/* Now we can delete it from the lists */
	mutex_lock(&module_mutex);
	stop_machine(__unlink_module, mod, NULL);
	/* Unlink carefully: kallsyms could be walking list. */
	list_del_rcu(&mod->list);
	/* Wait for RCU synchronizing before releasing mod->list. */
	synchronize_rcu();
	module_bug_cleanup(mod);
	mutex_unlock(&module_mutex);

	/* This may be NULL, but that's OK */