All of lore.kernel.org
 help / color / mirror / Atom feed
* Re: [PATCH] ipt_REJECT shouldn't send replies for wrong udp csum
From: David S. Miller @ 2003-01-10  8:52 UTC (permalink / raw)
  To: laforge; +Cc: netfilter-devel
In-Reply-To: <20030109144641.GI9467@sunbeam.de.gnumonks.org>

   From: Harald Welte <laforge@gnumonks.org>
   Date: Thu, 9 Jan 2003 15:46:41 +0100

   Author: Patrick McHardy <kaber@trash.net>
   ipt_REJECT sends unreachables in response to UDP packets with invalid
   checksums, thereby exposing the existance of a firewall  (as described
   in phrack #60, "broken crc firewall spotting" (or something like this),
   www.phrack.com).  The patch makes ipt_REJECT verify UDP checksums if
   set.                         
   
Applied, thanks.

^ permalink raw reply

* Re: ISO-9660 Rock Ridge gives different links different inums
From: Denis Vlasenko @ 2003-01-10  8:54 UTC (permalink / raw)
  To: Peter Chubb; +Cc: Peter Chubb, Andrew McGregor, eric, linux-kernel
In-Reply-To: <15902.35492.536040.298566@wombat.chubb.wattle.id.au>

On 10 January 2003 10:56, Peter Chubb wrote:
> >>>>> "Denis" == Denis Vlasenko <vda@port.imtp.ilyichevsk.odessa.ua>
> >>>>> writes:
>
> Denis> On 10 January 2003 05:34, Peter Chubb wrote:
> >> Preferably, all the inumbers for the same file would point to the
> >> same directory entry; but I can see no easy way to do that.
> >> Keeping an in-memory table for files with multiple links might be
> >> the best way, as there aren't that many on a typical filesystem.
>
> Denis> And what will happen on a non-typical filesystem with 1
> million Denis> hardlinks?
>
> Denis> The root of the problem is a fundamental layering violation in
> Denis> traditional Unix filesystems: inode numbers should NOT be
> Denis> visible to userspace. Userspace just needs a way to tell
> Denis> hardlinks from separate files, that's all. Exposing inumbers
> Denis> does that, but creates tons of problems for filesystems which
> Denis> do NOT have such a concept.
>
> The problem is that in Unix the fundamental identity of a file is
> the tuple (blkdev, inum); names are merely indices (links) that
> resolve to that tuple.

You are right. It is designed this way. This design is wrong.

> Personally, I'd swap to a pair of system
> calls to map name to (blkdev, inum), and open(blkdev, inum).  Think
> of the inode number as a unique within-filesystem index.

This does not fix the design.
--
vda

^ permalink raw reply

* Re: [PATCH] ipt_REJECT shouldn't send replies for wrong udp csum
From: David S. Miller @ 2003-01-10  8:55 UTC (permalink / raw)
  To: laforge; +Cc: netfilter-devel
In-Reply-To: <20030109144750.GJ9467@sunbeam.de.gnumonks.org>

   From: Harald Welte <laforge@gnumonks.org>
   Date: Thu, 9 Jan 2003 15:47:50 +0100

   Please apply to 2.4.x and 2.5.x, thanks.
   
   Author: Jozsef Kadlecsik <kadlec@blackhole.kfki.hu>
   As 2.4.20 came out with newnat included, there were several reports on
   excessive logging of reused FTP expectations.

Applied, but watch those subject lines :-)

^ permalink raw reply

* Some 2.5.55 compile problems
From: Joshua M. Kwan @ 2003-01-10  9:01 UTC (permalink / raw)
  To: davem; +Cc: linux-kernel

