mirror of https://lore.kernel.org/lkml/
 help / color / mirror / Atom feed
From: Roman Zippel <zippel@linux-m68k.org>
To: "Adam J. Richter" <adam@yggdrasil.com>
Cc: vandrove@vc.cvut.cz, <linux-kernel@vger.kernel.org>
Subject: Re: [RFC] module fs or how to not break everything at once
Date: Fri, 22 Nov 2002 11:50:23 +0100 (CET)	[thread overview]
Message-ID: <Pine.LNX.4.44.0211221053570.2113-100000@serv> (raw)
In-Reply-To: <200211212321.PAA16033@adam.yggdrasil.com>

Hi,

On Thu, 21 Nov 2002, Adam J. Richter wrote:

> 	Can you tell me what problem in the existing userland module
> code (i.e., before 2.5.48) modulefs solves?  Does it actually make
> the kernel smaller?  Can you give me an example?

Previous insmod knows too much about kernel internals, it has to fill in 
kernel structures, which makes changing this structure a real pain. Part 
of the relocation work can be moved to kbuild, what makes insmod simpler 
and gives us better control over the module layout. See the mini module 
loader I posted last week.

> 	1. Please take Petr's advice and just make module removal
> occur when you rmdir the directory.  Making the removal happen in
> two stages introduces additioal states that have to be defined, such
> as the state where the "module unmap" command has been received
> but the module's directory has been removed.  What if somebody else
> wants to load the same module again at this time?  Either you will
> get flakiness in facilities that rely on automatic kernel module
> loading or modprobe has to be modified to deal with that
> possibility and perhaps try to do the remove itself.

Synchronizing multiple insmod is needed in user space anyway, this doesn't 
make the kernel side more complex.

> 	2. I would really like insmod to be able to flock modules (or
> do something similar).  This would increment the reference count on a
> module until insmod would exit (or would do an execve, I suppose).
> This would eliminate a race when insmod is loading a module that
> references symbols in other modules.  I don't think flock is actually
> propagated down the vfs layer, so perhaps some other primitive could be
> used.  Perhaps just holding open an open file descriptor on each of
> the modules in question would be a better interface.

I don't know what you're trying to do here, but it sounds like you're 
mixing user space and kernel space problems here.

> 	3. It's not a modulefs thing, but you might want to consider
> moving all symbol management to user space, including that for the
> core kernel symbols.  The symbol tables can be maintained in user
> files by the insmod and rmmod programs, they could even be inferred
> from the module's start address and the module's .o in the file
> system.  If people really want to store this data to be stored in
> kernel memory, they can allocate extra space where the module is
> actually loaded and their favorite symbol table format there.

This is planned, symbols are only needed by kksymoops, otherwise they 
don't have to be kept in memory all the time.

>         4. Regarding what I said about leaving symbol tracking to
> user space, I'd like to add a note about reliability.  It is not
> necessary for rmmod to reliably remove symbols from these tables.
> insmod can check for symbols that map to places that are no longer
> allocated to modules and remove stale symbols before attempting to
> load a new module.

That's a mostly user space problem and I'd rather do this right, why 
should I keep invalid symbols?

>         5. You should not need to do anything special in modfs
> to support init sections.  That can be done by loading two separate
> modules and then removing the one corresponding to an init section.

I doubt that's a good idea, mostly also because of the following point.

>         6. For module_init functions, consider taking a pointer to
> an array of init functions and a count.  That would be compatible
> with the system for built-in kernel object files, so it would
> eliminate a difference in linux/include/init.h.  You could also do
> the same for module_exit functions.  This change would also
> allow linking .o's together more or less arbitrarily into single
> modules, which would allow loading of modules that have reference
> loops among them.

Reference loops are never a good idea, if object files are that closely 
related, create a single module. Multiple init/exit functions are no good 
idea either, in which order should they be executed? If it's really one 
module than also keep it one module.

>         7. Instead of module parameters, consider just supporting
> __setup() declarations used in kernel objects.  These would then
> process a string that you'd pass.  insmod might want to prepend the
> contents of /proc/cmdline to that string so that people could pass
> command lines at the boot prompt even if the driver they wanted to
> talk to were a module.  This change would eliminate another difference
> between module and core kernel objects.  Ultimately, I would like
> eliminate any compilation difference between kernel and module
> objects.  This would allow deferring the decision about what should be
> in modules and what should be in the kernel until link time.  Not only
> would this slightly simplify the build process and modules' source
> code,

Kernel parameter unification might actually be one of the few good parts
from Rusty's loader, but I have to look at, when it's working again.

> but it would also allow binary distributions for a wider
> variety of uses.

What does this mean???

bye, Roman


  reply	other threads:[~2002-11-22 10:43 UTC|newest]

Thread overview: 14+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2002-11-21 23:21 Adam J. Richter
2002-11-22 10:50 ` Roman Zippel [this message]
  -- strict thread matches above, loose matches on Subject: below --
2002-11-23  4:58 Adam J. Richter
2002-11-23 12:34 ` Roman Zippel
2002-11-22 22:11 Adam J. Richter
2002-11-22 23:24 ` Roman Zippel
2002-11-22 18:10 Adam J. Richter
2002-11-22 20:28 ` Roman Zippel
2002-11-21 23:59 Adam J. Richter
2002-11-20 21:06 Roman Zippel
2002-11-20 22:03 ` Petr Vandrovec
2002-11-20 23:32   ` Roman Zippel
2002-11-21  1:59     ` Petr Vandrovec
2002-11-21 19:46       ` Roman Zippel

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=Pine.LNX.4.44.0211221053570.2113-100000@serv \
    --to=zippel@linux-m68k.org \
    --cc=adam@yggdrasil.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=vandrove@vc.cvut.cz \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox

all inboxes | Powered by JetHome®