On Tue, Nov 08, 2011 at 11:40:20AM +0100, Andreas Färber wrote: > Hello, > > On openSUSE 12.1 RC2 x86_64 host > > $ ppc64-softmmu/qemu-system-ppc64 -M pseries -L .../pc-bios > > segfaults. Backtrace: > > Program received signal SIGSEGV, Segmentation fault. > 0x0000000000578a7e in spapr_create_phb (spapr=0x1247f80, busname= > 0x77f1b2 "pci", buid=<optimized out>, mem_win_addr=<optimized out>, > mem_win_size=536870912, io_win_addr=1101659111424) > at /home/andreas/QEMU/qemu/hw/spapr_pci.c:306 > 306 QLIST_INSERT_HEAD(&spapr->phbs, phb, list); > (gdb) bt > #0 0x0000000000578a7e in spapr_create_phb (spapr=0x1247f80, busname= > 0x77f1b2 "pci", buid=<optimized out>, mem_win_addr=<optimized out>, > mem_win_size=536870912, io_win_addr=1101659111424) > at /home/andreas/QEMU/qemu/hw/spapr_pci.c:306 > #1 0x00000000005760f8 in ppc_spapr_init (ram_size=134217728, boot_device= > 0x7fffffffdd50 "cad", kernel_filename=0x0, kernel_cmdline=0x69d000 "", > initrd_filename=0x0, cpu_model=0x7ab640 "POWER7") > at /home/andreas/QEMU/qemu/hw/spapr.c:507 > #2 0x000000000040a4a9 in main (argc=<optimized out>, argv=<optimized out>, > envp=<optimized out>) at /home/andreas/QEMU/qemu/vl.c:3340 > > I'd expect seeing SLOF boot.
That'll be due to the missing initialization of the sPAPREnvironment structure, and the phbs_list in particular. I sent a fix for it, but I'm wondering if something went wrong with the mail, because no-one replied and now I can't seem to find it in the qemu-devel archives. >From cbcfb3b04ec8306697509a48dada8fed07dcdc28 Mon Sep 17 00:00:00 2001 From: David Gibson <da...@gibson.dropbear.id.au> Date: Wed, 2 Nov 2011 12:20:25 +1100 Subject: [PATCH] pseries: Fix initialization of sPAPREnvironment structure Since we added PCI support to the pseries machine, we include a qlist of PCI host bridges in the sPAPREnvironment structure. However this list was never properly initialized it. Somehow we got away with this until some other recent change broke it, and we now segfault immediately on startup. This patch adds the required QLIST_INIT(), and while we're at it makes sure we initialize the rest of the sPAPREnvironment structure to 0, to avoid future nasty surprises. Signed-off-by: David Gibson <da...@gibson.dropbear.id.au> --- hw/spapr.c | 4 +++- 1 files changed, 3 insertions(+), 1 deletions(-) diff --git a/hw/spapr.c b/hw/spapr.c index bdaa938..40cfc9b 100644 --- a/hw/spapr.c +++ b/hw/spapr.c @@ -407,7 +407,9 @@ static void ppc_spapr_init(ram_addr_t ram_size, long pteg_shift = 17; char *filename; - spapr = g_malloc(sizeof(*spapr)); + spapr = g_malloc0(sizeof(*spapr)); + QLIST_INIT(&spapr->phbs); + cpu_ppc_hypercall = emulate_spapr_hypercall; /* Allocate RMA if necessary */ -- 1.7.7.1 -- David Gibson | I'll have my music baroque, and my code david AT gibson.dropbear.id.au | minimalist, thank you. NOT _the_ _other_ | _way_ _around_! http://www.ozlabs.org/~dgibson