[-- Attachment #1: Type: text/plain, Size: 727 bytes --]

Hi Dave: (hope i'm addressing this issue to the right person!)

When making bzImage with the current BK I receive the following during 
the final link process:

net/built-in.o(.text+0x4ba22): In function `xfrm_probe_algs':
: undefined reference to `crypto_alg_available'
net/built-in.o(.text+0x4ba68): In function `xfrm_probe_algs':
: undefined reference to `crypto_alg_available'

this is because ipv4 seems to depend on some Cryptographic API stuff... 
that doesn't sound right though! Anyway, I added base Cryptographic API
support to shut it up, and the link went fine.

But this was definitely not added until recently - I was able to  
compile all 2.5.54 BK cleanly. What's the deal now?

Regards
Josh

[-- Attachment #2: Type: application/pgp-signature, Size: 189 bytes --]

^ permalink raw reply

* Re: [PATCH] ECN target wrong tcp csum on little endian
From: David S. Miller @ 2003-01-10  8:57 UTC (permalink / raw)
  To: laforge; +Cc: netfilter-devel
In-Reply-To: <20030109145046.GK9467@sunbeam.de.gnumonks.org>

   From: Harald Welte <laforge@gnumonks.org>
   Date: Thu, 9 Jan 2003 15:50:46 +0100

   Author: Patrick McHardy <kaber@trash.net>
   
   The 2.4.20 kernel included the new iptables 'ECN' target, enabling a selective
   ECN disable mechanism.   Unfortunately there was a bug in the incremental TCP
   checksum update, resulting in broken TCP checksums on little endian machines.
   This patch fixes the Bug.
   
Applied, thanks.

^ permalink raw reply

* Re: 2.4.20 stability issues
From: Russell Coker @ 2003-01-10  8:57 UTC (permalink / raw)
  To: Brian May, selinux
In-Reply-To: <20030110002718.GA922@snoopy.apana.org.au>

On Fri, 10 Jan 2003 01:27, Brian May wrote:
> It only happens after an uptime of several hours (if not days; it
> also depends if you count time in suspend mode or not), on my laptop
> computer.

rjc@lyta:/tmp$ uname -a
Linux lyta 2.4.20-se-r #1 Mon Dec 16 19:48:46 CET 2002 i686 unknown unknown 
GNU/Linux
rjc@lyta:/tmp$ uptime
 09:52:14 up 4 days,  9:11,  1 user,  load average: 0.88, 1.33, 0.90
rjc@lyta:/tmp$

I have included a ReiserFS patch for performance that probably does not impact 
this.

Let me know if you'd like a copy of the kernel deb that I use for testing and 
I'll scp it to snoopy.  I don't use FreeSWAN and I have it compiled to 
auto-mount devfs, but apart from that it should work for you (it's the same 
configuration we use for ns).

> I had no problems with 2.4.19, but as of 2.4.20 I seem to have
> encountered some weird stability issues that I cannot put my finger on.
[]
> So far this has only ever happened with 2.4.19, not 2.4.20. Weird.

???

-- 
http://www.coker.com.au/selinux/   My NSA Security Enhanced Linux packages
http://www.coker.com.au/bonnie++/  Bonnie++ hard drive benchmark
http://www.coker.com.au/postal/    Postal SMTP/POP benchmark
http://www.coker.com.au/~russell/  My home page


--
This message was distributed to subscribers of the selinux mailing list.
If you no longer wish to subscribe, send mail to majordomo@tycho.nsa.gov with
the words "unsubscribe selinux" without quotes as the message.

^ permalink raw reply

* Re: [PATCH] ip_conntrack_ftp.c: cosmetic typo fix in debug macro
From: David S. Miller @ 2003-01-10  8:58 UTC (permalink / raw)
  To: laforge; +Cc: netfilter-devel
In-Reply-To: <20030109145154.GL9467@sunbeam.de.gnumonks.org>

   From: Harald Welte <laforge@gnumonks.org>
   Date: Thu, 9 Jan 2003 15:51:54 +0100

   Author: Filip Sneppe (Cronos)" <filip.sneppe@cronos.be>
   Cosmetic Fix:
   Fixes a typo in a DEBUG statement (which is contained in an "#if 0" block,
   so this would never end up causing a problem).  

Applied, thanks.

^ permalink raw reply

* unscribe
From: ?? @ 2003-01-10  9:00 UTC (permalink / raw)
  To: netfilter-devel
In-Reply-To: <20030110.004226.89265652.davem@redhat.com>

unscribe

^ permalink raw reply

* Re: NAPI and tg3
From: David S. Miller @ 2003-01-10  9:00 UTC (permalink / raw)
  To: Robert.Olsson; +Cc: sp, alan, jgarzik, linux-kernel
In-Reply-To: <15901.44924.430586.886@robur.slu.se>

   From: Robert Olsson <Robert.Olsson@data.slu.se>
   Date: Thu, 9 Jan 2003 18:21:00 +0100

   Before it's get forgotten...

Applied, thanks.

^ permalink raw reply

* Re: [PATCH] Prevent .gnu.linkonce.this_module section from being merged with other sections
From: Rusty Russell @ 2003-01-10  8:32 UTC (permalink / raw)
  To: Miles Bader; +Cc: linux-kernel
In-Reply-To: <20030109094923.63723374A@mcspd15.ucom.lsi.nec.co.jp>

In message <20030109094923.63723374A@mcspd15.ucom.lsi.nec.co.jp> you write:
> --- linux-2.5.55-moo.orig/Makefile	2003-01-09 14:03:45.000000000 +0900
> +++ linux-2.5.55-moo/Makefile	2003-01-09 14:07:36.000000000 +0900
> @@ -163,7 +164,7 @@
>  MODFLAGS	= -DMODULE
>  CFLAGS_MODULE   = $(MODFLAGS)
>  AFLAGS_MODULE   = $(MODFLAGS)
> -LDFLAGS_MODULE  = -r
> +LDFLAGS_MODULE  = -r --unique=.gnu.linkonce.this_module

No!  Does this not work?

diff -urpN --exclude TAGS -X /home/rusty/devel/kernel/kernel-patches/current-dontdiff --minimal linux-2.5.55/arch/v850/Makefile working-2.5.55-strlen/arch/v850/Makefile
--- linux-2.5.55/arch/v850/Makefile	2003-01-02 12:46:15.000000000 +1100
+++ working-2.5.55-strlen/arch/v850/Makefile	2003-01-10 19:32:09.000000000 +1100
@@ -24,7 +24,7 @@ CFLAGS += -D__linux__ -DUTS_SYSNAME=\"uC
 
 LDFLAGS_BLOB := -b binary --oformat elf32-little
 OBJCOPY_FLAGS_BLOB := -I binary -O elf32-little -B v850e
-
+LDFLAGS_MODULE += --unique=.gnu.linkonce.this_module
 
 HEAD := $(arch_dir)/kernel/head.o $(arch_dir)/kernel/init_task.o
 core-y += $(arch_dir)/kernel/

Rusty.
--
  Anyone who quotes me in their sig is an idiot. -- Rusty Russell.

^ permalink raw reply

* Re: [BUG][2.5] System crash with PCI drivers that handle the same devices
From: Rusty Russell @ 2003-01-10  8:23 UTC (permalink / raw)
  To: Michael Hunold; +Cc: linux-kernel, jgarzik
In-Reply-To: <3E1C5E86.9050700@gmx.de>

In message <3E1C5E86.9050700@gmx.de> you write:
> Hello Rusty and others,

I'm not sure why I'm in here...

Have you tried doung both these builtin?

Your drivers also have the same name, which is odd, at least.  Also,
you should use SET_MODULE_OWNER or set .owner = THIS_MODULE.

Jeff prefers SET_MODULE_OWNER, but I never figured out why.

Sorry I can't be of more help,
Rusty.
--
  Anyone who quotes me in their sig is an idiot. -- Rusty Russell.

^ permalink raw reply

* Re: exception tables in 2.5.55
From: Rusty Russell @ 2003-01-10  8:30 UTC (permalink / raw)
  To: Miles Bader; +Cc: linux-kernel, Greg Ungerer, David McCullough, torvalds
In-Reply-To: <buo1y3msv2e.fsf@mcspd15.ucom.lsi.nec.co.jp>

In message <buo1y3msv2e.fsf@mcspd15.ucom.lsi.nec.co.jp> you write:
> I'm building for the v850, which has no MMU.
> 
> Starting with 2.5.55, I'm getting link errors like:
> 
>   kernel/extable.c:29: undefined reference to `search_extable'
> 
> I didn't have to worry about this with earlier kernels, and it looks
> like what happened is that previously arch-specific code was
> consolidated into the generic kernel.

Yes.  This patch (like most of the module stuff) was written long
before the mmuless archs were merged.  It didn't occur to me to look
through all the archs again.

> As far as I can see, the purpose of exception tables is to deal with
> unexpected memory access traps and on the v850, this basically can't
> happen (there's no MMU, and no way I know of to detect non-existant
> memory).  So I'd like to make the generic exception handling stuff
> optional.

You can now make kernel/extable.o depend on this configuration option
(whatever you decide it should be).

And surround kernel/module.c's search_module_extables with the same
option.

It's trivial, just CC: me when you send to Linus, and I'll re-xmit if
he drops it.

> However, I'm not sure the best way to do this -- I could try to make it
> dependent on CONFIG_MMU, but are there non-MMU processors that _can_
> usefully use exception tables (in which case perhaps there should just
> be a separate CONFIG_EXTABLES or something)?
> 
> [Oh, and also, please tell me if I'm mistaken about the purpose of
> these tables and really _should_ just implement them.]

No, they're for copy_to/from_user and friends.  If your arch doesn't
rely on exception handling to trap wierd accesses, you can turn this
off.

Hope that helps,
Rusty.
--
  Anyone who quotes me in their sig is an idiot. -- Rusty Russell.

^ permalink raw reply

* Re: [PATCH] Make `obsolete params' work correctly if MODULE_SYMBOL_PREFIX is non-empty
From: Rusty Russell @ 2003-01-10  8:31 UTC (permalink / raw)
  To: Miles Bader; +Cc: linux-kernel
In-Reply-To: <20030109094923.46A933745@mcspd15.ucom.lsi.nec.co.jp>

In message <20030109094923.46A933745@mcspd15.ucom.lsi.nec.co.jp> you write:
> Since these are just symbols in the module object, they need symbol name
> munging to find the symbol from the parameter name.

I've got this one already pending (I managed to pick up mail once
while travelling to a funeral, but generally I've been offline for 4
days).

Thanks!
Rusty.
--
  Anyone who quotes me in their sig is an idiot. -- Rusty Russell.

^ permalink raw reply

* Re: __gpl_ksymtab
From: Rusty Russell @ 2003-01-10  8:54 UTC (permalink / raw)
  To: Russell King; +Cc: Linux Kernel List, torvalds
In-Reply-To: <20030109112659.B15310@flint.arm.linux.org.uk>

In message <20030109112659.B15310@flint.arm.linux.org.uk> you write:
> In 2.5.55, we have a new section called "__gpl_ksymtab".
> 
> This, unfortunately, isn't mentioned in the linker script, and on ARM
> gets placed at 0x1c58, where the rest of the kernel is at 0xcXXXXXXX.
> 
> This section isn't even mentioned in the x86 linker script, so there
> isn't an example of the placement expectations of this section.

Exactly the same as __ksymtab.

> Rusty, can you provide the missing bits please?

Sure, I discarded it from the patch, when I discovered that the linker
creates the __start_ and __stop_ symbols automagically (as long as
it's not empty, which this never is).

But for clarity, and for section placement, here are all the archs,
consistent with whatever style the rest of the file is in

Linus, please apply,
Rusty.
--
  Anyone who quotes me in their sig is an idiot. -- Rusty Russell.

diff -urpN --exclude TAGS -X /home/rusty/devel/kernel/kernel-patches/current-dontdiff --minimal linux-2.5.55/arch/alpha/vmlinux.lds.S working-2.5.55-gpl_ksymtab/arch/alpha/vmlinux.lds.S
--- linux-2.5.55/arch/alpha/vmlinux.lds.S	2003-01-02 12:46:56.000000000 +1100
+++ working-2.5.55-gpl_ksymtab/arch/alpha/vmlinux.lds.S	2003-01-10 19:47:08.000000000 +1100
@@ -32,6 +32,13 @@ SECTIONS
 	__stop___ksymtab = .;
   }
 
+  /* Kernel symbol table: GPL only */
+  __gpl_ksymtab ALIGN(8) : {
+	__start___gpl_ksymtab = .;
+	*(__gpl_ksymtab)
+	__stop___gpl_ksymtab = .;
+  }
+
   /* All kernel symbols */
   __kallsyms ALIGN(8) : {
 	__start___kallsyms = .;
diff -urpN --exclude TAGS -X /home/rusty/devel/kernel/kernel-patches/current-dontdiff --minimal linux-2.5.55/arch/arm/vmlinux-armo.lds.in working-2.5.55-gpl_ksymtab/arch/arm/vmlinux-armo.lds.in
--- linux-2.5.55/arch/arm/vmlinux-armo.lds.in	2003-01-02 12:32:55.000000000 +1100
+++ working-2.5.55-gpl_ksymtab/arch/arm/vmlinux-armo.lds.in	2003-01-10 19:45:52.000000000 +1100
@@ -78,6 +78,12 @@ SECTIONS
 		__stop___ksymtab = .;
 	}
 
+	__gpl_ksymtab : {		/* Kernel symbol table: GPL-only */
+		__start___gpl_ksymtab = .;
+			*(__gpl_ksymtab)
+		__stop___gpl_ksymtab = .;
+	}
+
 	.data : {
 		/*
 		 * The cacheline aligned data
diff -urpN --exclude TAGS -X /home/rusty/devel/kernel/kernel-patches/current-dontdiff --minimal linux-2.5.55/arch/arm/vmlinux-armv.lds.in working-2.5.55-gpl_ksymtab/arch/arm/vmlinux-armv.lds.in
--- linux-2.5.55/arch/arm/vmlinux-armv.lds.in	2003-01-10 10:55:40.000000000 +1100
+++ working-2.5.55-gpl_ksymtab/arch/arm/vmlinux-armv.lds.in	2003-01-10 19:46:39.000000000 +1100
@@ -81,6 +81,12 @@ SECTIONS
 		__stop___ksymtab = .;
 	}
 
+	__gpl_ksymtab : {		/* Kernel symbol table: GPL-only*/
+		__start___gpl_ksymtab = .;
+			*(__gpl_ksymtab)
+		__stop___gpl_ksymtab = .;
+	}
+
 	__kallsyms : {			/* All kernel symbols		*/
 		__start___kallsyms = .;
 			*(__kallsyms)
diff -urpN --exclude TAGS -X /home/rusty/devel/kernel/kernel-patches/current-dontdiff --minimal linux-2.5.55/arch/cris/vmlinux.lds.S working-2.5.55-gpl_ksymtab/arch/cris/vmlinux.lds.S
--- linux-2.5.55/arch/cris/vmlinux.lds.S	2003-01-02 12:27:11.000000000 +1100
+++ working-2.5.55-gpl_ksymtab/arch/cris/vmlinux.lds.S	2003-01-10 19:45:16.000000000 +1100
@@ -43,6 +43,10 @@ SECTIONS
   	__ksymtab : { *(__ksymtab) }
   	__stop___ksymtab = .;
 
+	__start___gpl_ksymtab = .;    /* Kernel symbol table: GPL-only */
+	__gpl_ksymtab : { *(__gpl_ksymtab) }
+	__stop___gpl_ksymtab = .;
+
 	. = ALIGN (4);
 	___data_start = . ;
 	__Sdata = . ;
diff -urpN --exclude TAGS -X /home/rusty/devel/kernel/kernel-patches/current-dontdiff --minimal linux-2.5.55/arch/i386/vmlinux.lds.S working-2.5.55-gpl_ksymtab/arch/i386/vmlinux.lds.S
--- linux-2.5.55/arch/i386/vmlinux.lds.S	2003-01-02 12:46:12.000000000 +1100
+++ working-2.5.55-gpl_ksymtab/arch/i386/vmlinux.lds.S	2003-01-10 19:44:51.000000000 +1100
@@ -31,6 +31,10 @@ SECTIONS
   __ksymtab : { *(__ksymtab) }
   __stop___ksymtab = .;
 
+  __start___gpl_ksymtab = .;	/* Kernel symbol table:	GPL-only symbols */
+  __gpl_ksymtab : { *(__gpl_ksymtab) }
+  __stop___gpl_ksymtab = .;
+
   __start___kallsyms = .;       /* All kernel symbols */
   __kallsyms : { *(__kallsyms) }
   __stop___kallsyms = .;
diff -urpN --exclude TAGS -X /home/rusty/devel/kernel/kernel-patches/current-dontdiff --minimal linux-2.5.55/arch/ia64/vmlinux.lds.S working-2.5.55-gpl_ksymtab/arch/ia64/vmlinux.lds.S
--- linux-2.5.55/arch/ia64/vmlinux.lds.S	2003-01-02 12:46:59.000000000 +1100
+++ working-2.5.55-gpl_ksymtab/arch/ia64/vmlinux.lds.S	2003-01-10 19:44:26.000000000 +1100
@@ -65,6 +65,11 @@ SECTIONS
 	{ *(__ksymtab) }
   __stop___ksymtab = .;
 
+  __start___gpl_ksymtab = .;	/* Kernel symbol table:	GPL only */
+  __gpl_ksymtab : AT(ADDR(__gpl_ksymtab) - PAGE_OFFSET)
+	{ *(__gpl_ksymtab) }
+  __stop___gpl_ksymtab = .;
+
   __kallsyms : AT(ADDR(__kallsyms) - PAGE_OFFSET)
 	{
 	  __start___kallsyms = .;	/* All kernel symbols */
diff -urpN --exclude TAGS -X /home/rusty/devel/kernel/kernel-patches/current-dontdiff --minimal linux-2.5.55/arch/m68k/vmlinux-std.lds working-2.5.55-gpl_ksymtab/arch/m68k/vmlinux-std.lds
--- linux-2.5.55/arch/m68k/vmlinux-std.lds	2003-01-02 14:47:57.000000000 +1100
+++ working-2.5.55-gpl_ksymtab/arch/m68k/vmlinux-std.lds	2003-01-10 19:43:03.000000000 +1100
@@ -24,6 +24,10 @@ SECTIONS
   __ksymtab : { *(__ksymtab) }
   __stop___ksymtab = .;
 
+  __start___ksymtab = .;	/* Kernel symbol table */
+  __ksymtab : { *(__ksymtab) }
+  __stop___ksymtab = .;
+
   _etext = .;			/* End of text section */
 
   .data : {			/* Data */
diff -urpN --exclude TAGS -X /home/rusty/devel/kernel/kernel-patches/current-dontdiff --minimal linux-2.5.55/arch/m68k/vmlinux-sun3.lds working-2.5.55-gpl_ksymtab/arch/m68k/vmlinux-sun3.lds
--- linux-2.5.55/arch/m68k/vmlinux-sun3.lds	2003-01-02 14:47:57.000000000 +1100
+++ working-2.5.55-gpl_ksymtab/arch/m68k/vmlinux-sun3.lds	2003-01-10 19:43:53.000000000 +1100
@@ -30,6 +30,9 @@ SECTIONS
   	__start___ksymtab = .;	/* Kernel symbol table */
   	*(__ksymtab) 
   	__stop___ksymtab = .;
+	__start___gpl_ksymtab = .;  /* Kernel symbol table: GPL-only */
+	__gpl_ksymtab : { *(__gpl_ksymtab) }
+	__stop___gpl_ksymtab = .;
 	}
   /* End of data goes *here* so that freeing init code works properly. */
   _edata = .;
diff -urpN --exclude TAGS -X /home/rusty/devel/kernel/kernel-patches/current-dontdiff --minimal linux-2.5.55/arch/m68knommu/platform/5206/ARNEWSH/ram.ld working-2.5.55-gpl_ksymtab/arch/m68knommu/platform/5206/ARNEWSH/ram.ld
--- linux-2.5.55/arch/m68knommu/platform/5206/ARNEWSH/ram.ld	2003-01-02 12:32:57.000000000 +1100
+++ working-2.5.55-gpl_ksymtab/arch/m68knommu/platform/5206/ARNEWSH/ram.ld	2003-01-10 19:51:20.000000000 +1100
@@ -24,6 +24,11 @@ SECTIONS {
 		__start___ksymtab = .;  /* Kernel symbol table          */
 		*(__ksymtab)
 		__stop___ksymtab = .;
+
+	        __start___gpl_ksymtab = .;  /* Kernel symbol table: GPL-only */
+		*(__gpl_ksymtab)
+		__stop___gpl_ksymtab = .;
+
 		. = ALIGN(4) ;
 		_etext = . ;
 	} > ram
diff -urpN --exclude TAGS -X /home/rusty/devel/kernel/kernel-patches/current-dontdiff --minimal linux-2.5.55/arch/m68knommu/platform/5206e/MOTOROLA/ram.ld working-2.5.55-gpl_ksymtab/arch/m68knommu/platform/5206e/MOTOROLA/ram.ld
--- linux-2.5.55/arch/m68knommu/platform/5206e/MOTOROLA/ram.ld	2003-01-02 12:32:57.000000000 +1100
+++ working-2.5.55-gpl_ksymtab/arch/m68knommu/platform/5206e/MOTOROLA/ram.ld	2003-01-10 19:51:13.000000000 +1100
@@ -24,6 +24,11 @@ SECTIONS {
 		__start___ksymtab = .;  /* Kernel symbol table          */
 		*(__ksymtab)
 		__stop___ksymtab = .;
+
+	        __start___gpl_ksymtab = .;  /* Kernel symbol table: GPL-only */
+		*(__gpl_ksymtab)
+		__stop___gpl_ksymtab = .;
+
 		. = ALIGN(4) ;
 		_etext = . ;
 	} > ram
diff -urpN --exclude TAGS -X /home/rusty/devel/kernel/kernel-patches/current-dontdiff --minimal linux-2.5.55/arch/m68knommu/platform/5206e/eLITE/ram.ld working-2.5.55-gpl_ksymtab/arch/m68knommu/platform/5206e/eLITE/ram.ld
--- linux-2.5.55/arch/m68knommu/platform/5206e/eLITE/ram.ld	2003-01-02 12:32:57.000000000 +1100
+++ working-2.5.55-gpl_ksymtab/arch/m68knommu/platform/5206e/eLITE/ram.ld	2003-01-10 19:51:09.000000000 +1100
@@ -24,6 +24,11 @@ SECTIONS {
 		__start___ksymtab = .;  /* Kernel symbol table          */
 		*(__ksymtab)
 		__stop___ksymtab = .;
+
+	        __start___gpl_ksymtab = .;  /* Kernel symbol table: GPL-only */
+		*(__gpl_ksymtab)
+		__stop___gpl_ksymtab = .;
+
 		. = ALIGN(4) ;
 		_etext = . ;
 	} > ram
diff -urpN --exclude TAGS -X /home/rusty/devel/kernel/kernel-patches/current-dontdiff --minimal linux-2.5.55/arch/m68knommu/platform/5249/MOTOROLA/ram.ld working-2.5.55-gpl_ksymtab/arch/m68knommu/platform/5249/MOTOROLA/ram.ld
--- linux-2.5.55/arch/m68knommu/platform/5249/MOTOROLA/ram.ld	2003-01-02 12:32:57.000000000 +1100
+++ working-2.5.55-gpl_ksymtab/arch/m68knommu/platform/5249/MOTOROLA/ram.ld	2003-01-10 19:51:04.000000000 +1100
@@ -25,6 +25,11 @@ SECTIONS {
 		__start___ksymtab = .;  /* Kernel symbol table          */
 		*(__ksymtab)
 		__stop___ksymtab = .;
+
+	        __start___gpl_ksymtab = .;  /* Kernel symbol table: GPL-only */
+		*(__gpl_ksymtab)
+		__stop___gpl_ksymtab = .;
+
 		. = ALIGN(4) ;
 		_etext = . ;
 	} > ram
diff -urpN --exclude TAGS -X /home/rusty/devel/kernel/kernel-patches/current-dontdiff --minimal linux-2.5.55/arch/m68knommu/platform/5272/MOTOROLA/ram.ld working-2.5.55-gpl_ksymtab/arch/m68knommu/platform/5272/MOTOROLA/ram.ld
--- linux-2.5.55/arch/m68knommu/platform/5272/MOTOROLA/ram.ld	2003-01-02 12:32:57.000000000 +1100
+++ working-2.5.55-gpl_ksymtab/arch/m68knommu/platform/5272/MOTOROLA/ram.ld	2003-01-10 19:50:59.000000000 +1100
@@ -25,6 +25,11 @@ SECTIONS {
 		__start___ksymtab = .;  /* Kernel symbol table          */
 		*(__ksymtab)
 		__stop___ksymtab = .;
+
+	        __start___gpl_ksymtab = .;  /* Kernel symbol table: GPL-only */
+		*(__gpl_ksymtab)
+		__stop___gpl_ksymtab = .;
+
 		. = ALIGN(4) ;
 		_etext = . ;
 	} > ram
diff -urpN --exclude TAGS -X /home/rusty/devel/kernel/kernel-patches/current-dontdiff --minimal linux-2.5.55/arch/m68knommu/platform/5272/NETtel/ram.ld working-2.5.55-gpl_ksymtab/arch/m68knommu/platform/5272/NETtel/ram.ld
--- linux-2.5.55/arch/m68knommu/platform/5272/NETtel/ram.ld	2003-01-02 12:32:57.000000000 +1100
+++ working-2.5.55-gpl_ksymtab/arch/m68knommu/platform/5272/NETtel/ram.ld	2003-01-10 19:50:55.000000000 +1100
@@ -25,6 +25,11 @@ SECTIONS {
 		__start___ksymtab = .;  /* Kernel symbol table          */
 		*(__ksymtab)
 		__stop___ksymtab = .;
+
+	        __start___gpl_ksymtab = .;  /* Kernel symbol table: GPL-only */
+		*(__gpl_ksymtab)
+		__stop___gpl_ksymtab = .;
+
 		. = ALIGN(4) ;
 		_etext = . ;
 	} > ram
diff -urpN --exclude TAGS -X /home/rusty/devel/kernel/kernel-patches/current-dontdiff --minimal linux-2.5.55/arch/m68knommu/platform/5307/ARNEWSH/ram.ld working-2.5.55-gpl_ksymtab/arch/m68knommu/platform/5307/ARNEWSH/ram.ld
--- linux-2.5.55/arch/m68knommu/platform/5307/ARNEWSH/ram.ld	2003-01-02 12:32:57.000000000 +1100
+++ working-2.5.55-gpl_ksymtab/arch/m68knommu/platform/5307/ARNEWSH/ram.ld	2003-01-10 19:50:51.000000000 +1100
@@ -24,6 +24,11 @@ SECTIONS {
 		__start___ksymtab = .;  /* Kernel symbol table          */
 		*(__ksymtab)
 		__stop___ksymtab = .;
+
+	        __start___gpl_ksymtab = .;  /* Kernel symbol table: GPL-only */
+		*(__gpl_ksymtab)
+		__stop___gpl_ksymtab = .;
+
 		. = ALIGN(4) ;
 		_etext = . ;
 	} > ram
diff -urpN --exclude TAGS -X /home/rusty/devel/kernel/kernel-patches/current-dontdiff --minimal linux-2.5.55/arch/m68knommu/platform/5307/CLEOPATRA/ram.ld working-2.5.55-gpl_ksymtab/arch/m68knommu/platform/5307/CLEOPATRA/ram.ld
--- linux-2.5.55/arch/m68knommu/platform/5307/CLEOPATRA/ram.ld	2003-01-02 12:32:57.000000000 +1100
+++ working-2.5.55-gpl_ksymtab/arch/m68knommu/platform/5307/CLEOPATRA/ram.ld	2003-01-10 19:50:46.000000000 +1100
@@ -24,6 +24,11 @@ SECTIONS {
 		__start___ksymtab = .;  /* Kernel symbol table          */
 		*(__ksymtab)
 		__stop___ksymtab = .;
+
+	        __start___gpl_ksymtab = .;  /* Kernel symbol table: GPL-only */
+		*(__gpl_ksymtab)
+		__stop___gpl_ksymtab = .;
+
 		. = ALIGN(4) ;
 		_etext = . ;
 	} > ram
diff -urpN --exclude TAGS -X /home/rusty/devel/kernel/kernel-patches/current-dontdiff --minimal linux-2.5.55/arch/m68knommu/platform/5307/MOTOROLA/ram.ld working-2.5.55-gpl_ksymtab/arch/m68knommu/platform/5307/MOTOROLA/ram.ld
--- linux-2.5.55/arch/m68knommu/platform/5307/MOTOROLA/ram.ld	2003-01-02 12:32:57.000000000 +1100
+++ working-2.5.55-gpl_ksymtab/arch/m68knommu/platform/5307/MOTOROLA/ram.ld	2003-01-10 19:50:42.000000000 +1100
@@ -24,6 +24,11 @@ SECTIONS {
 		__start___ksymtab = .;  /* Kernel symbol table          */
 		*(__ksymtab)
 		__stop___ksymtab = .;
+
+	        __start___gpl_ksymtab = .;  /* Kernel symbol table: GPL-only */
+		*(__gpl_ksymtab)
+		__stop___gpl_ksymtab = .;
+
 		. = ALIGN(4) ;
 		_etext = . ;
 	} > ram
diff -urpN --exclude TAGS -X /home/rusty/devel/kernel/kernel-patches/current-dontdiff --minimal linux-2.5.55/arch/m68knommu/platform/5307/MP3/ram.ld working-2.5.55-gpl_ksymtab/arch/m68knommu/platform/5307/MP3/ram.ld
--- linux-2.5.55/arch/m68knommu/platform/5307/MP3/ram.ld	2003-01-02 12:32:57.000000000 +1100
+++ working-2.5.55-gpl_ksymtab/arch/m68knommu/platform/5307/MP3/ram.ld	2003-01-10 19:50:36.000000000 +1100
@@ -24,6 +24,11 @@ SECTIONS {
 		__start___ksymtab = .;  /* Kernel symbol table          */
 		*(__ksymtab)
 		__stop___ksymtab = .;
+
+	        __start___gpl_ksymtab = .;  /* Kernel symbol table: GPL-only */
+		*(__gpl_ksymtab)
+		__stop___gpl_ksymtab = .;
+
 		. = ALIGN(4) ;
 		_etext = . ;
 	} > ram
diff -urpN --exclude TAGS -X /home/rusty/devel/kernel/kernel-patches/current-dontdiff --minimal linux-2.5.55/arch/m68knommu/platform/5307/NETtel/ram.ld working-2.5.55-gpl_ksymtab/arch/m68knommu/platform/5307/NETtel/ram.ld
--- linux-2.5.55/arch/m68knommu/platform/5307/NETtel/ram.ld	2003-01-02 12:32:57.000000000 +1100
+++ working-2.5.55-gpl_ksymtab/arch/m68knommu/platform/5307/NETtel/ram.ld	2003-01-10 19:50:30.000000000 +1100
@@ -24,6 +24,11 @@ SECTIONS {
 		__start___ksymtab = .;  /* Kernel symbol table          */
 		*(__ksymtab)
 		__stop___ksymtab = .;
+
+	        __start___gpl_ksymtab = .;  /* Kernel symbol table: GPL-only */
+		*(__gpl_ksymtab)
+		__stop___gpl_ksymtab = .;
+
 		. = ALIGN(4) ;
 		_etext = . ;
 	} > ram
diff -urpN --exclude TAGS -X /home/rusty/devel/kernel/kernel-patches/current-dontdiff --minimal linux-2.5.55/arch/m68knommu/platform/5407/CLEOPATRA/ram.ld working-2.5.55-gpl_ksymtab/arch/m68knommu/platform/5407/CLEOPATRA/ram.ld
--- linux-2.5.55/arch/m68knommu/platform/5407/CLEOPATRA/ram.ld	2003-01-02 12:32:57.000000000 +1100
+++ working-2.5.55-gpl_ksymtab/arch/m68knommu/platform/5407/CLEOPATRA/ram.ld	2003-01-10 19:50:23.000000000 +1100
@@ -24,6 +24,11 @@ SECTIONS {
 		__start___ksymtab = .;  /* Kernel symbol table          */
 		*(__ksymtab)
 		__stop___ksymtab = .;
+
+	        __start___gpl_ksymtab = .;  /* Kernel symbol table: GPL-only */
+		*(__gpl_ksymtab)
+		__stop___gpl_ksymtab = .;
+
 		. = ALIGN(4) ;
 		_etext = . ;
 	} > ram
diff -urpN --exclude TAGS -X /home/rusty/devel/kernel/kernel-patches/current-dontdiff --minimal linux-2.5.55/arch/m68knommu/platform/5407/MOTOROLA/ram.ld working-2.5.55-gpl_ksymtab/arch/m68knommu/platform/5407/MOTOROLA/ram.ld
--- linux-2.5.55/arch/m68knommu/platform/5407/MOTOROLA/ram.ld	2003-01-02 12:32:57.000000000 +1100
+++ working-2.5.55-gpl_ksymtab/arch/m68knommu/platform/5407/MOTOROLA/ram.ld	2003-01-10 19:50:06.000000000 +1100
@@ -24,6 +24,11 @@ SECTIONS {
 		__start___ksymtab = .;  /* Kernel symbol table          */
 		*(__ksymtab)
 		__stop___ksymtab = .;
+
+	        __start___gpl_ksymtab = .;  /* Kernel symbol table: GPL-only */
+		*(__gpl_ksymtab)
+		__stop___gpl_ksymtab = .;
+
 		. = ALIGN(4) ;
 		_etext = . ;
 	} > ram
diff -urpN --exclude TAGS -X /home/rusty/devel/kernel/kernel-patches/current-dontdiff --minimal linux-2.5.55/arch/m68knommu/platform/68360/uCquicc/ram.ld working-2.5.55-gpl_ksymtab/arch/m68knommu/platform/68360/uCquicc/ram.ld
--- linux-2.5.55/arch/m68knommu/platform/68360/uCquicc/ram.ld	2003-01-02 12:32:57.000000000 +1100
+++ working-2.5.55-gpl_ksymtab/arch/m68knommu/platform/68360/uCquicc/ram.ld	2003-01-10 19:49:26.000000000 +1100
@@ -38,6 +38,9 @@ SECTIONS
 	__start___ksymtab = . ;
 	*(__ksymtab)
         __stop___ksymtab = . ;
+	__start___gpl_ksymtab = . ;
+	*(__gpl_ksymtab)
+        __stop___gpl_ksymtab = . ;
 	__start___ex_table = . ;
 	*(___ex_table)
 	__stop___ex_table = . ;
diff -urpN --exclude TAGS -X /home/rusty/devel/kernel/kernel-patches/current-dontdiff --minimal linux-2.5.55/arch/m68knommu/platform/68360/uCquicc/rom.ld working-2.5.55-gpl_ksymtab/arch/m68knommu/platform/68360/uCquicc/rom.ld
--- linux-2.5.55/arch/m68knommu/platform/68360/uCquicc/rom.ld	2003-01-02 12:32:57.000000000 +1100
+++ working-2.5.55-gpl_ksymtab/arch/m68knommu/platform/68360/uCquicc/rom.ld	2003-01-10 19:49:15.000000000 +1100
@@ -38,6 +38,9 @@ SECTIONS
         __start___ksymtab = . ;
         *(__ksymtab)
         __stop___ksymtab = . ;
+        __start___gpl_ksymtab = . ;
+        *(__gpl_ksymtab)
+        __stop___gpl_ksymtab = . ;
         __start___ex_table = . ;
         *(___ex_table)
         __stop___ex_table = . ;
diff -urpN --exclude TAGS -X /home/rusty/devel/kernel/kernel-patches/current-dontdiff --minimal linux-2.5.55/arch/m68knommu/platform/68EZ328/ucsimm/fixed.ld working-2.5.55-gpl_ksymtab/arch/m68knommu/platform/68EZ328/ucsimm/fixed.ld
--- linux-2.5.55/arch/m68knommu/platform/68EZ328/ucsimm/fixed.ld	2003-01-02 12:32:57.000000000 +1100
+++ working-2.5.55-gpl_ksymtab/arch/m68knommu/platform/68EZ328/ucsimm/fixed.ld	2003-01-10 19:48:58.000000000 +1100
@@ -30,6 +30,10 @@ SECTIONS
 		 *(__ksymtab)
 	__stop___ksymtab = .;
 
+        __start___gpl_ksymtab = .;  /* Kernel symbol table: GPL-only  */
+		 *(__gpl_ksymtab)
+	__stop___gpl_ksymtab = .;
+
 	. = ALIGN(0x4) ;
 	_etext = . ;
 	__data_rom_start = . ;
diff -urpN --exclude TAGS -X /home/rusty/devel/kernel/kernel-patches/current-dontdiff --minimal linux-2.5.55/arch/m68knommu/platform/68EZ328/ucsimm/ram.ld working-2.5.55-gpl_ksymtab/arch/m68knommu/platform/68EZ328/ucsimm/ram.ld
--- linux-2.5.55/arch/m68knommu/platform/68EZ328/ucsimm/ram.ld	2003-01-02 12:32:57.000000000 +1100
+++ working-2.5.55-gpl_ksymtab/arch/m68knommu/platform/68EZ328/ucsimm/ram.ld	2003-01-10 19:48:52.000000000 +1100
@@ -51,6 +51,10 @@ SECTIONS
 		 *(__ksymtab)
 	__stop___ksymtab = .;
 
+        __start___gpl_ksymtab = .;  /* Kernel symbol table: GPL-only  */
+		 *(__gpl_ksymtab)
+	__stop___gpl_ksymtab = .;
+
 	_etext = . ;
 	__data_rom_start = ALIGN ( 4 ) ;
         } > ram
diff -urpN --exclude TAGS -X /home/rusty/devel/kernel/kernel-patches/current-dontdiff --minimal linux-2.5.55/arch/m68knommu/platform/68VZ328/de2/fixed.ld working-2.5.55-gpl_ksymtab/arch/m68knommu/platform/68VZ328/de2/fixed.ld
--- linux-2.5.55/arch/m68knommu/platform/68VZ328/de2/fixed.ld	2003-01-02 12:32:57.000000000 +1100
+++ working-2.5.55-gpl_ksymtab/arch/m68knommu/platform/68VZ328/de2/fixed.ld	2003-01-10 19:48:45.000000000 +1100
@@ -29,6 +29,10 @@ SECTIONS
 		 *(__ksymtab)
 	__stop___ksymtab = .;
 
+        __start___gpl_ksymtab = .;  /* Kernel symbol table: GPL-only  */
+		 *(__gpl_ksymtab)
+	__stop___gpl_ksymtab = .;
+
 	. = ALIGN(0x4) ;
 	_etext = . ;
 	__data_rom_start = . ;
diff -urpN --exclude TAGS -X /home/rusty/devel/kernel/kernel-patches/current-dontdiff --minimal linux-2.5.55/arch/m68knommu/platform/68VZ328/de2/ram.ld working-2.5.55-gpl_ksymtab/arch/m68knommu/platform/68VZ328/de2/ram.ld
--- linux-2.5.55/arch/m68knommu/platform/68VZ328/de2/ram.ld	2003-01-02 12:32:57.000000000 +1100
+++ working-2.5.55-gpl_ksymtab/arch/m68knommu/platform/68VZ328/de2/ram.ld	2003-01-10 19:48:39.000000000 +1100
@@ -50,6 +50,10 @@ SECTIONS
 		 *(__ksymtab)
 	__stop___ksymtab = .;
 
+        __start___gpl_ksymtab = .;  /* Kernel symbol table: GPL-only  */
+		 *(__gpl_ksymtab)
+	__stop___gpl_ksymtab = .;
+
 	_etext = . ;
 	__data_rom_start = ALIGN ( 4 ) ;
         } > ram
diff -urpN --exclude TAGS -X /home/rusty/devel/kernel/kernel-patches/current-dontdiff --minimal linux-2.5.55/arch/m68knommu/platform/68VZ328/ucdimm/fixed.ld working-2.5.55-gpl_ksymtab/arch/m68knommu/platform/68VZ328/ucdimm/fixed.ld
--- linux-2.5.55/arch/m68knommu/platform/68VZ328/ucdimm/fixed.ld	2003-01-02 12:32:57.000000000 +1100
+++ working-2.5.55-gpl_ksymtab/arch/m68knommu/platform/68VZ328/ucdimm/fixed.ld	2003-01-10 19:48:32.000000000 +1100
@@ -29,6 +29,10 @@ SECTIONS
 		 *(__ksymtab)
 	__stop___ksymtab = .;
 
+        __start___gpl_ksymtab = .;  /* Kernel symbol table: GPL-only  */
+		 *(__gpl_ksymtab)
+	__stop___gpl_ksymtab = .;
+
 	. = ALIGN(0x4) ;
 	_etext = . ;
 	__data_rom_start = . ;
diff -urpN --exclude TAGS -X /home/rusty/devel/kernel/kernel-patches/current-dontdiff --minimal linux-2.5.55/arch/m68knommu/platform/68VZ328/ucdimm/ram.ld working-2.5.55-gpl_ksymtab/arch/m68knommu/platform/68VZ328/ucdimm/ram.ld
--- linux-2.5.55/arch/m68knommu/platform/68VZ328/ucdimm/ram.ld	2003-01-02 12:32:57.000000000 +1100
+++ working-2.5.55-gpl_ksymtab/arch/m68knommu/platform/68VZ328/ucdimm/ram.ld	2003-01-10 19:48:21.000000000 +1100
@@ -50,6 +50,10 @@ SECTIONS
 		 *(__ksymtab)
 	__stop___ksymtab = .;
 
+        __start___gpl_ksymtab = .;  /* Kernel symbol table: GPL-only  */
+		 *(__gpl_ksymtab)
+	__stop___gpl_ksymtab = .;
+
 	_etext = . ;
 	__data_rom_start = ALIGN ( 4 ) ;
         } > ram
diff -urpN --exclude TAGS -X /home/rusty/devel/kernel/kernel-patches/current-dontdiff --minimal linux-2.5.55/arch/mips/vmlinux.lds.S working-2.5.55-gpl_ksymtab/arch/mips/vmlinux.lds.S
--- linux-2.5.55/arch/mips/vmlinux.lds.S	2003-01-02 12:27:11.000000000 +1100
+++ working-2.5.55-gpl_ksymtab/arch/mips/vmlinux.lds.S	2003-01-10 19:42:22.000000000 +1100
@@ -29,6 +29,10 @@ SECTIONS
   __ksymtab : { *(__ksymtab) }
   __stop___ksymtab = .;
 
+  __start___gpl_ksymtab = .;	/* Kernel symbol table:	GPL-only symbols */
+  __gpl_ksymtab : { *(__gpl_ksymtab) }
+  __stop___gpl_ksymtab = .;
+
   _etext = .;
 
   . = ALIGN(8192);
diff -urpN --exclude TAGS -X /home/rusty/devel/kernel/kernel-patches/current-dontdiff --minimal linux-2.5.55/arch/parisc/vmlinux.lds.S working-2.5.55-gpl_ksymtab/arch/parisc/vmlinux.lds.S
--- linux-2.5.55/arch/parisc/vmlinux.lds.S	2003-01-02 12:34:00.000000000 +1100
+++ working-2.5.55-gpl_ksymtab/arch/parisc/vmlinux.lds.S	2003-01-10 19:41:28.000000000 +1100
@@ -49,6 +49,10 @@ SECTIONS
   __ksymtab : { *(__ksymtab) }
   __stop___ksymtab = .;
 
+  __start___gpl_ksymtab = .;	/* Kernel symbol table:	GPL-only symbols */
+  __gpl_ksymtab : { *(__gpl_ksymtab) }
+  __stop___gpl_ksymtab = .;
+
   __start___kallsyms = .;       /* All kernel symbols */
   __kallsyms : { *(__kallsyms) }
   __stop___kallsyms = .;
diff -urpN --exclude TAGS -X /home/rusty/devel/kernel/kernel-patches/current-dontdiff --minimal linux-2.5.55/arch/ppc/vmlinux.lds.S working-2.5.55-gpl_ksymtab/arch/ppc/vmlinux.lds.S
--- linux-2.5.55/arch/ppc/vmlinux.lds.S	2003-01-02 12:46:15.000000000 +1100
+++ working-2.5.55-gpl_ksymtab/arch/ppc/vmlinux.lds.S	2003-01-10 19:41:22.000000000 +1100
@@ -61,6 +61,10 @@ SECTIONS
   __ksymtab : { *(__ksymtab) }
   __stop___ksymtab = .;
 
+  __start___gpl_ksymtab = .;	/* Kernel symbol table:	GPL-only symbols */
+  __gpl_ksymtab : { *(__gpl_ksymtab) }
+  __stop___gpl_ksymtab = .;
+
   __start___kallsyms = .;     /* All kernel symbols */
   __kallsyms : { *(__kallsyms) }
   __stop___kallsyms = .;
diff -urpN --exclude TAGS -X /home/rusty/devel/kernel/kernel-patches/current-dontdiff --minimal linux-2.5.55/arch/ppc64/vmlinux.lds.S working-2.5.55-gpl_ksymtab/arch/ppc64/vmlinux.lds.S
--- linux-2.5.55/arch/ppc64/vmlinux.lds.S	2003-01-02 12:46:15.000000000 +1100
+++ working-2.5.55-gpl_ksymtab/arch/ppc64/vmlinux.lds.S	2003-01-10 19:41:14.000000000 +1100
@@ -69,6 +69,10 @@ SECTIONS
   __ksymtab : { *(__ksymtab) }
   __stop___ksymtab = .;
 
+  __start___gpl_ksymtab = .;	/* Kernel symbol table:	GPL-only symbols */
+  __gpl_ksymtab : { *(__gpl_ksymtab) }
+  __stop___gpl_ksymtab = .;
+
   __start___kallsyms = .;	/* All kernel symbols */
   __kallsyms : { *(__kallsyms) }
   __stop___kallsyms = .;
diff -urpN --exclude TAGS -X /home/rusty/devel/kernel/kernel-patches/current-dontdiff --minimal linux-2.5.55/arch/s390/vmlinux.lds.S working-2.5.55-gpl_ksymtab/arch/s390/vmlinux.lds.S
--- linux-2.5.55/arch/s390/vmlinux.lds.S	2003-01-02 12:35:59.000000000 +1100
+++ working-2.5.55-gpl_ksymtab/arch/s390/vmlinux.lds.S	2003-01-10 19:41:06.000000000 +1100
@@ -30,6 +30,10 @@ SECTIONS
   __ksymtab : { *(__ksymtab) }
   __stop___ksymtab = .;
 
+  __start___gpl_ksymtab = .;	/* Kernel symbol table:	GPL-only symbols */
+  __gpl_ksymtab : { *(__gpl_ksymtab) }
+  __stop___gpl_ksymtab = .;
+
 #ifdef CONFIG_SHARED_KERNEL
   . = ALIGN(1048576);		/* VM shared segments are 1MB aligned */
 
diff -urpN --exclude TAGS -X /home/rusty/devel/kernel/kernel-patches/current-dontdiff --minimal linux-2.5.55/arch/s390x/vmlinux.lds.S working-2.5.55-gpl_ksymtab/arch/s390x/vmlinux.lds.S
--- linux-2.5.55/arch/s390x/vmlinux.lds.S	2003-01-02 12:35:59.000000000 +1100
+++ working-2.5.55-gpl_ksymtab/arch/s390x/vmlinux.lds.S	2003-01-10 19:40:57.000000000 +1100
@@ -30,6 +30,10 @@ SECTIONS
   __ksymtab : { *(__ksymtab) }
   __stop___ksymtab = .;
 
+  __start___gpl_ksymtab = .;	/* Kernel symbol table:	GPL-only symbols */
+  __gpl_ksymtab : { *(__gpl_ksymtab) }
+  __stop___gpl_ksymtab = .;
+	
 #ifdef CONFIG_SHARED_KERNEL
   . = ALIGN(1048576);		/* VM shared segments are 1MB aligned */
 
diff -urpN --exclude TAGS -X /home/rusty/devel/kernel/kernel-patches/current-dontdiff --minimal linux-2.5.55/arch/sh/vmlinux.lds.S working-2.5.55-gpl_ksymtab/arch/sh/vmlinux.lds.S
--- linux-2.5.55/arch/sh/vmlinux.lds.S	2003-01-02 12:03:44.000000000 +1100
+++ working-2.5.55-gpl_ksymtab/arch/sh/vmlinux.lds.S	2003-01-10 19:40:32.000000000 +1100
@@ -37,6 +37,10 @@ SECTIONS
   __ksymtab : { *(__ksymtab) }
   __stop___ksymtab = .;
 
+  __start___gpl_ksymtab = .;	/* Kernel symbol table:	GPL-only symbols */
+  __gpl_ksymtab : { *(__gpl_ksymtab) }
+  __stop___gpl_ksymtab = .;
+
   __start___kallsyms = .;	/* All kernel symbols */
   __kallsyms : { *(__kallsyms) }
   __stop___kallsyms = .;
diff -urpN --exclude TAGS -X /home/rusty/devel/kernel/kernel-patches/current-dontdiff --minimal linux-2.5.55/arch/sparc/vmlinux.lds.S working-2.5.55-gpl_ksymtab/arch/sparc/vmlinux.lds.S
--- linux-2.5.55/arch/sparc/vmlinux.lds.S	2003-01-02 14:47:58.000000000 +1100
+++ working-2.5.55-gpl_ksymtab/arch/sparc/vmlinux.lds.S	2003-01-10 19:40:12.000000000 +1100
@@ -35,6 +35,10 @@ SECTIONS
   __ksymtab  : { *(__ksymtab) }
   __stop___ksymtab = .;
 
+  __start___gpl_ksymtab = .;
+  __gpl_ksymtab : { *(__gpl_ksymtab) }
+  __stop___gpl_ksymtab = .;
+
   __start___kallsyms = .;	/* All kernel symbols */
   __kallsyms : { *(__kallsyms) }
   __stop___kallsyms = .;
diff -urpN --exclude TAGS -X /home/rusty/devel/kernel/kernel-patches/current-dontdiff --minimal linux-2.5.55/arch/sparc64/vmlinux.lds.S working-2.5.55-gpl_ksymtab/arch/sparc64/vmlinux.lds.S
--- linux-2.5.55/arch/sparc64/vmlinux.lds.S	2003-01-02 12:46:15.000000000 +1100
+++ working-2.5.55-gpl_ksymtab/arch/sparc64/vmlinux.lds.S	2003-01-10 19:39:52.000000000 +1100
@@ -39,6 +39,9 @@ SECTIONS
   __start___ksymtab = .;
   __ksymtab  : { *(__ksymtab) }
   __stop___ksymtab = .;
+  __start___gpl_ksymtab = .;
+  __gpl_ksymtab : { *(__gpl_ksymtab) }
+  __stop___gpl_ksymtab = .;
   __kstrtab  : { *(.kstrtab) }
   __start___kallsyms = .;	/* All kernel symbols */
   __kallsyms : { *(__kallsyms) }
diff -urpN --exclude TAGS -X /home/rusty/devel/kernel/kernel-patches/current-dontdiff --minimal linux-2.5.55/arch/v850/vmlinux.lds.S working-2.5.55-gpl_ksymtab/arch/v850/vmlinux.lds.S
--- linux-2.5.55/arch/v850/vmlinux.lds.S	2003-01-02 12:46:59.000000000 +1100
+++ working-2.5.55-gpl_ksymtab/arch/v850/vmlinux.lds.S	2003-01-10 19:39:33.000000000 +1100
@@ -51,6 +51,9 @@
 		___start___ksymtab = . ;/* Kernel symbol table.  */	      \
 			*(__ksymtab)					      \
 		___stop___ksymtab = . ;					      \
+		___start___gpl_ksymtab = . ;/* GPL Kernel symbol table. */    \
+			*(__gpl_ksymtab)				      \
+		___stop___gpl_ksymtab = . ;				      \
 		. = ALIGN (4) ;						      \
 		__etext = . ;
 
diff -urpN --exclude TAGS -X /home/rusty/devel/kernel/kernel-patches/current-dontdiff --minimal linux-2.5.55/arch/x86_64/vmlinux.lds.S working-2.5.55-gpl_ksymtab/arch/x86_64/vmlinux.lds.S
--- linux-2.5.55/arch/x86_64/vmlinux.lds.S	2003-01-02 12:47:00.000000000 +1100
+++ working-2.5.55-gpl_ksymtab/arch/x86_64/vmlinux.lds.S	2003-01-10 19:38:12.000000000 +1100
@@ -30,6 +30,9 @@ SECTIONS
   __start___ksymtab = .;	/* Kernel symbol table */
   __ksymtab : { *(__ksymtab) }
   __stop___ksymtab = .;
+  __start___gpl_ksymtab = .;	/* Kernel symbol table:	GPL-only symbols */
+  __gpl_ksymtab : { *(__gpl_ksymtab) }
+  __stop___gpl_ksymtab = .;
 
   __start___kallsyms = .;	/* All kernel symbols */
   __kallsyms : { *(__kallsyms) }

^ permalink raw reply

* Re: Another idea for simplifying locking in kernel/module.c
From: Adam J. Richter @ 2003-01-10  9:10 UTC (permalink / raw)
  To: rusty; +Cc: linux-kernel

Rusty Russell wrote:
>In message <200301070219.SAA12905@adam.yggdrasil.com> you write:
>> 	Here is a way to replace all of the specialized "stop CPU"
>> locking code in kernel/module.c with an rw_semaphore by using
>> down_read_trylock in try_module_get() and down_write when beginning to
>> unload the module.

>And now you can't modularize netfilter modules.

	Why not?  Last time you went looking in the networking code
for an example of something that had to increment a module reference
in a context where blocking was not allowed you ended up conceding
that you example was incorrect.  If you've now found an example,
please let me know.

	I just booted my gateway machine to a kernel using my
aforemetioned patch and various netfilter modules.  I've surfed the
web, FTP'ed file and run irc through it.  It seems to be okay.
Here is the lsmod listing from it.

Module                  Size  Used by
iptable_nat            28324  1 [unsafe],
ip_conntrack           39788  2 iptable_nat,[unsafe],
ext2                   60712  0 -
pcmcia_core            55744  0 -
i810                   65816  0 -
atkbd                   6820  0 -
i8042                   8864  0 -
serio                   4564  2 atkbd,i8042,
autofs                 14992  1 -
ipt_TCPMSS              3568  1 [unsafe],
iptable_filter          2272  1 [unsafe],
ip_tables              17296  8 iptable_nat,ipt_TCPMSS,iptable_filter,[unsafe],
nfsd                  111824  1 [unsafe],
exportfs                6160  1 nfsd,
nfs                   132092  0 -
lockd                  58736  3 nfsd,nfs,[unsafe],
sunrpc                114136  4 nfsd,nfs,lockd,[unsafe],
pppoe                  14336  1 [unsafe],
pppox                   3480  1 pppoe,
af_packet              20760  2 [unsafe],
ppp_async              11296  0 -
ppp_generic            30264  5 pppoe,pppox,ppp_async,
slhc                    6576  1 ppp_generic,
ipv4                  392804  88 iptable_nat,ip_conntrack,sunrpc,af_packet,[unsafe],
unix                   23884  11 [unsafe],
sis_agp                 4224  0 -
agpgart                23248  2 sis_agp,
ohci_hcd               28400  0 -
usbcore               101108  3 ohci_hcd,
ac97_codec             12432  0 -
sis900                 16548  0 -
tulip                  52960  2 [unsafe],
crc32                   4272  2 sis900,tulip,
ext3                  112232  3 -
jbd                    65840  1 ext3,
mbcache                 7764  2 ext2,ext3,
ide_disk               17332  5 -
ide_mod               143684  1 ide_disk,[unsafe],


Adam J. Richter     __     ______________   575 Oroville Road
adam@yggdrasil.com     \ /                  Milpitas, California 95035
+1 408 309-6081         | g g d r a s i l   United States of America
                         "Free Software For The Rest Of Us."

^ permalink raw reply

* Re: [PATCH][TRIVIAL] checksum.h header fixes for 2.4
From: Rusty Russell @ 2003-01-10  7:47 UTC (permalink / raw)
  To: Eric Weigle, Marcelo Tosatti; +Cc: Linux kernel mailing list
In-Reply-To: <20030109200646.GG3329@lanl.gov>

In message <20030109200646.GG3329@lanl.gov> you write:
> All-
> 
> I'm making a loadable module that will send IP packets; and need to do IP
> checksums. Unfortunately a simple #include of checksum.h fails because that
> file does not itself include the headers required to compile correctly.
> Several of the arch-specific files are this way.
> 
> * Some files use VERIFY_READ, VERIFY_WRITE, access_ok from uaccess.h but do
> not include uaccess.h
> 
> * Some files have an IPv6 checksum with struct in6_addr, but do not include
> linux/in6.h. x86_64 just defines the structure instead of including the
> file. Either way works, but it's inconsistent. I've moved them all to the
> #include, but they could all go to the struct in6_addr way too.

Two general rules I like:
1) Never include asm/xxx when there is a linux/xxx.
2) asm/ headers shouldn't include linux/ headers.  It's
   too easy to cause insoluble loops.

