linux-mips
[Top] [All Lists]

Re: qemu initrd and ide support

To: Daniel Jacobowitz <dan@debian.org>
Subject: Re: qemu initrd and ide support
From: Aurelien Jarno <aurelien@aurel32.net>
Date: Fri, 20 Oct 2006 17:48:59 +0200
Cc: linux-mips@linux-mips.org
In-reply-to: <452F9744.9010109@aurel32.net>
Original-recipient: rfc822;linux-mips@linux-mips.org
References: <20061012211228.GA17383@nevyn.them.org> <452F9744.9010109@aurel32.net>
Sender: linux-mips-bounce@linux-mips.org
User-agent: IceDove 1.5.0.7 (X11/20061013)
Aurelien Jarno a écrit :
The initrd seems to works well, but it generates a strange failure during the boot:

[...]
Mount-cache hash table entries: 512
Checking for 'wait' instruction...  available.
checking if image is initramfs...it isn't (bad gzip magic numbers); looks like an initrd
Bad page state in process 'swapper'
page:81010000 flags:0x00080000 mapping:00000000 mapcount:0 count:0
Trying to fix it up, but a reboot is needed
Backtrace:
Call Trace:
 [<8005c748>] bad_page+0x68/0xa8
 [<8005ccf0>] free_hot_cold_page+0x1a4/0x1b4
 [<802a0000>] ic_bootp_recv+0x238/0x6a0
 [<80080138>] __fput+0x14c/0x1cc
 [<8001b094>] free_init_pages+0xa4/0xfc
 [<802a0000>] ic_bootp_recv+0x238/0x6a0
 [<802a0000>] ic_bootp_recv+0x238/0x6a0
 [<802a0000>] ic_bootp_recv+0x238/0x6a0
 [<80288d98>] free_initrd+0x28/0x44
 [<80288e80>] populate_rootfs+0xcc/0x110
 [<80292860>] spawn_softlockup_task+0x30/0x50
 [<80010498>] init+0x54/0x300
 [<80010498>] init+0x54/0x300
 [<80013074>] kernel_thread_helper+0x10/0x18
 [<80013064>] kernel_thread_helper+0x0/0x18

Freeing initrd memory: 2520k freed
NET: Registered protocol family 16
NET: Registered protocol family 2
[...]

This message is not present when initrd is not used, and it also does not appear with the previous way of passing the size and location of the initrd.

I don't have time to look more now, I will give you some more details when/if I found some time to work on that.


This failure is due to the fact that initrd_reserve_bootmem is not set anymore to 1 in arch/mips/kernel/setup.c. It is set to 1 when the initrd location and size are read from the command line arguments, but not when read from the place where QEMU put it.

Setting this value to 1 fixes the problem, but it is rather a big hack than a fix.

About the patch itself, another comment: you should add a #ifdef CONFIG_BLK_DEV_INITRD #endif for the block concerning the initrd in arch/mips/qemu/q-firmware.c

Bye,
Aurelien

--
  .''`.  Aurelien Jarno             | GPG: 1024D/F1BCDB73
 : :' :  Debian developer           | Electrical Engineer
 `. `'   aurel32@debian.org         | aurelien@aurel32.net
   `-    people.debian.org/~aurel32 | www.aurel32.net

<Prev in Thread] Current Thread [Next in Thread>