Re: RFC: initramfs unpack point and rules

2007-04-13 Thread Krzysztof Halasa
Al Viro <[EMAIL PROTECTED]> writes:

> Nope.  The point is to have it as early as possible, so that we had more
> or less normal environment when drivers, etc. are being initialized.

But traditionally the "normal environment" is a root fs not yet
mounted. Do the drivers need initramfs? Which drivers?

In both cases it's a bit before /sbin/init (or /init) is launched,
udevd isn't running and firmware can't be loaded.

OTOH when something goes wrong before console drivers are initialized,
nothing can be seen. And with initramfs (especially with the external
one) it's easy to screw something.
-- 
Krzysztof Halasa
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/


Re: RFC: initramfs unpack point and rules

2007-04-12 Thread Al Viro
On Thu, Apr 05, 2007 at 02:34:39PM +0200, Krzysztof Halasa wrote:
> First problem: initramfs is unpacked way before console drivers
> are initialized, so you aren't going to see the panic():
> 
> init/initramfs.c:static int __init populate_rootfs(void)
> ...
>   printk(KERN_INFO "Unpacking initramfs...");
>   err = unpack_to_rootfs((char *)initrd_start,
>   initrd_end - initrd_start, 0);
>   if (err)
>   panic(err);
> ^^
>   printk(" done\n");
>   free_initrd();
> 
> I wonder why is initramfs unpacked that early, before most drivers?
> I'd expect it much later in the boot sequence, just before userspace
> and initial devices (/dev/console etc) are needed. Should it be moved
> there? populate_rootfs() unpacks both builtin and external initramfs.

Nope.  The point is to have it as early as possible, so that we had more
or less normal environment when drivers, etc. are being initialized.
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/


Re: RFC: initramfs unpack point and rules

2007-04-05 Thread Krzysztof Halasa
> I wonder why is initramfs unpacked that early, before most drivers?
> I'd expect it much later in the boot sequence, just before userspace
> and initial devices (/dev/console etc) are needed. Should it be moved
> there? populate_rootfs() unpacks both builtin and external initramfs.

I mean something like the attached patch would change the boot order
from:

TCP reno registered
Unpacking initramfs... done
^^
Freeing initrd memory: 7812K
NetWinder Floating Point Emulator V0.97 (double precision)
io scheduler noop registered (default)
IXP4xx Watchdog Timer: heartbeat 60 sec
Serial: 8250/16550 driver $Revision: 1.90 $ 2 ports, IRQ sharing disabled
serial8250.0: ttyS0 at MMIO 0xc800 (irq = 15) is a XScale
serial8250.0: ttyS1 at MMIO 0xc8001000 (irq = 13) is a XScale
PPP generic driver version 2.4.2
...

to:

802.1Q VLAN Support v1.8 Ben Greear <[EMAIL PROTECTED]>
All bugs added by David S. Miller 
Unpacking initramfs... done
^^
Freeing initrd memory: 7812K
XScale DSP coprocessor detected.
Freeing init memory: 628K
Time: OSTS clocksource has been installed.

login:

What do you think?

In case someone wants to apply it (but something tells me it's not
that simple):
Signed-off-by: Krzysztof Halasa <[EMAIL PROTECTED]>

diff --git a/include/asm-generic/vmlinux.lds.h 
b/include/asm-generic/vmlinux.lds.h
index 9fcc8d9..33e3036 100644
--- a/include/asm-generic/vmlinux.lds.h
+++ b/include/asm-generic/vmlinux.lds.h
@@ -223,9 +223,9 @@
*(.initcall4s.init) \
*(.initcall5.init)  \
*(.initcall5s.init) \
-   *(.initcallrootfs.init) \
*(.initcall6.init)  \
*(.initcall6s.init) \
+   *(.initcallrootfs.init) \
*(.initcall7.init)  \
*(.initcall7s.init)
 
diff --git a/include/linux/init.h b/include/linux/init.h
index 5a593a1..6da2106 100644
--- a/include/linux/init.h
+++ b/include/linux/init.h
@@ -111,9 +111,9 @@ extern void setup_arch(char **);
 #define subsys_initcall_sync(fn)   __define_initcall("4s",fn,4s)
 #define fs_initcall(fn)__define_initcall("5",fn,5)
 #define fs_initcall_sync(fn)   __define_initcall("5s",fn,5s)
-#define rootfs_initcall(fn)__define_initcall("rootfs",fn,rootfs)
 #define device_initcall(fn)__define_initcall("6",fn,6)
 #define device_initcall_sync(fn)   __define_initcall("6s",fn,6s)
+#define rootfs_initcall(fn)__define_initcall("rootfs",fn,rootfs)
 #define late_initcall(fn)  __define_initcall("7",fn,7)
 #define late_initcall_sync(fn) __define_initcall("7s",fn,7s)
 
-- 
Krzysztof Halasa
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/