hmp-commands.hx | 32 ++++++++++ monitor.c | 101 +++++++++++++++++++++++++++++++ tests/Makefile.include | 2 + tests/libqtest.c | 36 +++++++++++ tests/libqtest.h | 12 +++- tests/pc-cpu-test.c | 95 +++++++++++------------------ tests/qom-test.c | 36 ++--------- tests/test-hmp.c | 161 +++++++++++++++++++++++++++++++++++++++++++++++++ 8 files changed, 385 insertions(+), 90 deletions(-) create mode 100644 tests/test-hmp.c
From: "Dr. David Alan Gilbert" <dgilbert@redhat.com>
The following changes since commit f4b5b021c847669b1c78050aea26fe9abceef6dd:
Merge remote-tracking branch 'remotes/cody/tags/block-pull-request' into staging (2017-04-25 09:21:54 +0100)
are available in the git repository at:
git://github.com/dagrh/qemu.git tags/pull-hmp-20170425
for you to fetch changes up to 1eb8e78dd1cd4e0b4170fd42f6d8882c867f334b:
tests: Add a tester for HMP commands (2017-04-25 11:26:52 +0100)
----------------------------------------------------------------
HMP pull with fixed test/strcmp case
----------------------------------------------------------------
Paolo Bonzini (1):
hmp: gpa2hva and gpa2hpa hostaddr command
Thomas Huth (3):
libqtest: Ignore QMP events when parsing the response for HMP commands
libqtest: Add a generic function to run a callback function for every machine
tests: Add a tester for HMP commands
hmp-commands.hx | 32 ++++++++++
monitor.c | 101 +++++++++++++++++++++++++++++++
tests/Makefile.include | 2 +
tests/libqtest.c | 36 +++++++++++
tests/libqtest.h | 12 +++-
tests/pc-cpu-test.c | 95 +++++++++++------------------
tests/qom-test.c | 36 ++---------
tests/test-hmp.c | 161 +++++++++++++++++++++++++++++++++++++++++++++++++
8 files changed, 385 insertions(+), 90 deletions(-)
create mode 100644 tests/test-hmp.c
On 25 April 2017 at 11:41, Dr. David Alan Gilbert (git) <dgilbert@redhat.com> wrote: > From: "Dr. David Alan Gilbert" <dgilbert@redhat.com> > > The following changes since commit f4b5b021c847669b1c78050aea26fe9abceef6dd: > > Merge remote-tracking branch 'remotes/cody/tags/block-pull-request' into staging (2017-04-25 09:21:54 +0100) > > are available in the git repository at: > > git://github.com/dagrh/qemu.git tags/pull-hmp-20170425 > > for you to fetch changes up to 1eb8e78dd1cd4e0b4170fd42f6d8882c867f334b: > > tests: Add a tester for HMP commands (2017-04-25 11:26:52 +0100) > > ---------------------------------------------------------------- > HMP pull with fixed test/strcmp case > > ---------------------------------------------------------------- test-hmp fails for me on OSX hosts: TEST: tests/test-hmp... (pid=6008) /aarch64/hmp/n810: qemu: qemu_mutex_lock: Invalid argument Broken pipe FAIL GTester: last random seed: R02Sd714920da46f8a0e37afec762c6ee23b (pid=6013) /aarch64/hmp/tosa: qemu: qemu_mutex_lock: Invalid argument Broken pipe FAIL GTester: last random seed: R02Sf3025925b9db75bdfdd9f09cf3119ad5 etc etc. Can't do a backtrace, I'm afraid -- Apple's debugger doesn't seem to work if you're not root and the lack of X11 forwarding on the box I'm using remotely interacts really badly with qtest's desire to run qemu as a background process that it's hard to attach a debugger to. Something's probably not initializing a mutex, though -- Linux by default treats zeroes as a valid initialized mutex so it won't notice. You may be able to repro on Linux by using the Linux PTHREAD_MUTEX_ERRORCHECK_NP mutex attr, possibly. thanks -- PMM
* Peter Maydell (peter.maydell@linaro.org) wrote: > On 25 April 2017 at 11:41, Dr. David Alan Gilbert (git) > <dgilbert@redhat.com> wrote: > > From: "Dr. David Alan Gilbert" <dgilbert@redhat.com> > > > > The following changes since commit f4b5b021c847669b1c78050aea26fe9abceef6dd: > > > > Merge remote-tracking branch 'remotes/cody/tags/block-pull-request' into staging (2017-04-25 09:21:54 +0100) > > > > are available in the git repository at: > > > > git://github.com/dagrh/qemu.git tags/pull-hmp-20170425 > > > > for you to fetch changes up to 1eb8e78dd1cd4e0b4170fd42f6d8882c867f334b: > > > > tests: Add a tester for HMP commands (2017-04-25 11:26:52 +0100) > > > > ---------------------------------------------------------------- > > HMP pull with fixed test/strcmp case > > > > ---------------------------------------------------------------- > > test-hmp fails for me on OSX hosts: > > TEST: tests/test-hmp... (pid=6008) > /aarch64/hmp/n810: > qemu: qemu_mutex_lock: Invalid argument > Broken pipe > FAIL > GTester: last random seed: R02Sd714920da46f8a0e37afec762c6ee23b > (pid=6013) > /aarch64/hmp/tosa: > qemu: qemu_mutex_lock: Invalid argument > Broken pipe > FAIL > GTester: last random seed: R02Sf3025925b9db75bdfdd9f09cf3119ad5 > etc etc. > > Can't do a backtrace, I'm afraid -- Apple's debugger doesn't seem > to work if you're not root and the lack of X11 forwarding on the > box I'm using remotely interacts really badly with qtest's > desire to run qemu as a background process that it's hard to > attach a debugger to. Something's probably not initializing > a mutex, though -- Linux by default treats zeroes as a valid > initialized mutex so it won't notice. You may be able to repro > on Linux by using the Linux PTHREAD_MUTEX_ERRORCHECK_NP > mutex attr, possibly. Hmm, does running with QTEST_LOG=1 get you any more detail? Dave > thanks > -- PMM -- Dr. David Alan Gilbert / dgilbert@redhat.com / Manchester, UK
On 25.04.2017 15:13, Peter Maydell wrote: > On 25 April 2017 at 11:41, Dr. David Alan Gilbert (git) > <dgilbert@redhat.com> wrote: >> From: "Dr. David Alan Gilbert" <dgilbert@redhat.com> >> >> The following changes since commit f4b5b021c847669b1c78050aea26fe9abceef6dd: >> >> Merge remote-tracking branch 'remotes/cody/tags/block-pull-request' into staging (2017-04-25 09:21:54 +0100) >> >> are available in the git repository at: >> >> git://github.com/dagrh/qemu.git tags/pull-hmp-20170425 >> >> for you to fetch changes up to 1eb8e78dd1cd4e0b4170fd42f6d8882c867f334b: >> >> tests: Add a tester for HMP commands (2017-04-25 11:26:52 +0100) >> >> ---------------------------------------------------------------- >> HMP pull with fixed test/strcmp case >> >> ---------------------------------------------------------------- > > test-hmp fails for me on OSX hosts: > > TEST: tests/test-hmp... (pid=6008) > /aarch64/hmp/n810: > qemu: qemu_mutex_lock: Invalid argument > Broken pipe > FAIL > GTester: last random seed: R02Sd714920da46f8a0e37afec762c6ee23b > (pid=6013) > /aarch64/hmp/tosa: > qemu: qemu_mutex_lock: Invalid argument > Broken pipe > FAIL > GTester: last random seed: R02Sf3025925b9db75bdfdd9f09cf3119ad5 What a bummer... does it only happen with aarch64 or also with the other binaries? > Can't do a backtrace, I'm afraid -- Apple's debugger doesn't seem > to work if you're not root and the lack of X11 forwarding on the > box I'm using remotely interacts really badly with qtest's > desire to run qemu as a background process that it's hard to > attach a debugger to. Something's probably not initializing > a mutex, though -- Linux by default treats zeroes as a valid > initialized mutex so it won't notice. You may be able to repro > on Linux by using the Linux PTHREAD_MUTEX_ERRORCHECK_NP > mutex attr, possibly. I tried to set that attribute in qemu_mutex_init() (assuming that this is what you meant), but it does not make a difference here on Linux - the test always succeeds. So another idea: Could you start the test in verbose mode like this: V=2 QTEST_QEMU_BINARY=aarch64-softmmu/qemu-system-aarch64 tests/test-hmp Maybe we get a hint which HMP command is causing the trouble here... Thomas
On 25 April 2017 at 15:07, Thomas Huth <thuth@redhat.com> wrote:
> So another idea: Could you start the test in verbose mode like this:
>
> V=2 QTEST_QEMU_BINARY=aarch64-softmmu/qemu-system-aarch64 tests/test-hmp
manooth$ V=2 QTEST_QEMU_BINARY='aarch64-softmmu/qemu-system-aarch64'
tests/test-hmp
/aarch64/hmp/n810: info balloon
info block
info block-jobs
info blockstats
info capture
info chardev
info cpus
info cpustats
info dump
info history
info hotpluggable-cpus
info iothreads
info irq
info jit
qemu: qemu_mutex_lock: Invalid argument
Broken pipe
thanks
-- PMM
On 25 April 2017 at 16:05, Peter Maydell <peter.maydell@linaro.org> wrote:
> info jit
> qemu: qemu_mutex_lock: Invalid argument
Repro without the qtest machinery:
$ lldb -- ./aarch64-softmmu/qemu-system-aarch64 -M n810 -s -S -monitor
stdio -machine accel=qtest
then run and type 'info jit' at the monitor prompt.
Backtrace:
* thread #1: tid = 0x66a715, 0x00007fffd1931d42
libsystem_kernel.dylib`__pthread_kill + 10, queue =
'com.apple.main-thread', stop reason = signal SIGABRT
* frame #0: 0x00007fffd1931d42 libsystem_kernel.dylib`__pthread_kill + 10
frame #1: 0x00007fffd1a1f5bf libsystem_pthread.dylib`pthread_kill + 90
frame #2: 0x00007fffd1897420 libsystem_c.dylib`abort + 129
frame #3: 0x000000010041bd05
qemu-system-aarch64`error_exit(err=<unavailable>, msg=<unavailable>) +
53 at qemu-thread-posix.c:35
frame #4: 0x000000010041bd4d
qemu-system-aarch64`qemu_mutex_lock(mutex=<unavailable>) + 29 at
qemu-thread-posix.c:62
frame #5: 0x0000000100010c7c qemu-system-aarch64`dump_exec_info
[inlined] tb_lock + 12 at translate-all.c:167
frame #6: 0x0000000100010c70
qemu-system-aarch64`dump_exec_info(f=0x00000001020b6a10,
cpu_fprintf=(qemu-system-aarch64`monitor_fprintf at monitor.c:376)) +
48 at translate-all.c:1869
frame #7: 0x0000000100048ec9
qemu-system-aarch64`hmp_info_jit(mon=0x00000001020b6a10,
qdict=<unavailable>) + 25 at monitor.c:1089
frame #8: 0x0000000100043ae5
qemu-system-aarch64`handle_hmp_command(mon=0x00000001020b6a10,
cmdline=<unavailable>) + 3589 at monitor.c:3104
frame #9: 0x000000010004262e
qemu-system-aarch64`monitor_command_cb(opaque=0x00000001020b6a10,
cmdline=<unavailable>, readline_opaque=<unavailable>) + 30 at
monitor.c:3902
frame #10: 0x000000010042d355
qemu-system-aarch64`readline_handle_byte(rs=0x00000001028f4400,
ch=<unavailable>) + 3285 at readline.c:393
frame #11: 0x0000000100046adc
qemu-system-aarch64`monitor_read(opaque=<unavailable>, buf="\n",
size=1) + 60 at monitor.c:3885
frame #12: 0x00000001003c3cd3
qemu-system-aarch64`fd_chr_read(chan=<unavailable>,
cond=<unavailable>, opaque=<unavailable>) + 179 at char-fd.c:66
frame #13: 0x00000001010b60bd
libglib-2.0.0.dylib`g_main_context_dispatch + 460
frame #14: 0x00000001004193a1 qemu-system-aarch64`main_loop_wait
[inlined] glib_pollfds_poll + 545 at main-loop.c:213
frame #15: 0x0000000100419364 qemu-system-aarch64`main_loop_wait
[inlined] os_host_main_loop_wait(timeout=<unavailable>) + 67 at
main-loop.c:261
frame #16: 0x0000000100419321
qemu-system-aarch64`main_loop_wait(nonblocking=<unavailable>) + 417 at
main-loop.c:517
frame #17: 0x000000010019a74f qemu-system-aarch64`qemu_main
[inlined] main_loop + 48 at vl.c:1898
frame #18: 0x000000010019a71f
qemu-system-aarch64`qemu_main(argc=<unavailable>, argv=<unavailable>,
envp=<unavailable>) + 18623 at vl.c:4709
frame #19: 0x000000010033d4ce
qemu-system-aarch64`-[QemuCocoaAppController
startEmulationWithArgc:argv:](self=<unavailable>, _cmd=<unavailable>,
argc=<unavailable>, argv=<unavailable>) + 30 at cocoa.m:978
frame #20: 0x00007fffbbb0252c
CoreFoundation`__CFNOTIFICATIONCENTER_IS_CALLING_OUT_TO_AN_OBSERVER__
+ 12
frame #21: 0x00007fffbbb0242b CoreFoundation`_CFXRegistrationPost + 427
frame #22: 0x00007fffbbb02192
CoreFoundation`___CFXNotificationPost_block_invoke + 50
frame #23: 0x00007fffbbac0772
CoreFoundation`-[_CFXNotificationRegistrar
find:object:observer:enumerator:] + 2018
frame #24: 0x00007fffbbabf75b CoreFoundation`_CFXNotificationPost + 667
frame #25: 0x00007fffbd500997 Foundation`-[NSNotificationCenter
postNotificationName:object:userInfo:] + 66
frame #26: 0x00007fffb9729b1f AppKit`-[NSApplication
_postDidFinishNotification] + 297
frame #27: 0x00007fffb9729884 AppKit`-[NSApplication
_sendFinishLaunchingNotification] + 208
frame #28: 0x00007fffb95ecbe9
AppKit`-[NSApplication(NSAppleEventHandling) _handleAEOpenEvent:] +
552
frame #29: 0x00007fffb95ec83b
AppKit`-[NSApplication(NSAppleEventHandling)
_handleCoreEvent:withReplyEvent:] + 661
frame #30: 0x00007fffbd54be1d Foundation`-[NSAppleEventManager
dispatchRawAppleEvent:withRawReply:handlerRefCon:] + 290
frame #31: 0x00007fffbd54bc97
Foundation`_NSAppleEventManagerGenericHandler + 102
frame #32: 0x00007fffbc950f26 AE`aeDispatchAppleEvent(AEDesc
const*, AEDesc*, unsigned int, unsigned char*) + 544
frame #33: 0x00007fffbc950c9d AE`dispatchEventAndSendReply(AEDesc
const*, AEDesc*) + 39
frame #34: 0x00007fffbc950ba9 AE`aeProcessAppleEvent + 312
frame #35: 0x00007fffbb05dddf HIToolbox`AEProcessAppleEvent + 55
frame #36: 0x00007fffb95e80ed AppKit`_DPSNextEvent + 1833
frame #37: 0x00007fffb9d6385e AppKit`-[NSApplication(NSEvent)
_nextEventMatchingEventMask:untilDate:inMode:dequeue:] + 2796
frame #38: 0x00007fffb95dc7ab AppKit`-[NSApplication run] + 926
frame #39: 0x000000010033ee44
qemu-system-aarch64`main(argc=<unavailable>, argv=<unavailable>) +
2212 at cocoa.m:1368
frame #40: 0x00007fffd1803235 libdyld.dylib`start + 1
frame #41: 0x00007fffd1803235 libdyld.dylib`start + 1
I don't think it makes a great deal of sense to be able to call into
the TCG dump_exec_info() statistics routine if we never initialized
the TCG accelerator (because we're using -accel=qtest). Not sure
it makes much sense if -accel=kvm, for that matter...
thanks
-- PMM
* Peter Maydell (peter.maydell@linaro.org) wrote: > On 25 April 2017 at 16:05, Peter Maydell <peter.maydell@linaro.org> wrote: > > info jit > > qemu: qemu_mutex_lock: Invalid argument > > Repro without the qtest machinery: > > $ lldb -- ./aarch64-softmmu/qemu-system-aarch64 -M n810 -s -S -monitor > stdio -machine accel=qtest > > then run and type 'info jit' at the monitor prompt. > Backtrace: > > * thread #1: tid = 0x66a715, 0x00007fffd1931d42 > libsystem_kernel.dylib`__pthread_kill + 10, queue = > 'com.apple.main-thread', stop reason = signal SIGABRT > * frame #0: 0x00007fffd1931d42 libsystem_kernel.dylib`__pthread_kill + 10 > frame #1: 0x00007fffd1a1f5bf libsystem_pthread.dylib`pthread_kill + 90 > frame #2: 0x00007fffd1897420 libsystem_c.dylib`abort + 129 > frame #3: 0x000000010041bd05 > qemu-system-aarch64`error_exit(err=<unavailable>, msg=<unavailable>) + > 53 at qemu-thread-posix.c:35 > frame #4: 0x000000010041bd4d > qemu-system-aarch64`qemu_mutex_lock(mutex=<unavailable>) + 29 at > qemu-thread-posix.c:62 > frame #5: 0x0000000100010c7c qemu-system-aarch64`dump_exec_info > [inlined] tb_lock + 12 at translate-all.c:167 > frame #6: 0x0000000100010c70 > qemu-system-aarch64`dump_exec_info(f=0x00000001020b6a10, > cpu_fprintf=(qemu-system-aarch64`monitor_fprintf at monitor.c:376)) + > 48 at translate-all.c:1869 > frame #7: 0x0000000100048ec9 OK, that looks like a real bug to me, in the KVM case it should fail the same way; if I understand correctly the tb_lock only gets init'd during code_gen_alloc called from tcg_init. 'info jit' needs fixing. Dave > qemu-system-aarch64`hmp_info_jit(mon=0x00000001020b6a10, > qdict=<unavailable>) + 25 at monitor.c:1089 > frame #8: 0x0000000100043ae5 > qemu-system-aarch64`handle_hmp_command(mon=0x00000001020b6a10, > cmdline=<unavailable>) + 3589 at monitor.c:3104 > frame #9: 0x000000010004262e > qemu-system-aarch64`monitor_command_cb(opaque=0x00000001020b6a10, > cmdline=<unavailable>, readline_opaque=<unavailable>) + 30 at > monitor.c:3902 > frame #10: 0x000000010042d355 > qemu-system-aarch64`readline_handle_byte(rs=0x00000001028f4400, > ch=<unavailable>) + 3285 at readline.c:393 > frame #11: 0x0000000100046adc > qemu-system-aarch64`monitor_read(opaque=<unavailable>, buf="\n", > size=1) + 60 at monitor.c:3885 > frame #12: 0x00000001003c3cd3 > qemu-system-aarch64`fd_chr_read(chan=<unavailable>, > cond=<unavailable>, opaque=<unavailable>) + 179 at char-fd.c:66 > frame #13: 0x00000001010b60bd > libglib-2.0.0.dylib`g_main_context_dispatch + 460 > frame #14: 0x00000001004193a1 qemu-system-aarch64`main_loop_wait > [inlined] glib_pollfds_poll + 545 at main-loop.c:213 > frame #15: 0x0000000100419364 qemu-system-aarch64`main_loop_wait > [inlined] os_host_main_loop_wait(timeout=<unavailable>) + 67 at > main-loop.c:261 > frame #16: 0x0000000100419321 > qemu-system-aarch64`main_loop_wait(nonblocking=<unavailable>) + 417 at > main-loop.c:517 > frame #17: 0x000000010019a74f qemu-system-aarch64`qemu_main > [inlined] main_loop + 48 at vl.c:1898 > frame #18: 0x000000010019a71f > qemu-system-aarch64`qemu_main(argc=<unavailable>, argv=<unavailable>, > envp=<unavailable>) + 18623 at vl.c:4709 > frame #19: 0x000000010033d4ce > qemu-system-aarch64`-[QemuCocoaAppController > startEmulationWithArgc:argv:](self=<unavailable>, _cmd=<unavailable>, > argc=<unavailable>, argv=<unavailable>) + 30 at cocoa.m:978 > frame #20: 0x00007fffbbb0252c > CoreFoundation`__CFNOTIFICATIONCENTER_IS_CALLING_OUT_TO_AN_OBSERVER__ > + 12 > frame #21: 0x00007fffbbb0242b CoreFoundation`_CFXRegistrationPost + 427 > frame #22: 0x00007fffbbb02192 > CoreFoundation`___CFXNotificationPost_block_invoke + 50 > frame #23: 0x00007fffbbac0772 > CoreFoundation`-[_CFXNotificationRegistrar > find:object:observer:enumerator:] + 2018 > frame #24: 0x00007fffbbabf75b CoreFoundation`_CFXNotificationPost + 667 > frame #25: 0x00007fffbd500997 Foundation`-[NSNotificationCenter > postNotificationName:object:userInfo:] + 66 > frame #26: 0x00007fffb9729b1f AppKit`-[NSApplication > _postDidFinishNotification] + 297 > frame #27: 0x00007fffb9729884 AppKit`-[NSApplication > _sendFinishLaunchingNotification] + 208 > frame #28: 0x00007fffb95ecbe9 > AppKit`-[NSApplication(NSAppleEventHandling) _handleAEOpenEvent:] + > 552 > frame #29: 0x00007fffb95ec83b > AppKit`-[NSApplication(NSAppleEventHandling) > _handleCoreEvent:withReplyEvent:] + 661 > frame #30: 0x00007fffbd54be1d Foundation`-[NSAppleEventManager > dispatchRawAppleEvent:withRawReply:handlerRefCon:] + 290 > frame #31: 0x00007fffbd54bc97 > Foundation`_NSAppleEventManagerGenericHandler + 102 > frame #32: 0x00007fffbc950f26 AE`aeDispatchAppleEvent(AEDesc > const*, AEDesc*, unsigned int, unsigned char*) + 544 > frame #33: 0x00007fffbc950c9d AE`dispatchEventAndSendReply(AEDesc > const*, AEDesc*) + 39 > frame #34: 0x00007fffbc950ba9 AE`aeProcessAppleEvent + 312 > frame #35: 0x00007fffbb05dddf HIToolbox`AEProcessAppleEvent + 55 > frame #36: 0x00007fffb95e80ed AppKit`_DPSNextEvent + 1833 > frame #37: 0x00007fffb9d6385e AppKit`-[NSApplication(NSEvent) > _nextEventMatchingEventMask:untilDate:inMode:dequeue:] + 2796 > frame #38: 0x00007fffb95dc7ab AppKit`-[NSApplication run] + 926 > frame #39: 0x000000010033ee44 > qemu-system-aarch64`main(argc=<unavailable>, argv=<unavailable>) + > 2212 at cocoa.m:1368 > frame #40: 0x00007fffd1803235 libdyld.dylib`start + 1 > frame #41: 0x00007fffd1803235 libdyld.dylib`start + 1 > > > I don't think it makes a great deal of sense to be able to call into > the TCG dump_exec_info() statistics routine if we never initialized > the TCG accelerator (because we're using -accel=qtest). Not sure > it makes much sense if -accel=kvm, for that matter... > > thanks > -- PMM -- Dr. David Alan Gilbert / dgilbert@redhat.com / Manchester, UK
© 2016 - 2026 Red Hat, Inc.