From: Sam Ravnborg <sam@ravnborg.org>
To: George Spelvin <linux@horizon.com>
Cc: linux-kbuild@vger.kernel.org, tj@kernel.org
Subject: Re: Searching for insight into lib-y and lib-m
Date: Sun, 11 May 2014 09:31:22 +0200 [thread overview]
Message-ID: <20140511073121.GA31169@ravnborg.org> (raw)
In-Reply-To: <20140511022458.12073.qmail@ns.horizon.com>
Hi George.
> I'm working on a patch to factor out some useful helper code
> (specifically, the glob_match() function) from drivers/ata/libata-core.c
> to a separate file lib/glob.c, so other drivers can use it. But I'm
> having a hard time figuring out how to arrange for every caller to be
> able to call it.
>
> In particular, suppose that CONFIG_ATA=m. I'm trying to figure out
> what the various options I have are for handling my new option CONFIG_GLOB.
>
> Here are the four basic possibilities (all combined with "select GLOB"
> by ATA):
>
> 1) bool GLOB; obj-$(CONFIG_GLOB) += glob.o
>
> I think this will atatically link the glob.o code into the kernel if
> CONFIG_ATA=y or CONFIG_ATA=m. So everything will work, but there's no
> way for an out-of-tree driver to depend on the code if CONFIG_ATA=n.
> (Not supporting that case for now is definitely an option.)A
This is the typical way to solve this problem.
If you prepare your kernel for using a module that uses glob.c then
you pull in the required function in lib.
If out-of-tree modles has problems with this solution they
can fix this by becoming in-tree modules (via staging for example).
> 2) tristate GLOB; obj-$(CONFIG_GLOB) += glob.o
>
> In this case, if CONFIG_ATA=m, I'll create a separate module glob.ko.
> I'd need to include <linux/module.h> and add the appropriate module
> declarations to glob.c. Lots of code in lib/ seems to do this, but a
> proliferation if microscopic modules is annoying
This is overkill for glob.c
> 3) bool GLOB; lib-$(CONFIG_GLOB) += glob.o
>
> This is where I get confused. Documentation/kbuild/makefiles.txt says
> that glob.o will be included in the library lib.a.
>
> But it then doesn't say anything about what (if anything) is linked
> against lib.a. I assume (although it's not actually stated) that vmlinux
> is linked against it, so the linker will import any called functions.
This feature is made to support generic implmentations where the
architecture can provide there own implmentation.
This is not for drivers to use - becasue this prevents modles from being
loaded as you also conclude.
> 4) tristate GLOB; lib-$(CONFIG_GLOB) += glob.o
>
> Documentation/kbuild/makefiles.txt suggests that CONFIG_GLOB=m would
> be synonymous with CONFIG_GLOB=y in this case, so the net effect would
> be identical to case 3. Am I right?
Right
> The follow-on question is how to integrate the self-test code. I had defined
> a preprocessor symbol which allowed a standalone "gcc -DUNITTEST glob.c" to
> make a user-space test driver, but I've been asked to kernelize it. If using
> the full module route, I can just use __init code for it, like lib/list_sort.c.
> But for other options, its less clear.
Take a look at tools/testing/selftest - this should be the best "kernel" way to do this.
Sam
prev parent reply other threads:[~2014-05-11 7:31 UTC|newest]
Thread overview: 10+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-05-11 2:24 Searching for insight into lib-y and lib-m George Spelvin
2014-05-11 4:28 ` Randy Dunlap
2014-05-11 5:02 ` [PATCH] Documentation/kbuild/makefiles.txt: Improve description of lib-* targets George Spelvin
2014-05-14 21:21 ` Randy Dunlap
2014-05-16 10:14 ` Sam Ravnborg
2014-05-16 10:32 ` George Spelvin
2014-06-10 12:47 ` Michal Marek
2014-06-08 4:35 ` George Spelvin
2014-05-11 12:34 ` Searching for insight into lib-y and lib-m Tejun Heo
2014-05-11 7:31 ` Sam Ravnborg [this message]
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=20140511073121.GA31169@ravnborg.org \
--to=sam@ravnborg.org \
--cc=linux-kbuild@vger.kernel.org \
--cc=linux@horizon.com \
--cc=tj@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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox