qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Qemu-devel] [PATCH v6 02/27] bootindex: add del_boot_device_path fu


From: Gonglei (Arei)
Subject: Re: [Qemu-devel] [PATCH v6 02/27] bootindex: add del_boot_device_path function
Date: Wed, 3 Sep 2014 06:45:56 +0000





Best regards,
-Gonglei


> -----Original Message-----
> From: Gerd Hoffmann [mailto:address@hidden
> Sent: Wednesday, September 03, 2014 2:25 PM
> To: Gonglei (Arei)
> Cc: Eduardo Habkost; address@hidden; address@hidden;
> address@hidden; address@hidden; address@hidden;
> address@hidden; address@hidden; address@hidden;
> address@hidden; address@hidden; address@hidden;
> address@hidden; address@hidden; address@hidden;
> address@hidden; address@hidden; chenliang (T); Huangweidong (C);
> Luonengjun; Huangpeng (Peter); address@hidden
> Subject: Re: [PATCH v6 02/27] bootindex: add del_boot_device_path function
> Importance: High
> 
> 
>   Hi,
> 
> > 4. When we hotplug the virtio-net-pci device, only pass virtio-net-pci's 
> > pointer
> to
> > del_boot_device_path(). But virtio-net-pci != virtio-net-device, so I add a
> function
> > named is_same_fw_dev_path() to handle this situation.
> 
> When hot-unplugging virtio-net-pci I'd expect we free both
> virtio-net-pci and virtio-net-device (and therefore call
> del_boot_device_path twice, once for each device).  Can you check that?
> 
Yes, I can. 

The del_boot_device_path() is called only once, just for virtio-net-pci.
For its child, virtio-net-devcie's resource is cleaned by qbus->child 
unrealizing 
process, will not call device_finalize().

Command line:

# ./qemu-system-x86_64 -enable-kvm -m 4096 -smp 4 -name redhat6.2 -drive 
file=/mnt/sdb/gonglei/image/win7_32_2U,if=none,id=drive-ide0-0-0 -device 
ide-hd,bus=ide.0,unit=0,drive=drive-ide0-0-0,id=ide0-0-0,bootindex=1 -drive 
file=/mnt/sdb/gonglei/iso/rhel-server-7.0-x86_64-dvd.iso,if=none,id=drive-ide0-0-1
 -device ide-cd,bus=ide.0,unit=1,drive=drive-ide0-0-1,id=ide0-0-1,bootindex=4 
-vnc 0.0.0.0:10 -netdev type=user,id=net0 -device 
virtio-net-pci,netdev=net0,bootindex=3,id=nic1
QEMU 2.1.50 monitor - type 'help' for more information
(qemu) device_del nic1
(qemu)

The below is the backtrace by gdb:

Breakpoint 1, virtio_net_device_unrealize (dev=0x7f1b1ea87d58, 
errp=0x7f1b17d8c350)
    at /mnt/sdb/gonglei/qemu.git/qemu/hw/net/virtio-net.c:1649
1649    {
(gdb) bt
#0  virtio_net_device_unrealize (dev=0x7f1b1ea87d58, errp=0x7f1b17d8c350)
    at /mnt/sdb/gonglei/qemu.git/qemu/hw/net/virtio-net.c:1649
#1  0x00007f1b1dd69b71 in virtio_device_unrealize (dev=0x7f1b1ea87d58, 
errp=0x7f1b17d8c3c8)
    at /mnt/sdb/gonglei/qemu.git/qemu/hw/virtio/virtio.c:1312
#2  0x00007f1b1de8a1a4 in device_set_realized (obj=0x7f1b1ea87d58, value=false, 
errp=0x7f1b17d8c568) at hw/core/qdev.c:885
#3  0x00007f1b1dfa01f7 in property_set_bool (obj=0x7f1b1ea87d58, 
v=0x7f1b1eb29de0, opaque=0x7f1b1eaa72c0, name=
    0x7f1b1e0c2b69 "realized", errp=0x7f1b17d8c568) at qom/object.c:1467
#4  0x00007f1b1df9e82f in object_property_set (obj=0x7f1b1ea87d58, 
v=0x7f1b1eb29de0, name=0x7f1b1e0c2b69 "realized", errp=
    0x7f1b17d8c568) at qom/object.c:814
