From: Gregory Haskins <gregory.haskins@gmail.com>
To: "linux-kernel@vger.kernel.org" <linux-kernel@vger.kernel.org>
Subject: Tips for module_init() dependencies
Date: Thu, 15 Oct 2009 09:01:06 -0400 [thread overview]
Message-ID: <4AD71D12.9060203@gmail.com> (raw)
[-- Attachment #1: Type: text/plain, Size: 1700 bytes --]
Hi All,
General question about the best-practices for dealing with intermodule
initialization dependencies.
The problem I am seeing arises when two features are enabled as built-in
but are available also as modules.
For instance, say I have feature "foo" and "bar".
Foo may do:
---------
static int foostate;
foo()
{
/* do something with foostate */
}
EXPORT_SYMBOL_GPL(foo);
foo_init()
{
foostate = 0;
}
module_init(foo_init);
--------------
likewise, bar may do
--------------
bar_init()
{
foo();
}
module_init(bar_init);
--------------
If I build this system with
CONFIG_FOO=m
CONFIG_BAR=m
everything works, because modprobe will ensure that foo loads first
However:
CONFIG_FOO=y
CONFIG_BAR=y
may break, because the kernel seems to have no concept of
interdependency between foo_init() and bar_init(), and therefore
bar_init() may call foo() before foo_init() has executed.
There are various ways to solve this problem, such as deferring calling
foo() with a workqueue or something, but I was wondering if there was a
better/standard way to do this that I am missing?
The problem I am having specifically is that I am trying to call
configfs_register_subsystem() in a module_init(), but this breaks when
built into the kernel based on sheer bad luck that configfs gets
initialized after me. To date I have worked around this by forcing my
code to only support built-in, and using late_initcall() instead or
module_init. This works, but it only means I am putting the problem off
(code that depends on *me* has to use similar tricks, etc.
Any suggestions appreciated.
Kind Regards,
-Greg
[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 267 bytes --]
next reply other threads:[~2009-10-15 13:01 UTC|newest]
Thread overview: 10+ messages / expand[flat|nested] mbox.gz Atom feed top
2009-10-15 13:01 Gregory Haskins [this message]
2009-10-15 15:45 ` Tips for module_init() dependencies Daniel Walker
2009-10-15 15:58 ` Gregory Haskins
2009-10-15 16:06 ` Randy Dunlap
2009-10-15 16:13 ` Gregory Haskins
2009-10-15 16:18 ` Randy Dunlap
2009-10-15 16:12 ` Daniel Walker
2009-10-15 16:17 ` Gregory Haskins
2009-10-15 16:21 ` Daniel Walker
2009-10-15 16:50 ` Gregory Haskins
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=4AD71D12.9060203@gmail.com \
--to=gregory.haskins@gmail.com \
--cc=linux-kernel@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.