Re: 1.3.68 is unstable with bzImage+initrd-1.3.66c patch

Hans Lermen (lermen@elserv.ffm.fgan.de)
Tue, 27 Feb 1996 02:19:41 +0100 (MET)


Hi,

I guess we need help from Bjorn and Alan.

On Mon, 26 Feb 1996, Matthias Sattler wrote:

> Hiho
>
> I've encountered a strange phenomenon. When I use the rootramdisk patches
> (bzImage+initrd-1.3.66c) with the 1.3.68 kernel my machine is significantly
> less stable. The errors occur in areas that were not changed by the patch?!
> Here in one example that I can easily reproduce:
> nohup xpilots -noQuit &
> xpilot
> Now play a bit (a few seconds seem enough) and quit xpilot. As a result I get
> the following Oops that I do not get with plain 1.3.68.

Ne need some more help from you to track this down. In order
to isolate the problem, can you please check:

1. What is your system setup _without_ the patch (vanilla 1.3.68) ?

2. Does the Oops also happen _with_ the patch, but having the same
setup as with vanilla 1.3.68 ?
If it does, can you please test the same without the initrd part of the
patch, hence testing only the high-load stuff.
(bzImage parts starts at top of the patch file until
arch/i386/boot/tools/build.c (inclusive) )

3. What happens if you load the modules 'manually' by using insmod
(kerneld _not_ configured in) ?

> [ ... ]
> Code: 83 37 01 10 00 89 4c 24 1c 89 c2 83 c4 0c 66 85 d2 74 32 ff
> Aiee, killing interrupt handler
>
> ksymoops says:
> Using /usr/src/linux/System.map' to map addresses to symbols.
>
> >>EIP: 15772b <icmp_rcv+3b/120>

hmm, if the error really happens _here_, we also need some help from
the net-experts (Alan Cox). May be it happens much earlier.

> My setup is:
> -1.3.68 kernel for 486
> -all modules (even the rootdevice are loaded by kerneld (modules-1.3.57))
> /linuxrc looks like:
> #!/bin/sh
> PATH=/bin:/sbin
> export PATH
> echo "Starting bootstrap kerneld."
> /sbin/kerneld &
> /bin/sleep 2
> with a handpatched modules.dep to find the scsi-modules.
> -the 'bootstrap kerneld' is killed early at system bootup and the normal
> system kerneld is started.

Don't know if kerneld is aware of such a condition to happen. (Bjorn?)

> -/initrd is still mounted (by the way... how do I get rid of it after bootup?
> unmountig works, but the memory is not freed).

To remove /inird you first have to unmount it, then you can free the memory.
Try the below piece of code, but NOTE: /dev/ram should have minor = 0 !!!

#include <stdio.h>
#include <string.h>
#include <sys/mount.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <sys/ioctl.h>
#include <linux/fs.h>
#include <errno.h>

main(int argc, char **argv)
{
char rname[256]="/dev/ram";
char b[256];
int f;
if (argv[1]) strcpy(rname,argv[1]);

if (umount(rname) && (errno != ENOENT)) {
sprintf(b,"freeramdisk: cannot umount %s %d",rname,errno);
perror(b);
exit(1);
}
if ((f=open(rname,O_RDWR)) == -1) {
sprintf(b,"freeramdisk: cannot open %s",rname);
perror(b);
exit(1);
}
ioctl(f,BLKFLSBUF);
close(f);
}

Hans
<lermen@elserv.ffm.fgan.de>