I this case, I suspect #include <net/checksum.h> is what you really
want.

Rusty.
--
  Anyone who quotes me in their sig is an idiot. -- Rusty Russell.

^ permalink raw reply

* Re: [PATCH] Deprecated exec_usermodehelper, enhance call_usermodehelper
From: Rusty Russell @ 2003-01-10  8:14 UTC (permalink / raw)
  To: Marcel Holtmann
  Cc: Linus Torvalds, Linux Kernel Mailing List, akpm, Thomas Sailer,
	Jose Orlando Pereira, J.E.J.Bottomley
In-Reply-To: <1041909147.1016.12.camel@pegasus.local>

In message <1041909147.1016.12.camel@pegasus.local> you write:
> 
> --=-RFd7TJ35Vc8g4FmlT/lM
> Content-Type: text/plain
> Content-Transfer-Encoding: 7bit
> 
> Hi Rusty,
> 
> > OK.  This patch does that.  Thomas, Marcel, James?  This touches code
> > I don't use, so although the transformation is fairly trivial...
> 
> it looks ok to me, but I like to have the attached patch for the bt3c_cs
> driver. My test yesterday was successful and so I vote for inclusion,
> like Thomas does.

Done.  Linus, please apply.

Rusty.
--
  Anyone who quotes me in their sig is an idiot. -- Rusty Russell.

