public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
* [PATCH] PART1: Proposed init & module changes for 2.5
@ 2001-09-23  6:37 Rusty Russell
  2001-09-23  7:12 ` David Cinege
  2001-09-23 10:43 ` Ingo Oeser
  0 siblings, 2 replies; 13+ messages in thread
From: Rusty Russell @ 2001-09-23  6:37 UTC (permalink / raw)
  To: linux-kernel

Highlights:
	o Unified boot/module parameters, with type checking.
		Using PARAM(xxx, type, perms) and family.

	o Simpler in-kernel module loading
		insmod can now be written in ~20 lines.

	o Nicer internal module interface
		request_module("%s", foo)
		request_module_start/stop wrappers
		module_get()/module_put(), symbol_get()/symbol_put()

	o Warm fuzzy bleeding edge feel

Todo:
	(1) Incorporate non-ppc architectures (x86, sparc, sparc64,
	    ppc64 already written, not in patch).

	(2) Convert parts of the kernel *I* don't use.

	(3) Use kbuild 2.5, so in-kernel params don't all get called
	    "unknown.xxx".

	(4) Update documentation.

	(5) CONFIG_MODVERSIONS replacement and check for kernel version.

	(6) Patch in proc/sys, so param entries can appear there
	    (this is what the final arg to PARAM is for).

	(7) Write more sophisticated modprobe:
		o /etc/modules.conf
		o Fallback to old modutils if old system.
		o --force to override MODVERSIONS and kernel version.
		o Save parameters from /proc on unloading.

	(8) rmmod should not remove if busy (unless rmmod -f).

	(9) Convert everyone to new safe module insert usage.

Get it from:
	http://netfilter.samba.org/diary/module-init-patch-001.bz2
	http://netfilter.filewatcher.org/diary/module-init-patch-001.bz2
	http://netfilter.gnumonks.org/diary/module-init-patch-001.bz2
(46885 bytes)

And v. v. simple insmod/rmmod/modprobe from:
	http://netfilter.samba.org/diary/module-init-tools-001.bz2
	http://netfilter.filewatcher.org/diary/module-init-tools-001.bz2
	http://netfilter.gnumonks.org/diary/module-init-tools-001.bz2
(33181 bytes)

HACKERS QUICKREF:

OLD:	int parse_foo(char *s) { ... return 1; }
	__setup("foo=", parse_foo);
NEW:	int parse_foo(char *s, struct kernel_param *kp) { ... return 0; }
	PARAM_CALL(foo, parse_foo, NULL);
COMMENTS:
	This will match "foo=" only.  kb->name == "foo", kp->arg ==
	third arg of PARAM_CALL.

OLD:	MODULE_PARM("foo", &foo, "i")
NEW:	PARAM(foo, int, S_IRUGO);
COMMENTS:
	foo must be in scope (and in this case, of type int) or the
	compiler will catch it.
	S_IRUGO means that it will be accessible through proc (use 000
	if this is not useful, or maybe S_IWUSR if root can change it
	at any time).
	Use PARAM_NAMED to give a different name, PARAM_ARRAY for array.

OLD:	inter_module_*
NEW:	EXPORT_SYMBOL, symbol_get(foo) & symbol_put(foo)
COMMENTS:
	These are now typesafe, so foo declaration must be in scope.

OLD:	if (foo->owner) __MOD_INC_USE_COUNT(foo->owner);
NEW:	module_get(foo->owner);