#5  0x00007f1b1dfa0c45 in object_property_set_qobject (obj=0x7f1b1ea87d58, 
value=0x7f1b1eb09c80, name=0x7f1b1e0c2b69 "realized", 
    errp=0x7f1b17d8c568) at qom/qom-qobject.c:24
#6  0x00007f1b1df9ebd7 in object_property_set_bool (obj=0x7f1b1ea87d58, 
value=false, name=0x7f1b1e0c2b69 "realized", errp=
    0x7f1b17d8c568) at qom/object.c:878
#7  0x00007f1b1de893fa in bus_set_realized (obj=0x7f1b1ea87ce0, value=false, 
errp=0x7f1b17d8c718) at hw/core/qdev.c:583
#8  0x00007f1b1dfa01f7 in property_set_bool (obj=0x7f1b1ea87ce0, 
v=0x7f1b1ead5a10, opaque=0x7f1b1eaa1640, name=
    0x7f1b1e0c2b69 "realized", errp=0x7f1b17d8c718) at qom/object.c:1467
#9  0x00007f1b1df9e82f in object_property_set (obj=0x7f1b1ea87ce0, 
v=0x7f1b1ead5a10, name=0x7f1b1e0c2b69 "realized", errp=
    0x7f1b17d8c718) at qom/object.c:814
#10 0x00007f1b1dfa0c45 in object_property_set_qobject (obj=0x7f1b1ea87ce0, 
value=0x7f1b1eb09c60, name=0x7f1b1e0c2b69 "realized", 
    errp=0x7f1b17d8c718) at qom/qom-qobject.c:24
#11 0x00007f1b1df9ebd7 in object_property_set_bool (obj=0x7f1b1ea87ce0, 
value=false, name=0x7f1b1e0c2b69 "realized", errp=
    0x7f1b17d8c718) at qom/object.c:878
#12 0x00007f1b1de8a127 in device_set_realized (obj=0x7f1b1ea87380, value=false, 
errp=0x0) at hw/core/qdev.c:875
#13 0x00007f1b1dfa01f7 in property_set_bool (obj=0x7f1b1ea87380, 
v=0x7f1b1eacf940, opaque=0x7f1b1ea89f20, name=
    0x7f1b1e0c2b69 "realized", errp=0x0) at qom/object.c:1467
#14 0x00007f1b1df9e82f in object_property_set (obj=0x7f1b1ea87380, 
v=0x7f1b1eacf940, name=0x7f1b1e0c2b69 "realized", errp=0x0)
    at qom/object.c:814
#15 0x00007f1b1dfa0c45 in object_property_set_qobject (obj=0x7f1b1ea87380, 
value=0x7f1b1eb085e0, name=0x7f1b1e0c2b69 "realized", 
    errp=0x0) at qom/qom-qobject.c:24
#16 0x00007f1b1df9ebd7 in object_property_set_bool (obj=0x7f1b1ea87380, 
value=false, name=0x7f1b1e0c2b69 "realized", errp=0x0)
    at qom/object.c:878
#17 0x00007f1b1de8a7d0 in device_unparent (obj=0x7f1b1ea87380) at 
hw/core/qdev.c:1010
#18 0x00007f1b1df9f26b in object_finalize_child_property (obj=0x7f1b1e9f4f30, 
name=0x7f1b1eaa7ba0 "nic1", opaque=0x7f1b1ea87380)
    at qom/object.c:1036
#19 0x00007f1b1df9e671 in object_property_del (obj=0x7f1b1e9f4f30, 
name=0x7f1b1eaa7ba0 "nic1", errp=0x0) at qom/object.c:778
#20 0x00007f1b1df9d692 in object_property_del_child (obj=0x7f1b1e9f4f30, 
child=0x7f1b1ea87380, errp=0x0) at qom/object.c:382
#21 0x00007f1b1df9d74b in object_unparent (obj=0x7f1b1ea87380) at 
qom/object.c:391
#22 0x00007f1b1de52317 in acpi_pcihp_eject_slot (s=0x7f1b1eaf3438, bsel=0, 
slots=8) at hw/acpi/pcihp.c:139
#23 0x00007f1b1de529b5 in pci_write (opaque=0x7f1b1eaf3438, addr=8, data=8, 
size=4) at hw/acpi/pcihp.c:277
#24 0x00007f1b1dd1e958 in memory_region_write_accessor (mr=0x7f1b1eaf4048, 
addr=8, value=0x7f1b17d8cb38, size=4, shift=0, mask=
    4294967295) at /mnt/sdb/gonglei/qemu.git/qemu/memory.c:443
