qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
From: Thomas Huth <thuth@redhat.com>
To: "Michael S. Tsirkin" <mst@redhat.com>
Cc: qemu-devel@nongnu.org, "Eric Blake" <eblake@redhat.com>,
	"Philippe Mathieu-Daudé" <f4bug@amsat.org>,
	"Markus Armbruster" <armbru@redhat.com>,
	"Tiwei Bie" <tiwei.bie@intel.com>
Subject: Re: [Qemu-devel] [PATCH] libqtest: fail if child coredumps
Date: Thu, 24 May 2018 17:46:05 +0200	[thread overview]
Message-ID: <681ace2f-f827-0e00-af77-f39dc2f7ccc1@redhat.com> (raw)
In-Reply-To: <20180524175709-mutt-send-email-mst@kernel.org>

On 24.05.2018 17:00, Michael S. Tsirkin wrote:
> On Thu, May 24, 2018 at 04:45:31PM +0200, Thomas Huth wrote:
>> On 24.05.2018 16:30, Michael S. Tsirkin wrote:
>>> Right now tests report OK status if QEMU crashes during cleanup.
>>> Let's catch that case and fail the test.
>>>
>>> Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
>>> ---
>>>  tests/libqtest.c | 9 ++++++++-
>>>  1 file changed, 8 insertions(+), 1 deletion(-)
>>>
>>> diff --git a/tests/libqtest.c b/tests/libqtest.c
>>> index 43fb97e..f869854 100644
>>> --- a/tests/libqtest.c
>>> +++ b/tests/libqtest.c
>>> @@ -103,8 +103,15 @@ static int socket_accept(int sock)
>>>  static void kill_qemu(QTestState *s)
>>>  {
>>>      if (s->qemu_pid != -1) {
>>> +        int wstatus = 0;
>>> +        pid_t pid;
>>> +
>>>          kill(s->qemu_pid, SIGTERM);
>>> -        waitpid(s->qemu_pid, NULL, 0);
>>> +        pid = waitpid(s->qemu_pid, &wstatus, 0);
>>> +
>>> +        if (pid == s->qemu_pid && WIFSIGNALED(wstatus)) {
>>> +            assert(!WCOREDUMP(wstatus));
>>> +        }
>>>      }
>>>  }
>>
>> That's basically a good idea ... but I've already seen yet another issue
>> in the past already: QEMU sometimes simply hangs in an endless loop
>> during clean up and never terminates. I think we should detect that
>> situation, too. So instead of killing QEMU at the end of the testing, I think we should
>> rather try to terminate it with the QMP "quit" command. If QEMU does not
>> terminate with an exit code of 0, then the test should be flagged a
>> failed (and only if QEMU did not terminate at all, it should be killed
>> with SIGKILL).
>>
>>  Thomas
> 
> Fine but can we agree to do this as a patch on top? And do you have
> the time to implement this?

Fine for me if we do that later. And no, I currently don't have time to
work on this (but I've got it on my TODO list somewhere, so I hope I
won't forget about it later...).

> I'm seeing patches that cause crash on cleanup, it's not a theoretical
> problem for me, so I'd like this one to go in first.

Ok, so here are the two problems that I remember:

1)

git checkout 17bd9597be45b96ae00716b0ae01a4d11bbee1ab~1
make -j4 subdir-nios2-softmmu
nios2-softmmu/qemu-system-nios2 -monitor stdio

==> You can neither "quit" from the HMP prompt, nor kill QEMU with
SIGTERM, you've got to use SIGKILL instead.

Ok, libqtest likely would not have reported success in this case, too,
we just did not notice since there is no libqtest in place that tests
the nios2 machine in TCG mode. Anyway, it would be nice if qtest would
properly detect the situation and report an error instead of just
hanging in waitpid().

2)

git checkout b39b61e410022f96ceb53d4381d25cba5126ac44~1
make -j4 subdir-ppc-softmmu
ppc-softmmu/qemu-system-ppc -M 40p -monitor stdio

===> QEMU asserts here with both, HMP "quit" and SIGTERM. This was the
problem where libqtest did not report an error though it should have
reported one. So QEMU was not hanging in an endless loop here, but core
dumped ... Sorry, I apparently mixed this up in my mind with the first
case. That means we should be fine here with your patch.

 Thomas

  parent reply	other threads:[~2018-05-24 15:46 UTC|newest]

Thread overview: 26+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-05-24 14:30 [Qemu-devel] [PATCH] libqtest: fail if child coredumps Michael S. Tsirkin
2018-05-24 14:45 ` Thomas Huth
2018-05-24 15:00   ` Michael S. Tsirkin
2018-05-24 15:04     ` Marc-André Lureau
2018-05-24 15:18       ` Michael S. Tsirkin
2018-05-24 15:46     ` Thomas Huth [this message]
2018-05-24 15:51       ` Michael S. Tsirkin
2018-05-24 16:01         ` Thomas Huth
2018-05-24 15:17   ` [Qemu-devel] [PATCH 2/1] libqtest: add more exit status checks Michael S. Tsirkin
2018-05-24 15:24     ` Eric Blake
2018-05-24 15:38   ` [Qemu-devel] [PATCH v2 " Michael S. Tsirkin
2018-05-24 15:52     ` Eric Blake
2018-05-24 16:00       ` Eric Blake
2018-05-24 16:01         ` Michael S. Tsirkin
2018-05-24 18:16           ` Eric Blake
2018-05-24 18:20             ` Michael S. Tsirkin
2018-05-25  5:40               ` Markus Armbruster
2018-05-24 16:00       ` Michael S. Tsirkin
2018-05-24 15:54     ` Thomas Huth
2018-05-24 16:01       ` Michael S. Tsirkin
2018-05-24 16:11   ` [Qemu-devel] [PATCH v3 " Michael S. Tsirkin
2018-05-24 17:26     ` Thomas Huth
2018-05-24 17:33       ` Michael S. Tsirkin
2018-05-24 17:58         ` Thomas Huth
2018-05-24 18:15           ` Michael S. Tsirkin
2018-05-24 15:02 ` [Qemu-devel] [PATCH] libqtest: fail if child coredumps Peter Maydell

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=681ace2f-f827-0e00-af77-f39dc2f7ccc1@redhat.com \
    --to=thuth@redhat.com \
    --cc=armbru@redhat.com \
    --cc=eblake@redhat.com \
    --cc=f4bug@amsat.org \
    --cc=mst@redhat.com \
    --cc=qemu-devel@nongnu.org \
    --cc=tiwei.bie@intel.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).