From: Andrew Morton <akpm@osdl.org>
To: James Bottomley <James.Bottomley@steeleye.com>
Cc: linux-kernel@vger.kernel.org, rusty@rustcorp.com.au
Subject: Re: lib.a causing modules not to load
Date: Fri, 7 Nov 2003 20:34:19 -0800 [thread overview]
Message-ID: <20031107203419.7d0de676.akpm@osdl.org> (raw)
In-Reply-To: <1068222065.1894.21.camel@mulgrave>
James Bottomley <James.Bottomley@steeleye.com> wrote:
>
> I think this has been mentioned before, but I just ran across it again
> recently. The problem is that if the only reference to a routine in
> lib.a is in a module, then it never gets compiled into the kernel, and
> the module won't load.
>
> In 2.6.0-test9 this is shown by compiling both ext2 and ext3 as
> modules. Since they're the only things to refer to percpu_counter_mod
> which is in lib.a in an SMP system.
How about we just link that function into the kernel and be done with it?
We'll waste a few bytes on SMP machines which have neither ext2 nor ext3
linked-in or loaded as modules, but that doesn't sound very important...
(We don't have a kernel/random-support-stuff.c, but we have
mm/random-support-stuff.c which for some reason is called mm/swap.c, so
I put it there).
diff -puN -L lib/percpu_counter.c lib/percpu_counter.c~percpu-counter-linkage-fix /dev/null
--- 25/lib/percpu_counter.c
+++ /dev/null 2002-08-30 16:31:37.000000000 -0700
@@ -1,21 +0,0 @@
-#include <linux/module.h>
-#include <linux/percpu_counter.h>
-#include <linux/sched.h>
-
-void percpu_counter_mod(struct percpu_counter *fbc, long amount)
-{
- int cpu = get_cpu();
- long count = fbc->counters[cpu].count;
-
- count += amount;
- if (count >= FBC_BATCH || count <= -FBC_BATCH) {
- spin_lock(&fbc->lock);
- fbc->count += count;
- spin_unlock(&fbc->lock);
- count = 0;
- }
- fbc->counters[cpu].count = count;
- put_cpu();
-}
-
-EXPORT_SYMBOL(percpu_counter_mod);
diff -puN lib/Makefile~percpu-counter-linkage-fix lib/Makefile
--- 25/lib/Makefile~percpu-counter-linkage-fix 2003-11-07 20:26:09.000000000 -0800
+++ 25-akpm/lib/Makefile 2003-11-07 20:26:24.000000000 -0800
@@ -9,7 +9,6 @@ lib-y := errno.o ctype.o string.o vsprin
lib-$(CONFIG_RWSEM_GENERIC_SPINLOCK) += rwsem-spinlock.o
lib-$(CONFIG_RWSEM_XCHGADD_ALGORITHM) += rwsem.o
-lib-$(CONFIG_SMP) += percpu_counter.o
ifneq ($(CONFIG_HAVE_DEC_LOCK),y)
lib-y += dec_and_lock.o
diff -puN mm/swap.c~percpu-counter-linkage-fix mm/swap.c
--- 25/mm/swap.c~percpu-counter-linkage-fix 2003-11-07 20:26:09.000000000 -0800
+++ 25-akpm/mm/swap.c 2003-11-07 20:28:10.000000000 -0800
@@ -14,6 +14,7 @@
*/
#include <linux/mm.h>
+#include <linux/sched.h>
#include <linux/kernel_stat.h>
#include <linux/swap.h>
#include <linux/mman.h>
@@ -23,6 +24,8 @@
#include <linux/module.h>
#include <linux/mm_inline.h>
#include <linux/buffer_head.h> /* for try_to_release_page() */
+#include <linux/module.h>
+#include <linux/percpu_counter.h>
#include <linux/percpu.h>
/* How many pages do we try to swap or page in/out together? */
@@ -380,6 +383,24 @@ void vm_acct_memory(long pages)
EXPORT_SYMBOL(vm_acct_memory);
#endif
+#ifdef CONFIG_SMP
+void percpu_counter_mod(struct percpu_counter *fbc, long amount)
+{
+ int cpu = get_cpu();
+ long count = fbc->counters[cpu].count;
+
+ count += amount;
+ if (count >= FBC_BATCH || count <= -FBC_BATCH) {
+ spin_lock(&fbc->lock);
+ fbc->count += count;
+ spin_unlock(&fbc->lock);
+ count = 0;
+ }
+ fbc->counters[cpu].count = count;
+ put_cpu();
+}
+EXPORT_SYMBOL(percpu_counter_mod);
+#endif
/*
* Perform any setup for the swap system
_
next prev parent reply other threads:[~2003-11-08 4:30 UTC|newest]
Thread overview: 8+ messages / expand[flat|nested] mbox.gz Atom feed top
2003-11-07 16:21 James Bottomley
2003-11-07 16:27 ` James Bottomley
2003-11-08 4:34 ` Andrew Morton [this message]
2003-11-08 8:51 ` Christoph Hellwig
2003-11-08 15:16 ` James Bottomley
2003-11-17 2:47 ` Rusty Russell
2003-11-18 16:25 ` James Bottomley
2003-11-19 0:06 ` Rusty Russell
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=20031107203419.7d0de676.akpm@osdl.org \
--to=akpm@osdl.org \
--cc=James.Bottomley@steeleye.com \
--cc=linux-kernel@vger.kernel.org \
--cc=rusty@rustcorp.com.au \
/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
all inboxes | Powered by JetHome®