#25 0x00007f1b1dd1ea94 in access_with_adjusted_size (addr=8, 
value=0x7f1b17d8cb38, size=4, access_size_min=1, access_size_max=4, 
    access=0x7f1b1dd1e8cb <memory_region_write_accessor>, mr=0x7f1b1eaf4048) at 
/mnt/sdb/gonglei/qemu.git/qemu/memory.c:480
#26 0x00007f1b1dd22061 in memory_region_dispatch_write (mr=0x7f1b1eaf4048, 
addr=8, data=8, size=4)
    at /mnt/sdb/gonglei/qemu.git/qemu/memory.c:1137
#27 0x00007f1b1dd25c10 in io_mem_write (mr=0x7f1b1eaf4048, addr=8, val=8, 
size=4) at /mnt/sdb/gonglei/qemu.git/qemu/memory.c:1973
#28 0x00007f1b1dcd01a9 in address_space_rw (as=0x7f1b1e4ed180 
<address_space_io>, addr=44552, buf=0x7f1b1dc1f000 "\b", len=4, 
    is_write=true) at /mnt/sdb/gonglei/qemu.git/qemu/exec.c:2042
#29 0x00007f1b1dd1b186 in kvm_handle_io (port=44552, data=0x7f1b1dc1f000, 
direction=1, size=4, count=1)
    at /mnt/sdb/gonglei/qemu.git/qemu/kvm-all.c:1597
#30 0x00007f1b1dd1b7c4 in kvm_cpu_exec (cpu=0x7f1b1e9f85b0) at 
/mnt/sdb/gonglei/qemu.git/qemu/kvm-all.c:1748
#31 0x00007f1b1dd02c88 in qemu_kvm_cpu_thread_fn (arg=0x7f1b1e9f85b0) at 
/mnt/sdb/gonglei/qemu.git/qemu/cpus.c:940
#32 0x00007f1b1af3b7f6 in start_thread () from /lib64/libpthread.so.0
#33 0x00007f1b1ac9709d in clone () from /lib64/libc.so.6
#34 0x0000000000000000 in ?? ()
(gdb) c
Continuing.

Breakpoint 2, device_finalize (obj=0x7f1b1ea87380) at hw/core/qdev.c:971
971     {
(gdb) bt
#0  device_finalize (obj=0x7f1b1ea87380) at hw/core/qdev.c:971
#1  0x00007f1b1df9d79b in object_deinit (obj=0x7f1b1ea87380, 
type=0x7f1b1e99a970) at qom/object.c:398
#2  0x00007f1b1df9d7bd in object_deinit (obj=0x7f1b1ea87380, 
type=0x7f1b1e990a40) at qom/object.c:402
#3  0x00007f1b1df9d7bd in object_deinit (obj=0x7f1b1ea87380, 
type=0x7f1b1e987700) at qom/object.c:402
#4  0x00007f1b1df9d7bd in object_deinit (obj=0x7f1b1ea87380, 
type=0x7f1b1e987fc0) at qom/object.c:402
#5  0x00007f1b1df9d81a in object_finalize (data=0x7f1b1ea87380) at 
qom/object.c:412
#6  0x00007f1b1df9e3d9 in object_unref (obj=0x7f1b1ea87380) at qom/object.c:719
#7  0x00007f1b1df9f280 in object_finalize_child_property (obj=0x7f1b1e9f4f30, 
name=0x7f1b1eaa7ba0 "nic1", opaque=0x7f1b1ea87380)
    at qom/object.c:1039
#8  0x00007f1b1df9e671 in object_property_del (obj=0x7f1b1e9f4f30, 
name=0x7f1b1eaa7ba0 "nic1", errp=0x0) at qom/object.c:778
#9  0x00007f1b1df9d692 in object_property_del_child (obj=0x7f1b1e9f4f30, 
child=0x7f1b1ea87380, errp=0x0) at qom/object.c:382
#10 0x00007f1b1df9d74b in object_unparent (obj=0x7f1b1ea87380) at 
qom/object.c:391
#11 0x00007f1b1de52317 in acpi_pcihp_eject_slot (s=0x7f1b1eaf3438, bsel=0, 
slots=8) at hw/acpi/pcihp.c:139
#12 0x00007f1b1de529b5 in pci_write (opaque=0x7f1b1eaf3438, addr=8, data=8, 
size=4) at hw/acpi/pcihp.c:277
#13 0x00007f1b1dd1e958 in memory_region_write_accessor (mr=0x7f1b1eaf4048, 
addr=8, value=0x7f1b17d8cb38, size=4, shift=0, mask=
    4294967295) at /mnt/sdb/gonglei/qemu.git/qemu/memory.c:443
