Re: Booting on QEMU
BALATON Zoltan <[email protected]> Thu, 28 Oct 2021 14:05:56 +0200 (CEST)
| Newsgroups | gmane.os.netbsd.ports.macppc |
|---|---|
| Message-ID | <[email protected]> |
On Wed, 27 Oct 2021, BALATON Zoltan wrote: > On Tue, 26 Oct 2021, Martin Husemann wrote: >> On Tue, Oct 26, 2021 at 01:30:31PM +0200, BALATON Zoltan wrote: >>> The current 9.2 version is not affected and still boots before and after >>> but >>> older versions which booted without this change now get strange errors as >>> reported in the above OpenBIOS list thread. Any idea what may be wrong or >>> how to >>> debug it further? >> >> The memory disk root file system, which for this kernel is embedded >> into the kernel data section, is corrupt. >> >> So either something goes horribly wrong when reading the kernel from the >> boot medium (ofwboot.xcf does that using OF callbacks, so very unlikely), >> or the new OF node makes the kernel code corrupt some memory post-loading. Interesting is that it only happens if there's a node named pci _before_ the currently only one /pci@f2000000 node for the PCI bus with devices. If I add another node named pci _after_ the current pci node then I don't get the problem. Also if I add a node with device type pci but not named pci before the current node that also works. Only breaks if there's a node named pci (even if it does not have pci as type) and that comes before the pci@f2000000 node. (The real machine has 3 of these pci nodes by the way so not sure why this could cause a problem on QEMU.) So looks like it's related to parsing pci nodes in the device tree (nodes that are named pci). Where are these handled in kernel? Regards, BALATON Zoltan >> I don't remember related fixes (nor see any in the CHANGES-9.2 file), so >> maybe >> it is just pure luck that 9.2 boots (because the corruption hits in a >> different >> location). > > I also saw errors about claim and out of memory with some other versions so > could be OpenBIOS allocates memory differently than Apple's OpenFirmware and > this collides with the kernel data somehow? I've tried enabling OpenBIOS > client interface debug and got this when booting NetBSD-8.0-macppc.iso: > >>> claim(0x00000000, 4096, 4096) = 0x1feff000 >>> claim(0x00000000, 12288, 4096) = 0x1fefc000 >>> claim(0x00000000, 20480, 4096) = 0x1fef7000 >>> claim(0x00000000, 8192, 4096) = 0x1fef5000 >>> claim(0x00000000, 36864, 4096) = 0x1feec000 >>> claim(0x00000000, 4096, 4096) = 0x1feeb000 > 6075428+127808>> claim(0x00000000, 4096, 4096) = 0x1feea000 > > But I think these are made by ofwboot.xcf so don't know what happens after > that. > >> Would it help if we print the memory range where the MD image lives >> early and you could use qemu tracing to catch any writes to that range >> afterwards? The range is probably constant for consecutive boots with >> the same args and the MD file system should still be read-only at the >> point where it crashes for you. > > I don't know how can I trace writes but I can dump memory and look at the > result. The netbsd-GENERIC_MD (from that 8,0 iso) ELF file says: > > Idx Name Size VMA LMA File off Algn > 11 .data 002c668c 00a1ad80 00a1ad80 0091ae00 2**6 > > But I could not find it at the load address, I've found most of it in memory > at 0x4383C0 but there are ranges in it that are different comparing data from > the ELF file and in memory at (decimal) offsets: > 10-29 > 35-37 > 44-45 > 62-64 > 67-69 > 79-81 > 83-85 > 87-89 > 91-93 > 101 > 378-385 > 389 > 404-405 > 408-409 > 412-413 > 583-585 > 619-621 > 627-629 > 635-637 > 639-641 > 643-645 > 657 > then they are the same until > 2227271-2227373 > 2622103- > > The differences don't look something I recognise but near the end the memory > is mostly zeroed with some strings from device tree while the .data segment > still has data there so maybe something is using the memory overlapping the > end of the loaded MD image? (In the .data part I see copyright messages by > Express Logic Inc. ThreadX THUMB-F/ARM Version G3.0f.3.0b where memory has > already 0s and some stings from device tree.) Where should the MD image be > loaded and what and how decides the location of it in memory? > > The intereting thing is that it only happens if I add another /pci node. If I > name it differently then it boots, if I add only a /pci node with device-type > pci and no other info it also breaks so looks like processing these /pci > nodes make it use memory that overwrites the ram disk somehow? > > Here are the logs from the boot which has some memory addresses but I don't > know how to understand them: > > s>> et_property: NULL phandle > >>> ============================================================= >>> OpenBIOS 1.1 [Oct 16 2021 13:31] >>> Configuration device id QEMU version 1 machine id 1 >>> CPUs: 1 >>> Memory: 512M >>> UUID: 00000000-0000-0000-0000-000000000000 >>> CPU type PowerPC,G4 > milliseconds isn't unique. > Welcome to OpenBIOS v1.1 built on Oct 16 2021 13:31 > Trying cd:,\ofwboot.xcf... >>> switching to new context: > Invalid form of CMPI at 0x00e00038, L = 1 > >>> NetBSD/macppc OpenFirmware Boot, Revision 1.12 (Tue Jul 17 14:59:51 UTC >>> 2018) > open /netbsd: No such file or directory > open /netbsd.gz: No such file or directory > 6075428+127808=0x5eab28 > start=0x100000 > mem region 0 start=0 size=20000000 > avail region 0 start=0x4000 size=0x3ffc000 > avail region 1 start=0x4800000 size=0x1b458000 > avail region 2 start=0x1fe10000 size=0xda000 > Copyright (c) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, > 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017, > 2018 The NetBSD Foundation, Inc. All rights reserved. > Copyright (c) 1982, 1986, 1989, 1991, 1993 > The Regents of the University of California. All rights reserved. > > NetBSD 8.0 (INSTALL) #0: Tue Jul 17 14:59:51 UTC 2018 > > [email protected]:/usr/src/sys/arch/macppc/compile/INSTALL > total memory = 512 MB > avail memory = 482 MB > found openpic PIC at 80040000 > OpenPIC Version 1.2: Supports 1 CPUs and 64 interrupt sources. > bootpath: /pci@f2000000/mac-io@c/ata-3@21000/cdrom@0:0/netbsd.macppc > > If this loads 0x5eab28 bytes from 0x100000 (although 6075428+127808 is 5EA764 > when I calculate it) then that lasts until 0x6eab28 then the end of it would > be around 0x4383c0 but that's less than the data segment size as > 6EAB28-2C668C is 42449C (and there are other segments in the file too so it's > not loaded linearly anyway). > > Regards, > BALATON Zoltan >