[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [RFC] qdict: issue about usb controller hot-plug/unplug
From: |
Gonglei (Arei) |
Subject: |
[Qemu-devel] [RFC] qdict: issue about usb controller hot-plug/unplug |
Date: |
Tue, 27 May 2014 08:28:45 +0000 |
Hi,
Those day, I'm working for usb controller hot-plugging/unplugging(
not enable multifunction capability). Everything work well, but when
I test the case of hot-plug/unplug reiteratively, qemu will be aborted:
qemu-system-x86_64: qobject/qdict.c:432: qentry_destroy: Assertion `e->value !=
((void *)0)' failed.
the backtrace is:
Program received signal SIGABRT, Aborted.
0x00007ffd95ec2b55 in raise () from /lib64/libc.so.6
(gdb) bt
#0 0x00007ffd95ec2b55 in raise () from /lib64/libc.so.6
#1 0x00007ffd95ec4131 in abort () from /lib64/libc.so.6
#2 0x00007ffd95ebba10 in __assert_fail () from /lib64/libc.so.6
#3 0x00007ffd98efcc66 in qentry_destroy (e=0x7ffd9996ebe8) at
qobject/qdict.c:432
#4 0x00007ffd98efce0d in qdict_destroy_obj (obj=0x7ffd998e0090) at
qobject/qdict.c:472
#5 0x00007ffd98e64446 in qobject_decref (obj=0x7ffd998e0090) at
/mnt/sdb/gonglei/code/qemu/include/qapi/qmp/qobject.h:100
#6 0x00007ffd98e6ccae in handle_user_command (mon=0x7ffd9982e160,
cmdline=0x7ffd998447e0 "device_add usb-ehci,id=ehci")
at /mnt/sdb/gonglei/code/qemu/monitor.c:4163
#7 0x00007ffd98e6ee1a in monitor_command_cb (opaque=0x7ffd9982e160,
cmdline=0x7ffd998447e0 "device_add usb-ehci,id=ehci",
readline_opaque=0x0) at /mnt/sdb/gonglei/code/qemu/monitor.c:5021
#8 0x00007ffd98f1ccbc in readline_handle_byte (rs=0x7ffd998447e0, ch=13) at
util/readline.c:376
#9 0x00007ffd98e6ed62 in monitor_read (opaque=0x7ffd9982e160,
buf=0x7fff034c8600 "\r\207L\003\377\177", size=1)
at /mnt/sdb/gonglei/code/qemu/monitor.c:5004
#10 0x00007ffd98d653cd in qemu_chr_be_write (s=0x7ffd998306a0,
buf=0x7fff034c8600 "\r\207L\003\377\177", len=1) at qemu-char.c:165
#11 0x00007ffd98d6705f in fd_chr_read (chan=0x7ffd9982c950, cond=G_IO_IN,
opaque=0x7ffd998306a0) at qemu-char.c:848
#12 0x00007ffd979ac69a in g_main_context_dispatch () from
/usr/lib64/libglib-2.0.so.0
#13 0x00007ffd98d30431 in glib_pollfds_poll () at main-loop.c:190
#14 0x00007ffd98d30529 in os_host_main_loop_wait (timeout=981534) at
main-loop.c:235
#15 0x00007ffd98d3061b in main_loop_wait (nonblocking=0) at main-loop.c:484
#16 0x00007ffd98dc8191 in main_loop () at vl.c:2075
#17 0x00007ffd98dcf732 in main (argc=18, argv=0x7fff034c9bf8,
envp=0x7fff034c9c90) at vl.c:4556
Debug reiteratively, I find the conflict of memory.
Qemu command line:
./qemu-system-x86_64 -enable-kvm -m 4096 -smp 4 -name win7 -boot c -drive
file=/mnt/sdb/gonglei/image/win7_32_2U -vnc 0.0.0.0:10 -monitor stdio
QEMU 2.0.50 monitor - type 'help' for more information
(qemu) device_add usb-ehci,id=ehci
gdb steps as below:
Breakpoint 4, handle_user_command (mon=0x7fb8d242f160, cmdline=0x7fb8d24457e0
"device_add usb-ehci,id=ehci")
at /mnt/sdb/gonglei/code/qemu/monitor.c:4142
4142 cmd = monitor_parse_command(mon, cmdline, 0, mon->cmd_table, qdict);
(gdb) p &qdict->table[262] // Gonglei: according to the tested result
before, the qdict->table[262]'s memory will conflict
$4 = (struct {...} *) 0x7fb8d2535848
(gdb) watch *(long *)0x7fb8d2535848
Hardware watchpoint 9: *(long *)0x7fb8d2535848
(gdb) c
Continuing.
[Thread 0x7fb8cc645700 (LWP 11554) exited]
Hardware watchpoint 9: *(long *)0x7fb8d2535848
Old value = 0
New value = 140431779094136
0x00007fb8d18ee15a in usb_bus_new (bus=0x7fb8d24ede78, bus_size=192,
ops=0x7fb8d1f365d0 <ehci_bus_ops>, host=0x7fb8d24ed6e0)
at hw/usb/bus.c:87
87 QTAILQ_INSERT_TAIL(&busses, bus, next);
(gdb) bt
#0 0x00007fb8d18ee15a in usb_bus_new (bus=0x7fb8d24ede78, bus_size=192,
ops=0x7fb8d1f365d0 <ehci_bus_ops>, host=0x7fb8d24ed6e0)
at hw/usb/bus.c:87
#1 0x00007fb8d191043b in usb_ehci_realize (s=0x7fb8d24ede78,
dev=0x7fb8d24ed6e0, errp=0x0) at hw/usb/hcd-ehci.c:2536
#2 0x00007fb8d1908a51 in usb_ehci_pci_initfn (dev=0x7fb8d24ed6e0) at
hw/usb/hcd-ehci-pci.c:66
#3 0x00007fb8d18bec1b in pci_qdev_init (qdev=0x7fb8d24ed6e0) at
hw/pci/pci.c:1769
#4 0x00007fb8d1841dd1 in device_realize (dev=0x7fb8d24ed6e0,
errp=0x7ffffa7f6af8) at hw/core/qdev.c:182
#5 0x00007fb8d1843871 in device_set_realized (obj=0x7fb8d24ed6e0, value=true,
errp=0x7ffffa7f6c98) at hw/core/qdev.c:757
#6 0x00007fb8d1988cac in property_set_bool (obj=0x7fb8d24ed6e0,
v=0x7fb8d25c05b0, opaque=0x7fb8d2568b90, name=
0x7fb8d1b58b11 "realized", errp=0x7ffffa7f6c98) at qom/object.c:1428
#7 0x00007fb8d19874c1 in object_property_set (obj=0x7fb8d24ed6e0,
v=0x7fb8d25c05b0, name=0x7fb8d1b58b11 "realized", errp=
0x7ffffa7f6c98) at qom/object.c:826
#8 0x00007fb8d19893e9 in object_property_set_qobject (obj=0x7fb8d24ed6e0,
value=0x7fb8d257b630, name=0x7fb8d1b58b11 "realized",
errp=0x7ffffa7f6c98) at qom/qom-qobject.c:24
#9 0x00007fb8d1987869 in object_property_set_bool (obj=0x7fb8d24ed6e0,
value=true, name=0x7fb8d1b58b11 "realized", errp=
0x7ffffa7f6c98) at qom/object.c:890
#10 0x00007fb8d196587a in qdev_device_add (opts=0x7fb8d2548030) at
qdev-monitor.c:560
#11 0x00007fb8d1965e8e in do_device_add (mon=0x7fb8d242f160,
qdict=0x7fb8d2535000, ret_data=0x7ffffa7f6d78) at qdev-monitor.c:677
#12 0x00007fb8d1a6dc47 in handle_user_command (mon=0x7fb8d242f160,
cmdline=0x7fb8d24457e0 "device_add usb-ehci,id=ehci")
at /mnt/sdb/gonglei/code/qemu/monitor.c:4153
#13 0x00007fb8d1a6fe60 in monitor_command_cb (opaque=0x7fb8d242f160,
cmdline=0x7fb8d24457e0 "device_add usb-ehci,id=ehci",
readline_opaque=0x0) at /mnt/sdb/gonglei/code/qemu/monitor.c:5027
#14 0x00007fb8d1b1ddec in readline_handle_byte (rs=0x7fb8d24457e0, ch=13) at
util/readline.c:376
#15 0x00007fb8d1a6fda8 in monitor_read (opaque=0x7fb8d242f160,
buf=0x7ffffa7f6f00 "\rp\177\372\377\177", size=1)
at /mnt/sdb/gonglei/code/qemu/monitor.c:5010
#16 0x00007fb8d19663cd in qemu_chr_be_write (s=0x7fb8d24316a0,
buf=0x7ffffa7f6f00 "\rp\177\372\377\177", len=1) at qemu-char.c:165
#17 0x00007fb8d196805f in fd_chr_read (chan=0x7fb8d242d950, cond=G_IO_IN,
opaque=0x7fb8d24316a0) at qemu-char.c:848
#18 0x00007fb8d05ad69a in g_main_context_dispatch () from
/usr/lib64/libglib-2.0.so.0
#19 0x00007fb8d1931431 in glib_pollfds_poll () at main-loop.c:190
#20 0x00007fb8d1931529 in os_host_main_loop_wait (timeout=976765) at
main-loop.c:235
#21 0x00007fb8d193161b in main_loop_wait (nonblocking=0) at main-loop.c:484
#22 0x00007fb8d19c9191 in main_loop () at vl.c:2075
#23 0x00007fb8d19d0732 in main (argc=18, argv=0x7ffffa7f84f8,
envp=0x7ffffa7f8590) at vl.c:4556
(gdb) p busses
$5 = {tqh_first = 0x7fb8d24d0cb0, tqh_last = 0x7fb8d2535848}
(gdb) p busses->tqh_last
$6 = (struct USBBus **) 0x7fb8d2535848
(gdb) p *busses->tqh_last
$7 = (struct USBBus *) 0x7fb8d24ede78
(gdb) p **busses->tqh_last
$8 = {qbus = {obj = {class = 0x7fb8d2424690, free = 0x0, properties =
{tqh_first = 0x7fb8d24f0320, tqh_last = 0x7fb8d2547fa0},
ref = 1, parent = 0x7fb8d24ed6e0}, parent = 0x7fb8d24ed6e0, name =
0x7fb8d24bb3e0 "ehci.0", allow_hotplug = 1,
hotplug_handler = 0x0, max_index = 0, realized = false, children =
{tqh_first = 0x0, tqh_last = 0x7fb8d24eded0}, sibling = {
le_next = 0x0, le_prev = 0x7fb8d24ed758}}, ops = 0x7fb8d1f365d0
<ehci_bus_ops>, busnr = 5, nfree = 0, nused = 0, free = {
tqh_first = 0x0, tqh_last = 0x7fb8d24edf08}, used = {tqh_first = 0x0,
tqh_last = 0x7fb8d24edf18}, next = {tqe_next = 0x0,
tqe_prev = 0x7fb8d2535848}}
(gdb) c
Continuing.
Program received signal SIGABRT, Aborted.
0x00007fb8ceac3b55 in raise () from /lib64/libc.so.6
(gdb) bt
#0 0x00007fb8ceac3b55 in raise () from /lib64/libc.so.6
#1 0x00007fb8ceac5131 in abort () from /lib64/libc.so.6
#2 0x00007fb8ceabca10 in __assert_fail () from /lib64/libc.so.6
#3 0x00007fb8d1afdd1e in qentry_destroy (e=0x7fb8d24ede78) at
qobject/qdict.c:435
#4 0x00007fb8d1afdf3a in qdict_destroy_obj (obj=0x7fb8d2535000) at
qobject/qdict.c:484
#5 0x00007fb8d1a65446 in qobject_decref (obj=0x7fb8d2535000) at
/mnt/sdb/gonglei/code/qemu/include/qapi/qmp/qobject.h:100
#6 0x00007fb8d1a6dcf4 in handle_user_command (mon=0x7fb8d242f160,
cmdline=0x7fb8d24457e0 "device_add usb-ehci,id=ehci")
at /mnt/sdb/gonglei/code/qemu/monitor.c:4169
#7 0x00007fb8d1a6fe60 in monitor_command_cb (opaque=0x7fb8d242f160,
cmdline=0x7fb8d24457e0 "device_add usb-ehci,id=ehci",
readline_opaque=0x0) at /mnt/sdb/gonglei/code/qemu/monitor.c:5027
#8 0x00007fb8d1b1ddec in readline_handle_byte (rs=0x7fb8d24457e0, ch=13) at
util/readline.c:376
#9 0x00007fb8d1a6fda8 in monitor_read (opaque=0x7fb8d242f160,
buf=0x7ffffa7f6f00 "\rp\177\372\377\177", size=1)
at /mnt/sdb/gonglei/code/qemu/monitor.c:5010
#10 0x00007fb8d19663cd in qemu_chr_be_write (s=0x7fb8d24316a0,
buf=0x7ffffa7f6f00 "\rp\177\372\377\177", len=1) at qemu-char.c:165
#11 0x00007fb8d196805f in fd_chr_read (chan=0x7fb8d242d950, cond=G_IO_IN,
opaque=0x7fb8d24316a0) at qemu-char.c:848
#12 0x00007fb8d05ad69a in g_main_context_dispatch () from
/usr/lib64/libglib-2.0.so.0
#13 0x00007fb8d1931431 in glib_pollfds_poll () at main-loop.c:190
#14 0x00007fb8d1931529 in os_host_main_loop_wait (timeout=976765) at
main-loop.c:235
#15 0x00007fb8d193161b in main_loop_wait (nonblocking=0) at main-loop.c:484
#16 0x00007fb8d19c9191 in main_loop () at vl.c:2075
#17 0x00007fb8d19d0732 in main (argc=18, argv=0x7ffffa7f84f8,
envp=0x7ffffa7f8590) at vl.c:4556
(gdb) f 4
#4 0x00007fb8d1afdf3a in qdict_destroy_obj (obj=0x7fb8d2535000) at
qobject/qdict.c:484
484 qentry_destroy(entry);
(gdb) p *qdict
$11 = {base = {type = 0x7fb8d1eecd20 <qdict_type>, refcnt = 0}, size = 2, table
= {{lh_first = 0x0} <repeats 262 times>, {
lh_first = 0x7fb8d24ede78}, {lh_first = 0x0} <repeats 223 times>,
{lh_first = 0x7fb8d24e8440}, {lh_first =
0x0} <repeats 25 times>}}
(gdb) p *entry
$12 = {key = 0x7fb8d2424690 " address@hidden", value = 0x0, next = {le_next =
0x7fb8d24f0320, le_prev = 0x7fb8d2547fa0}}
(gdb)
I don't know why the new qdict address will conflict with the global usb
busses. tqh_last?
Any ideas? Thanks!
Best regards,
-Gonglei
- [Qemu-devel] [RFC] qdict: issue about usb controller hot-plug/unplug,
Gonglei (Arei) <=