#14 0x00007f1b1dd1ea94 in access_with_adjusted_size (addr=8, 
value=0x7f1b17d8cb38, size=4, access_size_min=1, access_size_max=4, 
    access=0x7f1b1dd1e8cb <memory_region_write_accessor>, mr=0x7f1b1eaf4048) at 
/mnt/sdb/gonglei/qemu.git/qemu/memory.c:480
#15 0x00007f1b1dd22061 in memory_region_dispatch_write (mr=0x7f1b1eaf4048, 
addr=8, data=8, size=4)
    at /mnt/sdb/gonglei/qemu.git/qemu/memory.c:1137
#16 0x00007f1b1dd25c10 in io_mem_write (mr=0x7f1b1eaf4048, addr=8, val=8, 
size=4) at /mnt/sdb/gonglei/qemu.git/qemu/memory.c:1973
#17 0x00007f1b1dcd01a9 in address_space_rw (as=0x7f1b1e4ed180 
<address_space_io>, addr=44552, buf=0x7f1b1dc1f000 "\b", len=4, 
    is_write=true) at /mnt/sdb/gonglei/qemu.git/qemu/exec.c:2042
#18 0x00007f1b1dd1b186 in kvm_handle_io (port=44552, data=0x7f1b1dc1f000, 
direction=1, size=4, count=1)
    at /mnt/sdb/gonglei/qemu.git/qemu/kvm-all.c:1597
#19 0x00007f1b1dd1b7c4 in kvm_cpu_exec (cpu=0x7f1b1e9f85b0) at 
/mnt/sdb/gonglei/qemu.git/qemu/kvm-all.c:1748
#20 0x00007f1b1dd02c88 in qemu_kvm_cpu_thread_fn (arg=0x7f1b1e9f85b0) at 
/mnt/sdb/gonglei/qemu.git/qemu/cpus.c:940
#21 0x00007f1b1af3b7f6 in start_thread () from /lib64/libpthread.so.0
#22 0x00007f1b1ac9709d in clone () from /lib64/libc.so.6
#23 0x0000000000000000 in ?? ()
(gdb) n
974         DeviceState *dev = DEVICE(obj);
(gdb) 
977         del_boot_device_path(dev);
(gdb) p *dev
$1 = {parent_obj = {class = 0x7f1b1e9b7270, free = 0x7f1b1caf1a30 <g_free>, 
properties = {tqh_first = 0x0, tqh_last = 
    0x7f1b1ea87390}, ref = 0, parent = 0x0}, id = 0x7f1b1e9cbb30 "nic1", 
realized = false, pending_deleted_event = true, opts = 
    0x7f1b1e9cb2f0, hotplugged = 0, parent_bus = 0x0, gpios = {lh_first = 0x0}, 
child_bus = {lh_first = 0x0}, num_child_bus = 0, 
  instance_id_alias = -1, alias_required_for_version = 0}
(gdb) n
[Thread 0x7f1b18770700 (LWP 13982) exited]
979         if (dev->opts) {
(gdb) info b
Num     Type           Disp Enb Address            What
1       breakpoint     keep y   0x00007f1b1dd5def2 in 
virtio_net_device_unrealize 
                                                   at 
/mnt/sdb/gonglei/qemu.git/qemu/hw/net/virtio-net.c:1649
        breakpoint already hit 1 time
2       breakpoint     keep y   0x00007f1b1de8a608 in device_finalize at 
hw/core/qdev.c:971
        breakpoint already hit 1 time
(gdb) c
Continuing.
[New Thread 0x7f1b18770700 (LWP 15096)]
[Thread 0x7f1b18770700 (LWP 15096) exited]
[New Thread 0x7f1b18770700 (LWP 16434)]
[Thread 0x7f1b18770700 (LWP 16434) exited]


reply via email to

[Prev in Thread] Current Thread [Next in Thread]