Patchwork [TestDay] ppc64 pseries segfault

login
register
mail settings
Submitter David Gibson
Date Nov. 9, 2011, 1:41 a.m.
Message ID <20111109014118.GF8168@truffala.fritz.box>
Download mbox | patch
Permalink /patch/124468/
State New
Headers show

Comments

David Gibson - Nov. 9, 2011, 1:41 a.m.
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 <david@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 <david@gibson.dropbear.id.au>
---
 hw/spapr.c |    4 +++-
 1 files changed, 3 insertions(+), 1 deletions(-)
Alexander Graf - Nov. 9, 2011, 1:46 a.m.
On 09.11.2011, at 02:41, David Gibson wrote:

> 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.

I got it, no worries. It just didn't make it for rc1, but will be in rc2! Sorry for being so unresponsive recently - I was on the road for 3 weeks O_o.


Alex
Andreas Färber - Nov. 9, 2011, 1:52 a.m.
Am 09.11.2011 02:41, schrieb David Gibson:
> 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.

Thanks. No, I remember reading it now. Just expected all such bug fixes
for 1.0 to be in rc1 already. Unfortunate timing for the big Test Day.

Andreas

> 
> From cbcfb3b04ec8306697509a48dada8fed07dcdc28 Mon Sep 17 00:00:00 2001
> From: David Gibson <david@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 <david@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 */
Alexander Graf - Nov. 9, 2011, 2:03 a.m.
On 09.11.2011, at 02:52, Andreas Färber wrote:

> Am 09.11.2011 02:41, schrieb David Gibson:
>> 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.
> 
> Thanks. No, I remember reading it now. Just expected all such bug fixes
> for 1.0 to be in rc1 already. Unfortunate timing for the big Test Day.

Well, it's mostly been unfortunate scheduling for my travelings :). But yes, unfortunate it was indeed.


Alex

Patch

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 */