Name: exec_usermodehelper sucks
Author: Rusty Russell, Marcel Holtmann
Status: Tested on 2.5.54

D: Urban Widmark points out that modprobe calls system() in many
D: configurations, which drops privs since request_module() doesn't
D: doesn't set ruid and rguid.
D:
D: This gets rid of exec_usermodehelper and makes everyone use
D: call_usermodehelper, which has a new "wait" flag.

diff -urpN --exclude TAGS -X /home/rusty/devel/kernel/kernel-patches/current-dontdiff --minimal linux-2.5-bk/include/linux/kmod.h working-2.5-bk-kmod-noclean/include/linux/kmod.h
--- linux-2.5-bk/include/linux/kmod.h	2003-01-02 12:35:15.000000000 +1100
+++ working-2.5-bk-kmod-noclean/include/linux/kmod.h	2003-01-06 16:25:28.000000000 +1100
@@ -21,6 +21,7 @@
 
 #include <linux/config.h>
 #include <linux/errno.h>
+#include <linux/compiler.h>
 
 #ifdef CONFIG_KMOD
 extern int request_module(const char * name);
@@ -29,8 +30,7 @@ static inline int request_module(const c
 #endif
 
 #define try_then_request_module(x, mod) ((x) ?: request_module(mod), (x))
-extern int exec_usermodehelper(char *program_path, char *argv[], char *envp[]);
-extern int call_usermodehelper(char *path, char *argv[], char *envp[]);
+extern int call_usermodehelper(char *path, char *argv[], char *envp[], int wait);
 
 #ifdef CONFIG_HOTPLUG
 extern char hotplug_path [];
diff -urpN --exclude TAGS -X /home/rusty/devel/kernel/kernel-patches/current-dontdiff --minimal linux-2.5-bk/kernel/kmod.c working-2.5-bk-kmod-noclean/kernel/kmod.c
--- linux-2.5-bk/kernel/kmod.c	2003-01-02 12:37:03.000000000 +1100
+++ working-2.5-bk-kmod-noclean/kernel/kmod.c	2003-01-06 16:25:43.000000000 +1100
@@ -14,8 +14,10 @@
 
 	Unblock all signals when we exec a usermode process.
 	Shuu Yamaguchi <shuu@wondernetworkresources.com> December 2000
-*/
 
+	call_usermodehelper wait flag, and remove exec_usermodehelper.
+	Rusty Russell <rusty@rustcorp.com.au>  Jan 2003
+*/
 #define __KERNEL_SYSCALLS__
 
 #include <linux/config.h>
@@ -31,121 +33,11 @@
 #include <linux/workqueue.h>
 #include <linux/security.h>
 #include <linux/mount.h>
+#include <linux/kernel.h>
 #include <asm/uaccess.h>
 
 extern int max_threads, system_running;
 
-static inline void
-use_init_fs_context(void)
-{
-	struct fs_struct *our_fs, *init_fs;
-	struct dentry *root, *pwd;
-	struct vfsmount *rootmnt, *pwdmnt;
-	struct namespace *our_ns, *init_ns;
-
-	/*
-	 * Make modprobe's fs context be a copy of init's.
-	 *
-	 * We cannot use the user's fs context, because it
-	 * may have a different root than init.
-	 * Since init was created with CLONE_FS, we can grab
-	 * its fs context from "init_task".
-	 *
-	 * The fs context has to be a copy. If it is shared
-	 * with init, then any chdir() call in modprobe will
-	 * also affect init and the other threads sharing
-	 * init_task's fs context.
-	 *
-	 * We created the exec_modprobe thread without CLONE_FS,
-	 * so we can update the fields in our fs context freely.
-	 */
-
-	init_fs = init_task.fs;
-	init_ns = init_task.namespace;
-	get_namespace(init_ns);
-	our_ns = current->namespace;
-	current->namespace = init_ns;
-	put_namespace(our_ns);
-	read_lock(&init_fs->lock);
-	rootmnt = mntget(init_fs->rootmnt);
-	root = dget(init_fs->root);
-	pwdmnt = mntget(init_fs->pwdmnt);
-	pwd = dget(init_fs->pwd);
-	read_unlock(&init_fs->lock);
-
-	/* FIXME - unsafe ->fs access */
-	our_fs = current->fs;
-	our_fs->umask = init_fs->umask;
-	set_fs_root(our_fs, rootmnt, root);
-	set_fs_pwd(our_fs, pwdmnt, pwd);
-	write_lock(&our_fs->lock);
-	if (our_fs->altroot) {
-		struct vfsmount *mnt = our_fs->altrootmnt;
-		struct dentry *dentry = our_fs->altroot;
-		our_fs->altrootmnt = NULL;
-		our_fs->altroot = NULL;
-		write_unlock(&our_fs->lock);
-		dput(dentry);
-		mntput(mnt);
-	} else 
-		write_unlock(&our_fs->lock);
-	dput(root);
-	mntput(rootmnt);
-	dput(pwd);
-	mntput(pwdmnt);
-}
-
-int exec_usermodehelper(char *program_path, char *argv[], char *envp[])
-{
-	int i;
-	struct task_struct *curtask = current;
-
-	curtask->session = 1;
-	curtask->pgrp = 1;
-
-	use_init_fs_context();
-
-	/* Prevent parent user process from sending signals to child.
-	   Otherwise, if the modprobe program does not exist, it might
-	   be possible to get a user defined signal handler to execute
-	   as the super user right after the execve fails if you time
-	   the signal just right.
-	*/
-	spin_lock_irq(&curtask->sig->siglock);
-	sigemptyset(&curtask->blocked);
-	flush_signals(curtask);
-	flush_signal_handlers(curtask);
-	recalc_sigpending();
-	spin_unlock_irq(&curtask->sig->siglock);
-
-	for (i = 0; i < curtask->files->max_fds; i++ ) {
-		if (curtask->files->fd[i]) close(i);
-	}
-
-	/* Drop the "current user" thing */
-	{
-		struct user_struct *user = curtask->user;
-		curtask->user = INIT_USER;
-		atomic_inc(&INIT_USER->__count);
-		atomic_inc(&INIT_USER->processes);
-		atomic_dec(&user->processes);
-		free_uid(user);
-	}
-
-	/* Give kmod all effective privileges.. */
-	curtask->euid = curtask->fsuid = 0;
-	curtask->egid = curtask->fsgid = 0;
-	security_task_kmod_set_label();
-
-	/* Allow execve args to be in kernel space. */
-	set_fs(KERNEL_DS);
-
-	/* Go, go, go... */
-	if (execve(program_path, argv, envp) < 0)
-		return -errno;
-	return 0;
-}
-
 #ifdef CONFIG_KMOD
 
 /*
@@ -153,29 +45,6 @@ int exec_usermodehelper(char *program_pa
 */
 char modprobe_path[256] = "/sbin/modprobe";
 
-static int exec_modprobe(void * module_name)
-{
-	static char * envp[] = { "HOME=/", "TERM=linux", "PATH=/sbin:/usr/sbin:/bin:/usr/bin", NULL };
-	char *argv[] = { modprobe_path, "--", (char*)module_name, NULL };
-	int ret;
-
-	if (!system_running)
-		return -EBUSY;
-
-	ret = exec_usermodehelper(modprobe_path, argv, envp);
-	if (ret) {
-		static unsigned long last;
-		unsigned long now = jiffies;
-		if (now - last > HZ) {
-			last = now;
-			printk(KERN_DEBUG
-			       "kmod: failed to exec %s -s -k %s, errno = %d\n",
-			       modprobe_path, (char*) module_name, errno);
-		}
-	}
-	return ret;
-}
-
 /**
  * request_module - try to load a kernel module
  * @module_name: Name of module
@@ -189,24 +58,18 @@ static int exec_modprobe(void * module_n
  * If module auto-loading support is disabled then this function
  * becomes a no-operation.
  */
-int request_module(const char * module_name)
+int request_module(const char *module_name)
 {
-	pid_t pid;
-	int waitpid_result;
-	sigset_t tmpsig;
-	int i, ret;
+	unsigned int max_modprobes;
+	int ret;
+	char *argv[] = { modprobe_path, "--", (char*)module_name, NULL };
+	static char *envp[] = { "HOME=/",
+				"TERM=linux",
+				"PATH=/sbin:/usr/sbin:/bin:/usr/bin",
+				NULL };
 	static atomic_t kmod_concurrent = ATOMIC_INIT(0);
 #define MAX_KMOD_CONCURRENT 50	/* Completely arbitrary value - KAO */
 	static int kmod_loop_msg;
-	unsigned long saved_policy = current->policy;
-
-	current->policy = SCHED_NORMAL;
-	/* Don't allow request_module() when the system isn't set up */
-	if ( ! system_running ) {
-		printk(KERN_ERR "request_module[%s]: not ready\n", module_name);
-		ret = -EPERM;
-		goto out;
-	}
 
 	/* If modprobe needs a service that is in a module, we get a recursive
 	 * loop.  Limit the number of running kmod threads to max_threads/2 or
@@ -216,61 +79,44 @@ int request_module(const char * module_n
 	 * process tables to get the command line, proc_pid_cmdline is static
 	 * and it is not worth changing the proc code just to handle this case. 
 	 * KAO.
+	 *
+
+	 * "trace the ppid" is simple, but will fail if someone's
+	 * parent exits.  I think this is as good as it gets. --RR
 	 */
-	i = max_threads/2;
-	if (i > MAX_KMOD_CONCURRENT)
-		i = MAX_KMOD_CONCURRENT;
+	max_modprobes = min(max_threads/2, MAX_KMOD_CONCURRENT);
 	atomic_inc(&kmod_concurrent);
-	if (atomic_read(&kmod_concurrent) > i) {
+	if (atomic_read(&kmod_concurrent) > max_modprobes) {
+		/* We may be blaming an innocent here, but unlikely */
 		if (kmod_loop_msg++ < 5)
 			printk(KERN_ERR
-			       "kmod: runaway modprobe loop assumed and stopped\n");
+			       "request_module: runaway loop modprobe %s\n",
+			       module_name);
 		atomic_dec(&kmod_concurrent);
-		ret = -ENOMEM;
-		goto out;
+		return -ENOMEM;
 	}
 
-	pid = kernel_thread(exec_modprobe, (void*) module_name, 0);
-	if (pid < 0) {
-		printk(KERN_ERR "request_module[%s]: fork failed, errno %d\n", module_name, -pid);
-		atomic_dec(&kmod_concurrent);
-		ret = pid;
-		goto out;
+	ret = call_usermodehelper(modprobe_path, argv, envp, 1);
+	if (ret < 0) { /* Exec failed, or fork failed or something bad */
+		static unsigned long last;
+		unsigned long now = jiffies;
+		if (now - last > HZ) {
+			last = now;
+			printk(KERN_DEBUG
+			       "request_module: failed %s -- %s. error = %d\n",
+			       modprobe_path, module_name, -ret);
+		}
 	}
-
-	/* Block everything but SIGKILL/SIGSTOP */
-	spin_lock_irq(&current->sig->siglock);
-	tmpsig = current->blocked;
-	siginitsetinv(&current->blocked, sigmask(SIGKILL) | sigmask(SIGSTOP));
-	recalc_sigpending();
-	spin_unlock_irq(&current->sig->siglock);
-
-	waitpid_result = waitpid(pid, NULL, __WCLONE);
 	atomic_dec(&kmod_concurrent);
-
-	/* Allow signals again.. */
-	spin_lock_irq(&current->sig->siglock);
-	current->blocked = tmpsig;
-	recalc_sigpending();
-	spin_unlock_irq(&current->sig->siglock);
-
-	if (waitpid_result != pid) {
-		printk(KERN_ERR "request_module[%s]: waitpid(%d,...) failed, errno %d\n",
-		       module_name, pid, -waitpid_result);
-	}
-	ret = 0;
-out:
-	current->policy = saved_policy;
-	return ret;
+	return ret < 0 ? ret : 0;
 }
 #endif /* CONFIG_KMOD */
 
-
 #ifdef CONFIG_HOTPLUG
 /*
 	hotplug path is set via /proc/sys
 	invoked by hotplug-aware bus drivers,
-	with exec_usermodehelper and some thread-spawner
+	with call_usermodehelper
 
 	argv [0] = hotplug_path;
 	argv [1] = "usb", "scsi", "pci", "network", etc;
@@ -294,7 +140,8 @@ struct subprocess_info {
 	char *path;
 	char **argv;
 	char **envp;
-	pid_t retval;
+	int wait;
+	int retval;
 };
 
 /*
@@ -307,13 +154,30 @@ static int ____call_usermodehelper(void 
 
 	retval = -EPERM;
 	if (current->fs->root)
-		retval = exec_usermodehelper(sub_info->path, sub_info->argv, sub_info->envp);
+		retval = execve(program_path, argv, envp);
 
 	/* Exec failed? */
-	sub_info->retval = (pid_t)retval;
+	sub_info->retval = retval;
 	do_exit(0);
 }
 
+/* Keventd can't block, but this (a child) can. */
+static int wait_for_helper(void *data)
+{
+	struct subprocess_info *sub_info = data;
+	pid_t pid;
+
+	pid = kernel_thread(____call_usermodehelper, sub_info,
+			    CLONE_VFORK | SIGCHLD);
+	if (pid < 0)
+		sub_info->retval = pid;
+	else
+		sys_wait4(pid, (unsigned int *)&sub_info->retval, 0, NULL);
+
+	complete(sub_info->complete);
+	return 0;
+}
+
 /*
  * This is run by keventd.
  */
@@ -322,14 +186,21 @@ static void __call_usermodehelper(void *
 	struct subprocess_info *sub_info = data;
 	pid_t pid;
 
-	/*
-	 * CLONE_VFORK: wait until the usermode helper has execve'd successfully
-	 * We need the data structures to stay around until that is done.
-	 */
-	pid = kernel_thread(____call_usermodehelper, sub_info, CLONE_VFORK | SIGCHLD);
-	if (pid < 0)
+	/* CLONE_VFORK: wait until the usermode helper has execve'd
+	 * successfully We need the data structures to stay around
+	 * until that is done.  */
+	if (sub_info->wait)
+		pid = kernel_thread(wait_for_helper, sub_info,
+				    CLONE_KERNEL | SIGCHLD);
+	else
+		pid = kernel_thread(____call_usermodehelper, sub_info,
+				    CLONE_VFORK | SIGCHLD);
+
+	if (pid < 0) {
 		sub_info->retval = pid;
-	complete(sub_info->complete);
+		complete(sub_info->complete);
+	} else if (!sub_info->wait)
+		complete(sub_info->complete);
 }
 
 /**
@@ -337,15 +208,17 @@ static void __call_usermodehelper(void *
  * @path: pathname for the application
  * @argv: null-terminated argument list
  * @envp: null-terminated environment list
+ * @wait: wait for the application to finish and return status.
  *
- * Runs a user-space application.  The application is started asynchronously.  It
- * runs as a child of keventd.  It runs with full root capabilities.  keventd silently
- * reaps the child when it exits.
+ * Runs a user-space application.  The application is started
+ * asynchronously if wait is not set, and runs as a child of keventd.
+ * (ie. it runs with full root capabilities).
  *
- * Must be called from process context.  Returns zero on success, else a negative
- * error code.
+ * Must be called from process context.  Returns a negative error code
+ * if program was not execed successfully, or (exitcode << 8 + signal)
+ * of the application (0 if wait is not set).
  */
-int call_usermodehelper(char *path, char **argv, char **envp)
+int call_usermodehelper(char *path, char **argv, char **envp, int wait)
 {
 	DECLARE_COMPLETION(done);
 	struct subprocess_info sub_info = {
@@ -353,6 +226,7 @@ int call_usermodehelper(char *path, char
 		.path		= path,
 		.argv		= argv,
 		.envp		= envp,
+		.wait		= wait,
 		.retval		= 0,
 	};
 	DECLARE_WORK(work, __call_usermodehelper, &sub_info);
@@ -390,7 +264,6 @@ void dev_probe_unlock(void)
 	up(&dev_probe_sem);
 }
 
-EXPORT_SYMBOL(exec_usermodehelper);
 EXPORT_SYMBOL(call_usermodehelper);
 
 #ifdef CONFIG_KMOD
diff -urpN --exclude TAGS -X /home/rusty/devel/kernel/kernel-patches/current-dontdiff --minimal linux-2.5-bk/arch/i386/mach-voyager/voyager_thread.c working-2.5-bk-kmod-noclean/arch/i386/mach-voyager/voyager_thread.c
--- linux-2.5-bk/arch/i386/mach-voyager/voyager_thread.c	2003-01-02 12:32:34.000000000 +1100
+++ working-2.5-bk-kmod-noclean/arch/i386/mach-voyager/voyager_thread.c	2003-01-06 16:24:54.000000000 +1100
@@ -57,7 +57,7 @@ voyager_thread_start(void)
 }
 
 static int
-execute_helper(void *string)
+execute(const char *string)
 {
 	int ret;
 
@@ -74,23 +74,14 @@ execute_helper(void *string)
 		NULL,
 	};
 
-	if((ret = exec_usermodehelper(argv[0], argv, envp)) < 0) {
-		printk(KERN_ERR "Voyager failed to execute \"%s\"\n",
-		       (char *)string);
+	if ((ret = call_usermodehelper(argv[0], argv, envp, 1)) != 0) {
+		printk(KERN_ERR "Voyager failed to run \"%s\": %i\n",
+		       string, ret);
 	}
 	return ret;
 }
 
 static void
-execute(char *string)
-{
-	if(kernel_thread(execute_helper, (void *)string, CLONE_VFORK | SIGCHLD) < 0) {
-		printk(KERN_ERR "Voyager failed to fork before exec of \"%s\"\n",
-		       string);
-	}
-}
-
-static void
 check_from_kernel(void)
 {
 	if(voyager_status.switch_off) {
diff -urpN --exclude TAGS -X /home/rusty/devel/kernel/kernel-patches/current-dontdiff --minimal linux-2.5-bk/drivers/acpi/thermal.c working-2.5-bk-kmod-noclean/drivers/acpi/thermal.c
--- linux-2.5-bk/drivers/acpi/thermal.c	2003-01-02 12:47:01.000000000 +1100
+++ working-2.5-bk-kmod-noclean/drivers/acpi/thermal.c	2003-01-06 15:43:53.000000000 +1100
@@ -431,7 +431,7 @@ acpi_thermal_call_usermode (
 	envp[0] = "HOME=/";
 	envp[1] = "PATH=/sbin:/bin:/usr/sbin:/usr/bin";
 	
-	call_usermodehelper(argv[0], argv, envp);
+	call_usermodehelper(argv[0], argv, envp, 0);
 
 	return_VALUE(0);
 }
diff -urpN --exclude TAGS -X /home/rusty/devel/kernel/kernel-patches/current-dontdiff --minimal linux-2.5-bk/drivers/base/hotplug.c working-2.5-bk-kmod-noclean/drivers/base/hotplug.c
--- linux-2.5-bk/drivers/base/hotplug.c	2003-01-02 12:46:16.000000000 +1100
+++ working-2.5-bk-kmod-noclean/drivers/base/hotplug.c	2003-01-06 15:43:53.000000000 +1100
@@ -114,7 +114,7 @@ static int do_hotplug (struct device *de
 
 	pr_debug ("%s: %s %s %s %s %s %s\n", __FUNCTION__, argv [0], argv[1],
 		  envp[0], envp[1], envp[2], envp[3]);
-	retval = call_usermodehelper (argv [0], argv, envp);
+	retval = call_usermodehelper (argv [0], argv, envp, 0);
 	if (retval)
 		pr_debug ("%s - call_usermodehelper returned %d\n",
 			  __FUNCTION__, retval);
diff -urN linux-2.5.54/drivers/bluetooth/bt3c_cs.c linux-2.5.54-mh/drivers/bluetooth/bt3c_cs.c
--- linux-2.5.54/drivers/bluetooth/bt3c_cs.c	Thu Jan  2 04:23:16 2003
+++ linux-2.5.54-mh/drivers/bluetooth/bt3c_cs.c	Mon Jan  6 22:25:30 2003
@@ -24,18 +24,14 @@
 #include <linux/config.h>
 #include <linux/module.h>
 
-#define __KERNEL_SYSCALLS__
-
 #include <linux/kernel.h>
 #include <linux/kmod.h>
 #include <linux/init.h>
 #include <linux/slab.h>
 #include <linux/types.h>
 #include <linux/sched.h>
-#include <linux/delay.h>
 #include <linux/timer.h>
 #include <linux/errno.h>
-#include <linux/unistd.h>
 #include <linux/ptrace.h>
 #include <linux/ioport.h>
 #include <linux/spinlock.h>
@@ -405,7 +401,6 @@
 
 
 
-
 /* ======================== HCI interface ======================== */
 
 
@@ -489,65 +484,23 @@
 
 
 #define FW_LOADER  "/sbin/bluefw"
-static int errno;
-
-
-static int bt3c_fw_loader_exec(void *dev)
-{
-	char *argv[] = { FW_LOADER, "pccard", dev, NULL };
-	char *envp[] = { "HOME=/", "TERM=linux", "PATH=/sbin:/usr/sbin:/bin:/usr/bin", NULL };
-	int err;
-
-	err = exec_usermodehelper(FW_LOADER, argv, envp);
-	if (err)
-		printk(KERN_WARNING "bt3c_cs: Failed to exec \"%s pccard %s\".\n", FW_LOADER, (char *)dev);
-
-	return err;
-}
 
 
 static int bt3c_firmware_load(bt3c_info_t *info)
 {
-	sigset_t tmpsig;
 	char dev[16];
-	pid_t pid;
-	int result;
+	int err;
 
-	/* Check if root fs is mounted */
-	if (!current->fs->root) {
-		printk(KERN_WARNING "bt3c_cs: Root filesystem is not mounted.\n");
-		return -EPERM;
-	}
+	char *argv[] = { FW_LOADER, "pccard", dev, NULL };
+	char *envp[] = { "HOME=/", "TERM=linux", "PATH=/sbin:/usr/sbin:/bin:/usr/bin", NULL };
 
 	sprintf(dev, "%04x", info->link.io.BasePort1);
 
-	pid = kernel_thread(bt3c_fw_loader_exec, (void *)dev, 0);
-	if (pid < 0) {
-		printk(KERN_WARNING "bt3c_cs: Forking of kernel thread failed (errno=%d).\n", -pid);
-		return pid;
-	}
-
-	/* Block signals, everything but SIGKILL/SIGSTOP */
-	spin_lock_irq(&current->sig->siglock);
-	tmpsig = current->blocked;
-	siginitsetinv(&current->blocked, sigmask(SIGKILL) | sigmask(SIGSTOP));
-	recalc_sigpending();
-	spin_unlock_irq(&current->sig->siglock);
-
-	result = waitpid(pid, NULL, __WCLONE);
-
-	/* Allow signals again */
-	spin_lock_irq(&current->sig->siglock);
-	current->blocked = tmpsig;
-	recalc_sigpending();
-	spin_unlock_irq(&current->sig->siglock);
-
-	if (result != pid) {
-		printk(KERN_WARNING "bt3c_cs: Waiting for pid %d failed (errno=%d).\n", pid, -result);
-		return -result;
-	}
+	err = call_usermodehelper(FW_LOADER, argv, envp, 1);
+	if (err)
+		printk(KERN_WARNING "bt3c_cs: Failed to run \"%s pccard %s\" (errno=%d).\n", FW_LOADER, dev, err);
 
-	return 0;
+	return err;
 }
 
 
diff -urpN --exclude TAGS -X /home/rusty/devel/kernel/kernel-patches/current-dontdiff --minimal linux-2.5-bk/drivers/ieee1394/nodemgr.c working-2.5-bk-kmod-noclean/drivers/ieee1394/nodemgr.c
--- linux-2.5-bk/drivers/ieee1394/nodemgr.c	2003-01-02 12:46:17.000000000 +1100
+++ working-2.5-bk-kmod-noclean/drivers/ieee1394/nodemgr.c	2003-01-06 15:43:53.000000000 +1100
@@ -786,7 +786,7 @@ static void nodemgr_call_policy(char *ve
 #ifdef CONFIG_IEEE1394_VERBOSEDEBUG
 	HPSB_DEBUG("NodeMgr: %s %s %016Lx", argv[0], verb, (long long unsigned)ud->ne->guid);
 #endif
-	value = call_usermodehelper(argv[0], argv, envp);
+	value = call_usermodehelper(argv[0], argv, envp, 0);
 	kfree(buf);
 	kfree(envp);
 	if (value != 0)
diff -urpN --exclude TAGS -X /home/rusty/devel/kernel/kernel-patches/current-dontdiff --minimal linux-2.5-bk/drivers/input/input.c working-2.5-bk-kmod-noclean/drivers/input/input.c
--- linux-2.5-bk/drivers/input/input.c	2003-01-02 12:30:27.000000000 +1100
+++ working-2.5-bk-kmod-noclean/drivers/input/input.c	2003-01-06 15:43:54.000000000 +1100
@@ -383,7 +383,7 @@ static void input_call_hotplug(char *ver
 		argv[0], argv[1], envp[0], envp[1], envp[2], envp[3], envp[4]);
 #endif
 
-	value = call_usermodehelper(argv [0], argv, envp);
+	value = call_usermodehelper(argv [0], argv, envp, 0);
 
 	kfree(buf);
 	kfree(envp);
diff -urpN --exclude TAGS -X /home/rusty/devel/kernel/kernel-patches/current-dontdiff --minimal linux-2.5-bk/drivers/isdn/hardware/eicon/divasmain.c working-2.5-bk-kmod-noclean/drivers/isdn/hardware/eicon/divasmain.c
--- linux-2.5-bk/drivers/isdn/hardware/eicon/divasmain.c	2003-01-02 12:45:18.000000000 +1100
+++ working-2.5-bk-kmod-noclean/drivers/isdn/hardware/eicon/divasmain.c	2003-01-06 15:43:54.000000000 +1100
@@ -263,7 +263,7 @@ static void diva_adapter_trapped(void *c
 		pdpc->card_failed = 0;
 		argv[2] = &adapter[0];
 
-		ret = call_usermodehelper(argv[0], argv, envp);
+		ret = call_usermodehelper(argv[0], argv, envp, 0);
 
 		if (ret) {
 			printk(KERN_ERR
diff -urpN --exclude TAGS -X /home/rusty/devel/kernel/kernel-patches/current-dontdiff --minimal linux-2.5-bk/drivers/net/hamradio/baycom_epp.c working-2.5-bk-kmod-noclean/drivers/net/hamradio/baycom_epp.c
--- linux-2.5-bk/drivers/net/hamradio/baycom_epp.c	2003-01-02 14:47:58.000000000 +1100
+++ working-2.5-bk-kmod-noclean/drivers/net/hamradio/baycom_epp.c	2003-01-06 16:19:12.000000000 +1100
@@ -369,15 +369,14 @@ static char eppconfig_path[256] = "/usr/
 
 static char *envp[] = { "HOME=/", "TERM=linux", "PATH=/usr/bin:/bin", NULL };
 
-static int errno;
-
-static int exec_eppfpga(void *b)
+/* eppconfig: called during ifconfig up to configure the modem */
+static int eppconfig(struct baycom_state *bc)
 {
-	struct baycom_state *bc = (struct baycom_state *)b;
 	char modearg[256];
 	char portarg[16];
-        char *argv[] = { eppconfig_path, "-s", "-p", portarg, "-m", modearg, NULL};
-        int i;
+        char *argv[] = { eppconfig_path, "-s", "-p", portarg, "-m", modearg,
+			 NULL };
+        int ret;
 
 	/* set up arguments */
 	sprintf(modearg, "%sclk,%smodem,fclk=%d,bps=%d,divider=%d%s,extstat",
@@ -388,39 +387,7 @@ static int exec_eppfpga(void *b)
 	sprintf(portarg, "%ld", bc->pdev->port->base);
 	printk(KERN_DEBUG "%s: %s -s -p %s -m %s\n", bc_drvname, eppconfig_path, portarg, modearg);
 
-	i = exec_usermodehelper(eppconfig_path, argv, envp);
-	if (i < 0) {
-                printk(KERN_ERR "%s: failed to exec %s -s -p %s -m %s, errno = %d\n",
-                       bc_drvname, eppconfig_path, portarg, modearg, i);
-                return i;
-        }
-        return 0;
-}
-
-
-/* eppconfig: called during ifconfig up to configure the modem */
-
-static int eppconfig(struct baycom_state *bc)
-{
-        int i, pid, r;
-	mm_segment_t fs;
-
-        pid = kernel_thread(exec_eppfpga, bc, CLONE_FS);
-        if (pid < 0) {
-                printk(KERN_ERR "%s: fork failed, errno %d\n", bc_drvname, -pid);
-                return pid;
-        }
-	fs = get_fs();
-        set_fs(KERNEL_DS);      /* Allow i to be in kernel space. */
-	r = waitpid(pid, &i, __WCLONE);
-	set_fs(fs);
-        if (r != pid) {
-                printk(KERN_ERR "%s: waitpid(%d) failed, returning %d\n",
-		       bc_drvname, pid, r);
-		return -1;
-        }
-	printk(KERN_DEBUG "%s: eppfpga returned %d\n", bc_drvname, i);
-	return i;
+	return call_usermodehelper(eppconfig_path, argv, envp, 1);
 }
 
 /* ---------------------------------------------------------------------- */
diff -urpN --exclude TAGS -X /home/rusty/devel/kernel/kernel-patches/current-dontdiff --minimal linux-2.5-bk/drivers/pnp/pnpbios/core.c working-2.5-bk-kmod-noclean/drivers/pnp/pnpbios/core.c
--- linux-2.5-bk/drivers/pnp/pnpbios/core.c	2003-01-02 14:47:59.000000000 +1100
+++ working-2.5-bk-kmod-noclean/drivers/pnp/pnpbios/core.c	2003-01-06 15:43:54.000000000 +1100
@@ -602,7 +602,7 @@ static int pnp_dock_event(int dock, stru
 		info->location_id, info->serial, info->capabilities);
 	envp[i] = 0;
 	
-	value = call_usermodehelper (argv [0], argv, envp);
+	value = call_usermodehelper (argv [0], argv, envp, 0);
 	kfree (buf);
 	kfree (envp);
 	return 0;
diff -urpN --exclude TAGS -X /home/rusty/devel/kernel/kernel-patches/current-dontdiff --minimal linux-2.5-bk/net/bluetooth/hci_core.c working-2.5-bk-kmod-noclean/net/bluetooth/hci_core.c
--- linux-2.5-bk/net/bluetooth/hci_core.c	2003-01-02 12:33:56.000000000 +1100
+++ working-2.5-bk-kmod-noclean/net/bluetooth/hci_core.c	2003-01-06 15:43:54.000000000 +1100
@@ -114,7 +114,7 @@ static int hci_run_hotplug(char *dev, ch
 	envp[3] = astr;
 	envp[4] = NULL;
 	
-	return call_usermodehelper(argv[0], argv, envp);
+	return call_usermodehelper(argv[0], argv, envp, 0);
 }
 #else
 #define hci_run_hotplug(A...)
diff -urpN --exclude TAGS -X /home/rusty/devel/kernel/kernel-patches/current-dontdiff --minimal linux-2.5-bk/net/core/dev.c working-2.5-bk-kmod-noclean/net/core/dev.c
--- linux-2.5-bk/net/core/dev.c	2003-01-02 14:48:01.000000000 +1100
+++ working-2.5-bk-kmod-noclean/net/core/dev.c	2003-01-06 15:43:54.000000000 +1100
@@ -2918,6 +2918,6 @@ static int net_run_sbin_hotplug(struct n
 	envp [i++] = action_str;
 	envp [i] = 0;
 
-	return call_usermodehelper(argv [0], argv, envp);
+	return call_usermodehelper(argv [0], argv, envp, 0);
 }
 #endif

^ permalink raw reply

* Re: Kernel Oops with HIMEM+VM in 2.4.19,20
From: Denis Vlasenko @ 2003-01-10  9:08 UTC (permalink / raw)
  To: Anthony Lau, linux-kernel
In-Reply-To: <20030110083714.GA702@kimagure>

On 10 January 2003 10:37, Anthony Lau wrote:
> Hello,
>
> I am getting reproducible kernel oops and random segmentation
> faults whenever the kernel starts using VM. Without any VM pages
> being used, the system is stable.
>
> I have tested kernels compiled with and without HIMEM support
> (all other kernel config options identical). Without HIMEM 4GB
> support, the system is stable for weeks. With HIMEM 4GB support,
> the system starts oops'ing and seg. faulting when VM starts
> being used.

You mean when your system starts to swap? Details?
(How much/how heavy it swaps before oops? vmstat output?)

> My system info:
>
> 1.5GB physical RAM (MemTest86 run for 2 times, no errors)
> 2.0GB VM on a partition
> Aopen AX34u with Via Apollo Pro 133T chipset
>
> Sample Oops from logs:
[snipped]
>
> Because of the symptoms, I think that there could be some
> incompatibility between Himem and the VM subsystem. Of course
> I may have just configured my kernel incorrectly.
>
> Any help is appreciated and I will gladly supply more logs
> if I knew which ones would be useful.

Kernel version and .config?
Arrange klogd to be started with -x. Process oopses with ksymoops.
Then contact VM people (listed in no particular order):

William Irwin <wli@holomorphy.com> [02 jul 2002]
	Send bug reports and/or feature requests related to many tasks,
	rmap, space consumption, or allocators to me. I'm involved in
	* rmap
	* memory allocators
	* reducing space consumed by data structures (e.g. struct page)
	* issues arising in workloads with many tasks
	* kernel janitoring
	See also:
	Rik van Riel <riel@surriel.com>
	Andrea Arcangeli <andrea@suse.de>
	Martin Bligh <Martin.Bligh@us.ibm.com>
	Andrew Morton <akpm@digeo.com>

Andrea Arcangeli <andrea@suse.de> [28 mar 2002]
	Send VM related bug reports and patches to me.
	I'm especially interested in VM issues with:
	* lots of RAM and CPUs
	* NUMA
	* heavy swap scenarios
	* performance of I/O intensive workloads (in particular
	  with lots of async buffer flushing involved)
	See also Martin J. Bligh <Martin.Bligh@us.ibm.com> entry
	Mail also:
	Arjan van de Ven <arjanv@redhat.com>

Martin J. Bligh <Martin.Bligh@us.ibm.com> [28 mar 2002]
	I'm interested in VM issues with lots (>4G for i386)
	of RAM, lots of CPUs, NUMA

Rik van Riel <riel@conectiva.com.br> [07 feb 2002]
	Send me VM related stuff, please CC to linux-mm@kvack.org
--
vda

^ permalink raw reply

* [LARTC] new FAQ: "HTB: mindelay=500, report it please"
From: devik @ 2003-01-10  9:11 UTC (permalink / raw)
  To: lartc

added to http://luxik.cdi.cz/~devik/qos/htb/

FAQ section.

-------------------------------
    Martin Devera aka devik
Linux kernel QoS/HTB maintainer
  http://luxik.cdi.cz/~devik/

_______________________________________________
LARTC mailing list / LARTC@mailman.ds9a.nl
http://mailman.ds9a.nl/mailman/listinfo/lartc HOWTO: http://lartc.org/

^ permalink raw reply

* Re: VIA8233/8235 testers wanted
From: Joachim Blaabjerg @ 2003-01-10  9:13 UTC (permalink / raw)
  To: Takashi Iwai; +Cc: alsa-devel
In-Reply-To: <s5h3co18knt.wl@alsa2.suse.de>

On Friday 10 January 2003 09:37, Takashi Iwai wrote:
> At Fri, 10 Jan 2003 09:17:28 +0100,
>
> Joachim Blaabjerg wrote:
> > On Thursday 09 January 2003 18:01, Takashi Iwai wrote:
> > > Hi,
> > >
> > > if someone has VIA8233, VIA8233A, VIA8233C or VIA8235 chipset, could
> > > you help the testing of the new driver?
> > > the new driver code is found at
> > >
> > > 	http://www.alsa-project.org/~iwai/via82xx.c
> > > [...]
> >
> > I'm getting an unresolved symbol: snd_pcm_substream_sgbuf, and a
> > recursive grep in the alsa-driver sources show only one match in, you
> > guessed it, snd-via82xx.c.
>
> please try the very latest cvs version.
> (the best is to get the source via cvs, not cvs-snapshot).
> there are many changes recently.

Ah yes, thanks.

It compiles and loads nicely, but there are some problems using it. I tried 
starting UT2003 while XMMS was playing, and there was indeed sound from both, 
but the UT2003 sound was quite choppy. When I exited UT2003, the last sound 
it played is still there, and plays over and over again (ut2003-bin hangs). I 
get the following warning from ALSA:

ALSA lib pcm_hw.c:398:(snd_pcm_hw_prepare) SNDRV_PCM_IOCTL_PREPARE failed: 
Device or resource busy

I figured UT2003 and its sound system was probably rather weird, so I tried 
again with mpg231 and mplayer, which worked beautifully. Thanks! :)

Btw, this is a VT-8235 sound chip.


-------------------------------------------------------
This SF.NET email is sponsored by:
SourceForge Enterprise Edition + IBM + LinuxWorld = Something 2 See!
http://www.vasoftware.com

^ permalink raw reply

* Re: ksoftirqd_CPU0 causing severe latency
From: Denis Vlasenko @ 2003-01-10  9:16 UTC (permalink / raw)
  To: Jim Roland, linux-kernel
In-Reply-To: <004d01c2b873$44156d80$2002a8c0@jimws>

On 10 January 2003 08:41, Jim Roland wrote:
> I am running a RH7.2 router with kernel 2.4.18-19.7.x and upgraded
> from 2.4.18-17 in hopes this would fix the problem, but it hasn't.
>
> The problem I am experiencing is that after a while, the system
> begins to lag badly, and running "ps -ax" writes to a SSH console
> like a terminal running at 14.4kbps.  This only seems to have
> occurred after the box started procesing a network load.
>
> The box is a router, with a Supermicro (model=?) motherboard with
> embedded Intel EEpro/100 NICs using the eepro100 module.  This box is
> also serving as an iptables filter for the network as well.  It's
> processing approximately 60Mbps sustained traffic outbound, and about
> 10-15Mbps traffic inbound.

That's not a small figure :)

> The box also lags SEVERLY when I'm trying to use the state matching
> in the kernel (as module), lagging badly when ip_conntrack is loaded.
>
> In contrast, I am running the same OS and kernel versions on another
> box (same modules) and am not having the same problem (it is only
> handling about 5Mbps sustained out, and 1Mbps sustained inbound).
>
> I need HELP!

Profile your box. (We need to know where it spends most of CPU time).
Send profile data to the list.

Also collect interrupt rate info.

You may also look into Intel EEpro/100 driver's interrupt handler code.

Does is lag that bad without iptables?
--
vda

^ permalink raw reply

* Re: NFS as a Cluster File System.
From: Brian Tinsley @ 2003-01-09 21:11 UTC (permalink / raw)
  To: Lorn Kay; +Cc: nfs, linux-ha
In-Reply-To: <F112Sbh29cM3oryKFRJ0001248d@hotmail.com>

Lorn Kay wrote:

>
> Is NFS a viable CFS? (I'm cross posting this due to a discussion on 
> the the linux-ha list recently.) 

Since there is not a really good cluster filesystem for Linux that is 
not either "half baked" (IMHO - I'm probably going to get smacked over 
that statement!) or cost an arm and a leg, this is exactly the route we 
have taken.

>     The NFS server is a high-quality dedicated machine (Net App, EMC, 
> etc.) 

We've had great success with just using SMP Linux servers. We do have 
one EMC IP4700 in production, and it's a nice system, but I prefer the 
Linux based alternative.

>     Linux clients can use TCP instead of UDP. 

Although I haven't had problems with this in our lab, I believe the NFS 
authors still consider this experimental.


-- 

-[========================]-
-[      Brian Tinsley     ]-
-[ Chief Systems Engineer ]-
-[        Emageon         ]-
-[========================]-






-------------------------------------------------------
This SF.NET email is sponsored by:
SourceForge Enterprise Edition + IBM + LinuxWorld = Something 2 See!
http://www.vasoftware.com
_______________________________________________
NFS maillist  -  NFS@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/nfs

^ permalink raw reply

* [Bug fix] delete kobject from list when kobject_add() fail
From: louis.zhuang @ 2003-01-10  9:30 UTC (permalink / raw)
  To: mochel; +Cc: linux-kernel

Dear Mochel,
	I found there were still issues in failed kobject_add(). For example,
if you try to register two kobjects with the same name into
subsystem, the second registration will fail but the second will keep in
the list of subsystem. Below patch might fix the bug. Please  apply.

Yours truly,
Louis Zhuang
---------------
Fault Injection Test Harness Project
BK tree: http://fault-injection.bkbits.net/linux-2.5
Home Page: http://sf.net/projects/fault-injection

You can import this changeset into BK by piping this whole message to:
'| bk receive [path to repository]' or apply the patch as usual.

===================================================================


ChangeSet@1.944, 2003-01-10 16:45:01+08:00, louis@hawk.sh.intel.com
  delete kobject from list when kobject_add() fail.
    caller have no way to clean the list, so
    kobjec_add() should remove kobject from list.


 kobject.c |   26 ++++++++++++++++----------
 1 files changed, 16 insertions(+), 10 deletions(-)


diff -Nru a/lib/kobject.c b/lib/kobject.c
--- a/lib/kobject.c	Fri Jan 10 16:48:01 2003
+++ b/lib/kobject.c	Fri Jan 10 16:48:01 2003
@@ -66,6 +66,18 @@
 	return container_of(entry,struct kobject,entry);
 }

+static inline void __kobject_del(struct kobject * kobj)
+{
+	if (kobj->kset) {
+		down_write(&kobj->kset->subsys->rwsem);
+		list_del_init(&kobj->entry);
+		up_write(&kobj->kset->subsys->rwsem);
+	}
+	if (kobj->parent)
+		kobject_put(kobj->parent);
+	kobject_put(kobj);
+}
+

 /**
  *	kobject_init - initialize object.
@@ -109,8 +121,8 @@
 		up_write(&kobj->kset->subsys->rwsem);
 	}
 	error = create_dir(kobj);
-	if (error && parent)
-		kobject_put(parent);
+	if (error)
+		__kobject_del(kobj);
 	return error;
 }

@@ -132,6 +144,7 @@
 	return error;
 }

+
 /**
  *	kobject_del - unlink kobject from hierarchy.
  * 	@kobj:	object.
@@ -140,14 +153,7 @@
 void kobject_del(struct kobject * kobj)
 {
 	sysfs_remove_dir(kobj);
-	if (kobj->kset) {
-		down_write(&kobj->kset->subsys->rwsem);
-		list_del_init(&kobj->entry);
-		up_write(&kobj->kset->subsys->rwsem);
-	}
-	if (kobj->parent)
-		kobject_put(kobj->parent);
-	kobject_put(kobj);
+	__kobject_del(kobj);
 }

 /**

===================================================================


This BitKeeper patch contains the following changesets:
1.944
## Wrapped with gzip_uu ##


begin 664 bkpatch20054
M'XL(`,&('CX``^5576_3,!1]KG_%E2:AEI'T.H[;-%.KP89@`HEI:&](E9<X
M2V@:5[;3JB+[[[CINE$V&*"]D41*['ONN5\GR0%<&JGC3JGJPI`#>*^,C3NY
M6,U\D_M%967I)VKN+!=*.4L_5W/9;]']P.>>69O,$&<^%S;)82FUB3O49W<[
M=KV0<>?B[;O+CZ\O"!F/X207U;7\+"V,Q\0JO11E:HZ%S4M5^5:+RLRE%9NH
MS1VT"1`#=W(Z9,@'#1U@.&P2FE(J0BI3#,)H$-ZS+61U71>_I6-(<10P&@78
MA!PQ(J=`_5$8`K(^TCY%H(,XY#'20XQB1&BK/G[0&SBDX"%Y`\];RPE)()6E
MM!)FZNJK3"QDVD4K"V-AE<MJMST5:=KM02:*TG<^`(DH2ZDA%TL)E8*56+O4
M("FEJ,#FLF5X!49!B]ZRW)*87-5E"EK.U?*1N#X`^0`A'[K\SN\'2;R_/`A!
M@60"<Y7DLCQ6)BU]I:^;LKCJWP;UD[9/U,T)*1UAV"`?<=:P(,MH@$)@%&'*
MLU]-Y2&7&SAU8PX9QX;3$0];->[!-HI\AIR>YMB(;X@L0#9RXF,CUHJ/\GWM
ML9CCD]H;@$?_)_5M1_<)/+UJ+Z>F\_TI_H,<SP81T(`8*VR10%&5125AJ8H4
MIM-=H:X=76-U[5+:I?:R?>J1;Z139-#=++S)S$C;`[?52=6JFJYT867WQ;W-
MFYCZRGTWO8E>&3GO'3GDIKQ-@&E1%78'EI75Z]9<+_Z(YN;'-!9".X(>./==
M!8O:[AN=S\^VWE&'W)`OY)32``)R1BESMY97:JUTS_'M]V3KY9`L!-IZA@PB
AM^9.Q>1Q\-WOP;TGR<S4\[$(Y"#-$D:^`R/H1DJ2!@``
`
end




^ permalink raw reply

* Re: 2.4.20 stability issues
From: Brian May @ 2003-01-10  9:24 UTC (permalink / raw)
  To: Russell Coker; +Cc: selinux
In-Reply-To: <200301100957.07668.russell@coker.com.au>

On Fri, Jan 10, 2003 at 09:57:07AM +0100, Russell Coker wrote:
> rjc@lyta:/tmp$ uname -a
> Linux lyta 2.4.20-se-r #1 Mon Dec 16 19:48:46 CET 2002 i686 unknown unknown 
> GNU/Linux
> rjc@lyta:/tmp$ uptime
>  09:52:14 up 4 days,  9:11,  1 user,  load average: 0.88, 1.33, 0.90
> rjc@lyta:/tmp$

Interesting; maybe it is one of my patches.

(it has happened before, a bug for instance in the ACL patch would crash
the computer even when just fscking the filesystem).

Although 4 days may not be long enough to reproduce the bug, not
sure on this.

It was also sometime last year that my Thinkpad totally died (after
random crashes), and needed a new motherboard, I am keeping my fingers
crossed that it isn't the same problem.
--
Brian May <bam@snoopy.apana.org.au>

--
This message was distributed to subscribers of the selinux mailing list.
If you no longer wish to subscribe, send mail to majordomo@tycho.nsa.gov with
the words "unsubscribe selinux" without quotes as the message.

^ permalink raw reply

* Re: VIA8233/8235 testers wanted
From: Takashi Iwai @ 2003-01-10  9:27 UTC (permalink / raw)
  To: Joachim Blaabjerg; +Cc: alsa-devel
In-Reply-To: <200301101013.58151.styx@gentoo.org>

At Fri, 10 Jan 2003 10:13:58 +0100,
Joachim Blaabjerg wrote:
> 
> On Friday 10 January 2003 09:37, Takashi Iwai wrote:
> > At Fri, 10 Jan 2003 09:17:28 +0100,
> >
> > Joachim Blaabjerg wrote:
> > > On Thursday 09 January 2003 18:01, Takashi Iwai wrote:
> > > > Hi,
> > > >
> > > > if someone has VIA8233, VIA8233A, VIA8233C or VIA8235 chipset, could
> > > > you help the testing of the new driver?
> > > > the new driver code is found at
> > > >
> > > > 	http://www.alsa-project.org/~iwai/via82xx.c
> > > > [...]
> > >
> > > I'm getting an unresolved symbol: snd_pcm_substream_sgbuf, and a
> > > recursive grep in the alsa-driver sources show only one match in, you
> > > guessed it, snd-via82xx.c.
> >
> > please try the very latest cvs version.
> > (the best is to get the source via cvs, not cvs-snapshot).
> > there are many changes recently.
> 
> Ah yes, thanks.
> 
> It compiles and loads nicely, but there are some problems using it. I tried 
> starting UT2003 while XMMS was playing, and there was indeed sound from both, 
> but the UT2003 sound was quite choppy. When I exited UT2003, the last sound 
> it played is still there, and plays over and over again (ut2003-bin hangs). I 
> get the following warning from ALSA:
> 
> ALSA lib pcm_hw.c:398:(snd_pcm_hw_prepare) SNDRV_PCM_IOCTL_PREPARE failed: 
> Device or resource busy
> 
> I figured UT2003 and its sound system was probably rather weird, so I tried 
> again with mpg231 and mplayer, which worked beautifully. Thanks! :)
> 
> Btw, this is a VT-8235 sound chip.


there are small bugs regarding the calculation of hw-pointer.
i hope now this choppy sounds fixed.  could you try to grab via82xx.c
again from the same url?

the error shown above is perhaps because the applications tried to set
up the different sample rates at the same time.
since the sample rate is configured on ac97 codec, the sample rate
must be identical among all applications playing simultaneously.

also, there is the secondary pcm device (hw:0,1) for the multi-channel
playback, i.e. 4 and 6-channel playback.  if your board has rear or
center/lfe jacks, please give a try.
i guess this is exclusive with the first device, but not sure.  please
check whether both twos can play at the same time.

ah, one more thing.  via8235 has the secondary capture device.  it's
assigned to hw:0,1.  it would be helpful if you can check both hw:0,0
and hw:0,1 can capture properly, or whether only one of them works.


ciao,

Takashi


-------------------------------------------------------
This SF.NET email is sponsored by:
SourceForge Enterprise Edition + IBM + LinuxWorld = Something 2 See!
http://www.vasoftware.com

^ permalink raw reply


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.