[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Qemu-devel] segfault due to missing qdev_create()?
From: |
Markus Armbruster |
Subject: |
Re: [Qemu-devel] segfault due to missing qdev_create()? |
Date: |
Sat, 21 Aug 2010 12:19:57 +0200 |
User-agent: |
Gnus/5.13 (Gnus v5.13) Emacs/23.1 (gnu/linux) |
Hollis Blanchard <address@hidden> writes:
> I am able to run qemu with the following commandline:
> /usr/local/bin/qemu-system-ppcemb -enable-kvm -kernel uImage.bamboo
> -nographic -M bamboo ppc440-angstrom-linux.img
>
> However, when I try to use virtio instead, I get this segfault:
> /usr/local/bin/qemu-system-ppcemb -enable-kvm -kernel uImage.bamboo
> -drive file=ppc440-angstrom-linux.img,if=virtio -nographic -M bamboo
>
> #0 0x1009864c in qbus_find_recursive (bus=0x0, name=0x0, info=0x10287238)
> at /home/hollisb/work/qemu.git/hw/qdev.c:461
> #1 0x10099cc4 in qdev_device_add (opts=0x108a07a0)
> at /home/hollisb/work/qemu.git/hw/qdev.c:229
> #2 0x101a4220 in device_init_func (opts=<value optimized out>,
> opaque=<value optimized out>) at /home/hollisb/work/qemu.git/vl.c:1519
> #3 0x1002baf8 in qemu_opts_foreach (list=<value optimized out>,
> func=0x101a4204 <device_init_func>, opaque=0x0,
> abort_on_failure=<value optimized out>) at qemu-option.c:978
> #4 0x101a68e0 in main (argc=<value optimized out>,
> argv=<value optimized out>, envp=<value optimized out>)
> at /home/hollisb/work/qemu.git/vl.c:2890
>
> This patch avoids the segfault, but just gives me this message: No
> 'PCI' bus found for device 'virtio-blk-pci'
>
> diff --git a/hw/qdev.c b/hw/qdev.c
> index e99c73f..8fe4f06 100644
> --- a/hw/qdev.c
> +++ b/hw/qdev.c
> @@ -455,6 +455,9 @@ static BusState *qbus_find_recursive(BusState *bus, const
> ch
> BusState *child, *ret;
> int match = 1;
>
> + if (!bus)
> + return NULL;
> +
> if (name && (strcmp(bus->name, name) != 0)) {
> match = 0;
> }
Is your main_system_bus still null?
We should report the problem, not crash, of course.
>
> FWIW, hw/ppc4xx_pci.c is my PCI controller. Do I need to add some qdev
> magic to that file to make this work?
Yes, you need to convert the device providing your PCI bus to qdev
before you can use any qdevified PCI devices.
piix_pci.c could serve as an example. qdev works starts with commit
8a14daa5.
My KVM Forum slides might help with the basics:
http://www.linux-kvm.org/wiki/images/f/fe/2010-forum-armbru-qdev.pdf
I can try to assist and advice, just ask.