Message ID | 20170425104116.31435-1-dgilbert@redhat.com |
---|---|
State | New |
Headers | show |
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
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