OLD:	module_init(initfn)
NEW:	init_and_startcall(initfn, startfn);
COMMENTS:
	Please use a semicolon at the end.  Modulable code should
	transition to a two-stage init (initfn sets everything up
	and may fail, and startfn which exposes the module to the rest
	of the kernel and can't fail).  Some modules only need
	initfn or startfn, in which case use initcall() or startcall().

OLD:	if (try_inc_mod_count(foo->owner))
NEW:	module_get(foo->owner)

OLD:	int initfn(void) { ...; return 0; }
	module_init(initfn)
NEW:	void initfn(void) { ...; }
	bootcall(initfn);
COMMENTS:
	This is for code which can never be a module: we ignore the
	return value anyway, so why have one (panic() if you must).

OLD:	void exitfn(void) { ...; }
	module_exit(void)
NEW:	int stopfn(void) { ...; return 0; }
	void exitfn(void) { ...; }
	stopcall(stopfn);
	exitcall(exitfn);
COMMENTS:
	If there are neither, then module is not unloadable.  This is
	perfectly OK.  If stopfn returns 0 (otherwise it should be
	-errno) it must have deregistered itself from the rest of the
	kernel (ie. module count can never increase again), but still
	be usable to anyone using it currently.  Once exitfn is
	called, it is guaranteed to be unused.

Enjoy!
Rusty.
--
Premature optmztion is rt of all evl. --DK

^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: [PATCH] PART1: Proposed init & module changes for 2.5
  2001-09-23  6:37 [PATCH] PART1: Proposed init & module changes for 2.5 Rusty Russell
@ 2001-09-23  7:12 ` David Cinege
  2001-09-24  0:09   ` Rusty Russell
  2001-09-23 10:43 ` Ingo Oeser
  1 sibling, 1 reply; 13+ messages in thread
From: David Cinege @ 2001-09-23  7:12 UTC (permalink / raw)
  To: Rusty Russell, linux-kernel

On Sunday 23 September 2001 2:37, Rusty Russell wrote:

Russ,

How about implementing MBS? (Bootloader module loading. IE as implmented in 
GRUB) so we can finally have completely modular kernels?

Dave

^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: [PATCH] PART1: Proposed init & module changes for 2.5
  2001-09-23  6:37 [PATCH] PART1: Proposed init & module changes for 2.5 Rusty Russell
  2001-09-23  7:12 ` David Cinege
@ 2001-09-23 10:43 ` Ingo Oeser
  2001-09-23 22:42   ` Rusty Russell
  1 sibling, 1 reply; 13+ messages in thread
From: Ingo Oeser @ 2001-09-23 10:43 UTC (permalink / raw)
  To: Rusty Russell; +Cc: linux-kernel

Hi,

I like the PARAM() part, but still have some question. Hope you
can clarify.

On Sun, Sep 23, 2001 at 04:37:43PM +1000, Rusty Russell wrote:
> OLD:	module_init(initfn)
> NEW:	init_and_startcall(initfn, startfn);
> COMMENTS:
> 	Please use a semicolon at the end.  Modulable code should
> 	transition to a two-stage init (initfn sets everything up
> 	and may fail, and startfn which exposes the module to the rest
> 	of the kernel and can't fail).  Some modules only need
> 	initfn or startfn, in which case use initcall() or startcall().
 
Why separating them?

> OLD:	void exitfn(void) { ...; }
> 	module_exit(void)
> NEW:	int stopfn(void) { ...; return 0; }
> 	void exitfn(void) { ...; }
> 	stopcall(stopfn);
> 	exitcall(exitfn);
> COMMENTS:
> 	If there are neither, then module is not unloadable.  This is
> 	perfectly OK.  If stopfn returns 0 (otherwise it should be
> 	-errno) it must have deregistered itself from the rest of the
> 	kernel (ie. module count can never increase again), but still
> 	be usable to anyone using it currently.  Once exitfn is
> 	called, it is guaranteed to be unused.

Same question here: Why you changed this? 

What is meant with "usable to anyone using it currently"? 
Does it mean the variables of it can still be read/written? 
Can the startcall or the initcall still be called after stopcall? 

(Important if we rely on zero initialization, which we do in many
modules).

Can IO to ports still be issued and "transactions" still be
finished after stopcall has been issued?

Thanks and Regards

Ingo Oeser
-- 
In der Wunschphantasie vieler Mann-Typen [ist die Frau] unsigned und
operatorvertraeglich. --- Dietz Proepper in dasr

^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: [PATCH] PART1: Proposed init & module changes for 2.5
  2001-09-23 10:43 ` Ingo Oeser
@ 2001-09-23 22:42   ` Rusty Russell
  2001-09-24  1:01     ` Keith Owens
  0 siblings, 1 reply; 13+ messages in thread
From: Rusty Russell @ 2001-09-23 22:42 UTC (permalink / raw)
  To: Ingo Oeser; +Cc: linux-kernel

In message <20010923124336.D30515@nightmaster.csn.tu-chemnitz.de> you write:
> On Sun, Sep 23, 2001 at 04:37:43PM +1000, Rusty Russell wrote:
> > OLD:	module_init(initfn)
> > NEW:	init_and_startcall(initfn, startfn);
> > COMMENTS:
> > 	Please use a semicolon at the end.  Modulable code should
> > 	transition to a two-stage init (initfn sets everything up
> > 	and may fail, and startfn which exposes the module to the rest
> > 	of the kernel and can't fail).  Some modules only need
> > 	initfn or startfn, in which case use initcall() or startcall().
>  
> Why separating them?

Hi Ingo,

	Glad you like the PARAM stuff.  To answer your question,
consider the following standard case in module initialization:

	int init(void)
	{
		int ret;

		ret = register_something();
		if (ret != 0) return ret;

		ret = register_something_else();
		if (ret != 0) {
			unregister_something();
			return ret;
		}
		return 0;
	}

Imagine register_something() succeeds, but register_something_else()
fails.  Someone could be accessing the module (through
register_something()): what do we do?  We can't free the module and
return the error to insmod...

Mind you, many modules currently ignore errors anyway...

> > OLD:	void exitfn(void) { ...; }
> > 	module_exit(void)
> > NEW:	int stopfn(void) { ...; return 0; }
> > 	void exitfn(void) { ...; }
> > 	stopcall(stopfn);
> > 	exitcall(exitfn);
> > COMMENTS:
> > 	If there are neither, then module is not unloadable.  This is
> > 	perfectly OK.  If stopfn returns 0 (otherwise it should be
> > 	-errno) it must have deregistered itself from the rest of the
> > 	kernel (ie. module count can never increase again), but still
> > 	be usable to anyone using it currently.  Once exitfn is
> > 	called, it is guaranteed to be unused.
> 
> Same question here: Why you changed this? 
> 
> What is meant with "usable to anyone using it currently"? 

Someone could still have a reference to the module when stopfn is
called.  If you register an interrupt handler, say, there could be
someone running it on another CPU right now.

> Does it mean the variables of it can still be read/written? 

Yes: after stopfn, no NEW things can access the module, but it must be
still usable for anyone who got access to the module before.

> Can the startcall or the initcall still be called after stopcall? 

No: at this stage the module will have to be reloaded, exactly because
of assumptions like zero-initialization.

> Can IO to ports still be issued and "transactions" still be
> finished after stopcall has been issued?

Yes... The module is still "live", it's just you must unregister
anything which might allow new accesses (eg. proc entries,
filesystems, IRQ handlers, etc).  Sometime after the module count
falls to zero, exitfn will be called and the module actually freed.

Hope that clarifies,
Rusty.
--
Premature optmztion is rt of all evl. --DK

^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: [PATCH] PART1: Proposed init & module changes for 2.5
  2001-09-23  7:12 ` David Cinege
@ 2001-09-24  0:09   ` Rusty Russell
  2001-09-24  3:57     ` David Cinege
  0 siblings, 1 reply; 13+ messages in thread
From: Rusty Russell @ 2001-09-24  0:09 UTC (permalink / raw)
  To: dcinege; +Cc: linux-kernel

On Sun, 23 Sep 2001 03:12:54 -0400
David Cinege <dcinege@psychosis.com> wrote:

> On Sunday 23 September 2001 2:37, Rusty Russell wrote:
> 
> Russ,
> 
> How about implementing MBS? (Bootloader module loading. IE as implmented in 
> GRUB) so we can finally have completely modular kernels?

Hi Dave,

	Why duplicate the module code in the boot loader?  Surely a tiny initrd 
or equiv is a better option here?

Rusty.
--
New mailer, beware.

^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: [PATCH] PART1: Proposed init & module changes for 2.5
  2001-09-23 22:42   ` Rusty Russell
@ 2001-09-24  1:01     ` Keith Owens
  2001-09-24  4:35       ` Rusty Russell
  0 siblings, 1 reply; 13+ messages in thread
From: Keith Owens @ 2001-09-24  1:01 UTC (permalink / raw)
  To: Rusty Russell; +Cc: linux-kernel

On Mon, 24 Sep 2001 08:42:25 +1000, 
Rusty Russell <rusty@rustcorp.com.au> wrote:
>In message <20010923124336.D30515@nightmaster.csn.tu-chemnitz.de> you write:
>> Can the startcall or the initcall still be called after stopcall? 
>
>No: at this stage the module will have to be reloaded, exactly because
>of assumptions like zero-initialization.

When we discussed this at linux.conf.au in Sydney, we agreed that we
could call startfn after stopfn to handle the quiesce unload algorithm.
That handles the rmmod race without exporting mod use count to
everything, i.e.

  rmmod
  if use count == 0, call stopfn()
    synchronize_kernel()
    if use count == 0, exitfn()
    if use count != 0, startfn()

That catches the race where a second cpu has entered the module but not
done MOD_INC_USECOUNT yet.  The module is now in use but stopfn has
been called, the best thing to do is accept that rmmod lost the race
and reinstate the module.


^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: [PATCH] PART1: Proposed init & module changes for 2.5
  2001-09-24  0:09   ` Rusty Russell
@ 2001-09-24  3:57     ` David Cinege
  2001-09-24  5:31       ` Rusty Russell
  0 siblings, 1 reply; 13+ messages in thread
From: David Cinege @ 2001-09-24  3:57 UTC (permalink / raw)
  To: Rusty Russell; +Cc: linux-kernel

On Sunday 23 September 2001 20:09, you wrote:
> On Sun, 23 Sep 2001 03:12:54 -0400
>
> David Cinege <dcinege@psychosis.com> wrote:
> > On Sunday 23 September 2001 2:37, Rusty Russell wrote:
> >
> > Russ,
> >
> > How about implementing MBS? (Bootloader module loading. IE as implmented
> > in GRUB) so we can finally have completely modular kernels?
>
> Hi Dave,
>
> 	Why duplicate the module code in the boot loader?  Surely a tiny initrd
> or equiv is a better option here?

Russ,

No. It's much more restrictive. IMO the JOB of the boot loader is to provide 
minimal lowest level (arch dependant) device access to load and initialise 
the kernel, with enough user control to manipulate how the kernel
is initialised. GRUB does a fantastic job of this on x86. It's the first 
bootloader I've seen 'get it right'.

I don't suggest implementing the complete module loading in the boot loader,
(I'm still not even sure I really like it in the kernel.  ; > )
only loading the modules themselves into memory for the kernel access during 
it's exec. (Like an initrd image is loaded) If a boot loader wants to 
understand and use modules.dep or do on the fly dependency checking, or have 
kernel userland utils to update it's conifg intelligently, that's it's 
business. I only want to see a way modules can be preloaded before kernel 
exec.

This has already been designed and is called the Multi Boot Standard.
You can read the spec in the GRUB source archive.
	http://www.gnu.org/software/grub/
It been around a few years. It's sad only HURD(?) is using it,

Why an initrd solution doesn't even touch on the problem:
You have a kernel.
	It's scsi layer and scsi device drivers are all modules.

You have a system.
	It contains a single scsi drive.
	The kernel and modules reside on that drive.

Now the impossible exercise.
	Get that machine the boot.

All the parts are there but you can't. Your only option is to use an initrd 
that has the required modules *merged* into it. This is just disgusting and 
silly. It's also impossible to make that initrd on that machine without a 
suplementary system. (Yes there are other ways around this by why not just 
KISS???)

We ALREADY have the boot loader and spec designed to allow reloading
modules into memory this way. (GRUB) It should not be very hard to implement 
this from the pre-existing Linux intird code to read the modules out. It's 
also easy for other boot loaders to use their initrd code to implement the 
functionality. (Remember when you think about it's usefulness put it in the 
perspective of bootloaders that can read from a filesystem. IE GRUB and 
Syslinux.)

Please let's do this already...
I look forward to one day reaching the point it's *reasonable* to have a 
completely modular kernel and that any device drivers (even boot devices) can 
be upgraded without having to update the entire kernel.

If you've never played with GRUB yet, you can grab a nice raw floppy image 
from my ftp site.  ftp://ftp.psychosis.com/linux/grub

Dave

^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: [PATCH] PART1: Proposed init & module changes for 2.5
  2001-09-24  1:01     ` Keith Owens
@ 2001-09-24  4:35       ` Rusty Russell
  2001-09-24  4:54         ` Keith Owens
  0 siblings, 1 reply; 13+ messages in thread
From: Rusty Russell @ 2001-09-24  4:35 UTC (permalink / raw)
  To: Keith Owens; +Cc: linux-kernel

In message <4103.1001293289@kao2.melbourne.sgi.com> you write:
> On Mon, 24 Sep 2001 08:42:25 +1000, 
> Rusty Russell <rusty@rustcorp.com.au> wrote:
> >In message <20010923124336.D30515@nightmaster.csn.tu-chemnitz.de> you write:
> >> Can the startcall or the initcall still be called after stopcall? 
> >
> >No: at this stage the module will have to be reloaded, exactly because
> >of assumptions like zero-initialization.
> 
> When we discussed this at linux.conf.au in Sydney, we agreed that we
> could call startfn after stopfn to handle the quiesce unload algorithm.
> That handles the rmmod race without exporting mod use count to
> everything, i.e.
> 
>   rmmod
>   if use count == 0, call stopfn()
>     synchronize_kernel()
>     if use count == 0, exitfn()
>     if use count != 0, startfn()
> 
> That catches the race where a second cpu has entered the module but not
> done MOD_INC_USECOUNT yet.  The module is now in use but stopfn has
> been called, the best thing to do is accept that rmmod lost the race
> and reinstate the module.

Hi Keith!

	Yes, this was my original intention, but the more I thought
about it, the more I wondered if it was worth it.  In fact, my patch
adds CONFIG_MODULE_UNLOAD, because most people don't actually need it,
and I don't really care if most modules are not unloadable.  Loading
modules makes sense.  Unloading them is pretty much an optimization.

	The reason I eventually decided to split initialization in
this version anyway, was that so many drivers get it wrong!  Things
like registering interrupt handlers before they have set up their
internal state, etc.  Splitting it into two functions is merely a
mechanism to get them to think about things a little harder 8)

	  And honestly, I got distracted by the PARAM stuff 8)

Cheers!
Rusty.
--
Premature optmztion is rt of all evl. --DK

^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: [PATCH] PART1: Proposed init & module changes for 2.5
  2001-09-24  4:35       ` Rusty Russell
@ 2001-09-24  4:54         ` Keith Owens
  2001-09-24  5:40           ` Rusty Russell
  0 siblings, 1 reply; 13+ messages in thread
From: Keith Owens @ 2001-09-24  4:54 UTC (permalink / raw)
  To: Rusty Russell; +Cc: linux-kernel

On Mon, 24 Sep 2001 14:35:54 +1000, 
Rusty Russell <rusty@rustcorp.com.au> wrote:
>In message <4103.1001293289@kao2.melbourne.sgi.com> you write:
>> When we discussed this at linux.conf.au in Sydney, we agreed that we
>> could call startfn after stopfn to handle the quiesce unload algorithm.
>> That handles the rmmod race without exporting mod use count to
>> everything, i.e.
>
>	Yes, this was my original intention, but the more I thought
>about it, the more I wondered if it was worth it.  In fact, my patch
>adds CONFIG_MODULE_UNLOAD, because most people don't actually need it,
>and I don't really care if most modules are not unloadable.  Loading
>modules makes sense.  Unloading them is pretty much an optimization.
>
>	The reason I eventually decided to split initialization in
>this version anyway, was that so many drivers get it wrong!  Things
>like registering interrupt handlers before they have set up their
>internal state, etc.  Splitting it into two functions is merely a
>mechanism to get them to think about things a little harder 8)

I absolutely agree that the split between probe and register needs to
be done.  The difference between calling startfn after stopfn and
forbidding that sequence is the difference between

  rmmod
    loses race
    return OK
    module is still in use, user is confused
 
and

  rmmod
    loses race
    calls startfn
    returns failure
    module is still in use, user is happy

Allowing startfn after stopfn gives a more consistent view of the
operation.


^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: [PATCH] PART1: Proposed init & module changes for 2.5
  2001-09-24  3:57     ` David Cinege
@ 2001-09-24  5:31       ` Rusty Russell
  2001-09-24  8:14         ` Andrzej Krzysztofowicz
  2001-09-24  9:44         ` David Cinege
  0 siblings, 2 replies; 13+ messages in thread
From: Rusty Russell @ 2001-09-24  5:31 UTC (permalink / raw)
  To: dcinege; +Cc: linux-kernel

In message <E15lMrA-0006ny-00@schizo.psychosis.com> you write:
> is initialised. GRUB does a fantastic job of this on x86. It's the first 
> bootloader I've seen 'get it right'.
> 
> I don't suggest implementing the complete module loading in the boot loader,
> (I'm still not even sure I really like it in the kernel.  ; > )

I was hoping someone would say this.  (Note that my userspace tools
are not as complete as the current ones, so take a pinch of salt):

Old kernel:
$ wc -l kernel/module.c
   1250 kernel/module.c
$ ls -l /sbin/insmod
-rwxr-xr-x    1 root     root        99824 Aug 30 09:35 /sbin/insmod
$ find modutils-2.4.1/ -name '*.[ch]' | xargs cat | wc -l
  20612

New kernel:
$ wc -l working-pmac-module/kernel/module.c         
    922 working-pmac-module/kernel/module.c
$ wc -l working-pmac-module/arch/ppc/kernel/module.c
    253 working-pmac-module/arch/ppc/kernel/module.c
$ ls -l modult-init-tools/insmod
-rwxrwxr-x    1 rusty    rusty        5240 Sep 24 15:23 insmod
$ find module-init-tools/ -name '*.[ch]' | xargs cat | wc -l
    661

Convinced yet?

> only loading the modules themselves into memory for the kernel access during 
> it's exec. (Like an initrd image is loaded) If a boot loader wants to 
> understand and use modules.dep or do on the fly dependency checking, or have 
> kernel userland utils to update it's conifg intelligently, that's it's 
> business. I only want to see a way modules can be preloaded before kernel 
> exec.

Why not just put them in the initrd image?  The kernel is not going to
use the entire module as it is, so it will have to copy it anyway...

> All the parts are there but you can't. Your only option is to use an initrd 
> that has the required modules *merged* into it. This is just disgusting and 
> silly.

Um, how do you get the modules into grub then?  If it can read ext2 at
boot, then it could create an initrd for me.  Otherwise, how is it
different from creating an initrd?

It'd be easy to implement now.  But it won't gain us anything, since
we'll all be using initrd-tng in 2.5 anyway.

Cheers,
Rusty.
PS.  Am big fan of LRP: it rocks.
--
Premature optmztion is rt of all evl. --DK

^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: [PATCH] PART1: Proposed init & module changes for 2.5
  2001-09-24  4:54         ` Keith Owens
@ 2001-09-24  5:40           ` Rusty Russell
  0 siblings, 0 replies; 13+ messages in thread
From: Rusty Russell @ 2001-09-24  5:40 UTC (permalink / raw)
  To: Keith Owens; +Cc: linux-kernel

On Mon, 24 Sep 2001 14:54:09 +1000
Keith Owens <kaos@ocs.com.au> wrote:
>   rmmod
>     loses race
>     return OK
>     module is still in use, user is confused

Ah, I see... no, it's currently:

   rmmod
      loses race
      waits for module count to hit zero

This can be desirable behavior (rmmod -f).  It's not good if you wanted
auto-module-unloading, but then, we've never wanted to take the hit to have
a pagable kernel, and I don't think we should do so.

Cheers,
Rusty.


^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: [PATCH] PART1: Proposed init & module changes for 2.5
  2001-09-24  5:31       ` Rusty Russell
@ 2001-09-24  8:14         ` Andrzej Krzysztofowicz
  2001-09-24  9:44         ` David Cinege
  1 sibling, 0 replies; 13+ messages in thread
From: Andrzej Krzysztofowicz @ 2001-09-24  8:14 UTC (permalink / raw)
  To: Rusty Russell; +Cc: dcinege, linux-kernel

"Rusty Russell wrote:"
> > I don't suggest implementing the complete module loading in the boot loader,
> > (I'm still not even sure I really like it in the kernel.  ; > )
[...]
> > only loading the modules themselves into memory for the kernel access during 
> > it's exec. (Like an initrd image is loaded) If a boot loader wants to 
> > understand and use modules.dep or do on the fly dependency checking, or have 
> > kernel userland utils to update it's conifg intelligently, that's it's 
> > business. I only want to see a way modules can be preloaded before kernel 
> > exec.
> 
> Why not just put them in the initrd image?  The kernel is not going to
> use the entire module as it is, so it will have to copy it anyway...

Somebody wants to modularize all binary formats, including binfmt_elf ... ?

Andrzej
-- 
=======================================================================
  Andrzej M. Krzysztofowicz               ankry@mif.pg.gda.pl
  phone (48)(58) 347 14 61
Faculty of Applied Phys. & Math.,   Technical University of Gdansk

^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: [PATCH] PART1: Proposed init & module changes for 2.5
  2001-09-24  5:31       ` Rusty Russell
  2001-09-24  8:14         ` Andrzej Krzysztofowicz
@ 2001-09-24  9:44         ` David Cinege
  1 sibling, 0 replies; 13+ messages in thread
From: David Cinege @ 2001-09-24  9:44 UTC (permalink / raw)
  To: Rusty Russell; +Cc: linux-kernel

On Monday 24 September 2001 1:31, Rusty Russell wrote:

> Convinced yet?

If it's cleaner in operation then the current system, yes.
What we've got now just seems so ugly.

> Why not just put them in the initrd image?  

Because images are not dynamic.  : P 

> Um, how do you get the modules into grub then?  If it can read ext2 at
> boot, then it could create an initrd for me.  Otherwise, how is it
> different from creating an initrd?

Yep you're still using LILO...(that still does that absolute block
offset shit.) GRUB is like syslinux in that it can read FS. But not just
ext2. It also knows reiserfs, fat, bsd, and some more. It also has a complete 
interactive commandline. Is more of a 'boot shell'. I gave you a like. Go try 
it. : >

Only the GRUB loader itself sits on an sbsolute sector.
So via the ominopotent symlink, you would need to do...nothing
after you install a new kernel to boot. With initrd, you would have
to make another initrd. But actually you would need one for every
kernel. (I've kept up to 6 active on my box at one time...)
This sucks...and it's why we all compile everything we really need static.

BTW if your initrd images gets corrupted or lost, you are paddling up fecal 
creek with your hands.  Let's not forget how much fun it is if you get a 
library mismatch on your initrd boot utils. Hope you compiled them all
static.

Loading system critcal kernel modules should be as straight forward
as the feature I'm requesting. The boot loader puts it in memory. The kernel 
loads it from memory. It's all good.

> It'd be easy to implement now.  But it won't gain us anything, since
> we'll all be using initrd-tng in 2.5 anyway.

Oh jesus...what have I missed? (I've been off the list a long time)

> Cheers,
> Rusty.
> PS.  Am big fan of LRP: it rocks.

I hope so...you're still imortalized in the POSIXness script. ; >
LRP is unfortunatly dated to the point it doesn't really rock right
now. : < It's simply cool.  : > If I ever get to work on LRP v5.0... (Hell I 
never got to release V4.0... : P) it will rock like nothing else ever has.

But since you bring up LRP, let's get down into the minimal space issues.
It's a living hell tring to maintain kernels in an OS distibution and a 
primary reason is that you have to play roulette deciding what to make
static. Then when you get it good, you have to fuck it all up to squeeze
it onto a boot disk. Adding what I want fixes this quite well. 

With the work I've done with LRP and embedded systems, I doubt many people
out there have played with the initrd more then me. If you haven't noticed
I'm back on the list because I just posted a new version of initrd dynamic
with tmpfs. It's a lifesaver for initrd, since now the FS 'creatation' is 
100% dynamic the the 'image' can be multiple tar.gz archives.

However as clean as it is, it's still not something I would want
to load critical kernel parts for boot.

Saying one should use only initrd for this is like saying the kernel
should not handle starting MD devices at all. 

As a programming ethic it sounds good but I think few programmer have
actually used some of these ideals in 'real world' system
adminstration. Try finding yourself staring at a mission critical server
that you now can not get to boot at 03:00 and you can't get
out to the net. That sort of experience changes your perspective. Been there.
Many times. No fun.

So just code this feature for me. Please. Make Dave happy.  ; >


Dave

-- 
The time is now 22:19 (Totalitarian)  -  http://www.ccops.org/clock.html

^ permalink raw reply	[flat|nested] 13+ messages in thread

end of thread, other threads:[~2001-09-24  9:44 UTC | newest]

Thread overview: 13+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2001-09-23  6:37 [PATCH] PART1: Proposed init & module changes for 2.5 Rusty Russell
2001-09-23  7:12 ` David Cinege
2001-09-24  0:09   ` Rusty Russell
2001-09-24  3:57     ` David Cinege
2001-09-24  5:31       ` Rusty Russell
2001-09-24  8:14         ` Andrzej Krzysztofowicz
2001-09-24  9:44         ` David Cinege
2001-09-23 10:43 ` Ingo Oeser
2001-09-23 22:42   ` Rusty Russell
2001-09-24  1:01     ` Keith Owens
2001-09-24  4:35       ` Rusty Russell
2001-09-24  4:54         ` Keith Owens
2001-09-24  5:40           ` Rusty Russell

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox