* [PATCH] tests/qtest/tpm-emu: Avoid hangs using abort handlers closing channels
@ 2023-01-11 13:30 Stefan Berger
2023-01-11 13:32 ` Daniel P. Berrangé
0 siblings, 1 reply; 2+ messages in thread
From: Stefan Berger @ 2023-01-11 13:30 UTC (permalink / raw)
To: qemu-devel; +Cc: marcandre.lureau, peter.maydell, berrange, Stefan Berger
Install abort handlers that close the TPM control and data channels in
case an abort occurs. The purpose of this is to have QEMU terminate
under abnormal test case failures to resolve intermittent hangs on s390x
hosts running TPM tests for QEMU/x86_64.
Signed-off-by: Stefan Berger <stefanb@linux.ibm.com>
---
tests/qtest/tpm-emu.c | 15 +++++++++++++++
1 file changed, 15 insertions(+)
diff --git a/tests/qtest/tpm-emu.c b/tests/qtest/tpm-emu.c
index 2994d1cf42..5740cab950 100644
--- a/tests/qtest/tpm-emu.c
+++ b/tests/qtest/tpm-emu.c
@@ -36,11 +36,18 @@ void tpm_emu_test_wait_cond(TPMTestState *s)
g_mutex_unlock(&s->data_mutex);
}
+static void tpm_emu_close_data_ioc(void *ioc)
+{
+ qio_channel_close(ioc, NULL);
+}
+
static void *tpm_emu_tpm_thread(void *data)
{
TPMTestState *s = data;
QIOChannel *ioc = s->tpm_ioc;
+ qtest_add_abrt_handler(tpm_emu_close_data_ioc, ioc);
+
s->tpm_msg = g_new(struct tpm_hdr, 1);
while (true) {
int minhlen = sizeof(s->tpm_msg->tag) + sizeof(s->tpm_msg->len);
@@ -77,12 +84,18 @@ static void *tpm_emu_tpm_thread(void *data)
&error_abort);
}
+ qtest_remove_abrt_handler(ioc);
g_free(s->tpm_msg);
s->tpm_msg = NULL;
object_unref(OBJECT(s->tpm_ioc));
return NULL;
}
+static void tpm_emu_close_ctrl_ioc(void *ioc)
+{
+ qio_channel_close(ioc, NULL);
+}
+
void *tpm_emu_ctrl_thread(void *data)
{
TPMTestState *s = data;
@@ -99,6 +112,7 @@ void *tpm_emu_ctrl_thread(void *data)
qio_channel_wait(QIO_CHANNEL(lioc), G_IO_IN);
ioc = QIO_CHANNEL(qio_channel_socket_accept(lioc, &error_abort));
g_assert(ioc);
+ qtest_add_abrt_handler(tpm_emu_close_ctrl_ioc, ioc);
{
uint32_t cmd = 0;
@@ -190,6 +204,7 @@ void *tpm_emu_ctrl_thread(void *data)
}
}
+ qtest_remove_abrt_handler(ioc);
object_unref(OBJECT(ioc));
object_unref(OBJECT(lioc));
return NULL;
--
2.39.0
^ permalink raw reply related [flat|nested] 2+ messages in thread* Re: [PATCH] tests/qtest/tpm-emu: Avoid hangs using abort handlers closing channels
2023-01-11 13:30 [PATCH] tests/qtest/tpm-emu: Avoid hangs using abort handlers closing channels Stefan Berger
@ 2023-01-11 13:32 ` Daniel P. Berrangé
0 siblings, 0 replies; 2+ messages in thread
From: Daniel P. Berrangé @ 2023-01-11 13:32 UTC (permalink / raw)
To: Stefan Berger; +Cc: qemu-devel, marcandre.lureau, peter.maydell
On Wed, Jan 11, 2023 at 08:30:23AM -0500, Stefan Berger wrote:
> Install abort handlers that close the TPM control and data channels in
> case an abort occurs. The purpose of this is to have QEMU terminate
> under abnormal test case failures to resolve intermittent hangs on s390x
> hosts running TPM tests for QEMU/x86_64.
>
> Signed-off-by: Stefan Berger <stefanb@linux.ibm.com>
> ---
> tests/qtest/tpm-emu.c | 15 +++++++++++++++
> 1 file changed, 15 insertions(+)
>
> diff --git a/tests/qtest/tpm-emu.c b/tests/qtest/tpm-emu.c
> index 2994d1cf42..5740cab950 100644
> --- a/tests/qtest/tpm-emu.c
> +++ b/tests/qtest/tpm-emu.c
> @@ -36,11 +36,18 @@ void tpm_emu_test_wait_cond(TPMTestState *s)
> g_mutex_unlock(&s->data_mutex);
> }
>
> +static void tpm_emu_close_data_ioc(void *ioc)
> +{
> + qio_channel_close(ioc, NULL);
> +}
We could actually just call it tpm_emu_close_ioc and
refer to it from both places....
> +
> static void *tpm_emu_tpm_thread(void *data)
> {
> TPMTestState *s = data;
> QIOChannel *ioc = s->tpm_ioc;
>
> + qtest_add_abrt_handler(tpm_emu_close_data_ioc, ioc);
> +
> s->tpm_msg = g_new(struct tpm_hdr, 1);
> while (true) {
> int minhlen = sizeof(s->tpm_msg->tag) + sizeof(s->tpm_msg->len);
> @@ -77,12 +84,18 @@ static void *tpm_emu_tpm_thread(void *data)
> &error_abort);
> }
>
> + qtest_remove_abrt_handler(ioc);
> g_free(s->tpm_msg);
> s->tpm_msg = NULL;
> object_unref(OBJECT(s->tpm_ioc));
> return NULL;
> }
>
> +static void tpm_emu_close_ctrl_ioc(void *ioc)
> +{
> + qio_channel_close(ioc, NULL);
> +}
... as this code is identical.
> +
> void *tpm_emu_ctrl_thread(void *data)
> {
> TPMTestState *s = data;
> @@ -99,6 +112,7 @@ void *tpm_emu_ctrl_thread(void *data)
> qio_channel_wait(QIO_CHANNEL(lioc), G_IO_IN);
> ioc = QIO_CHANNEL(qio_channel_socket_accept(lioc, &error_abort));
> g_assert(ioc);
> + qtest_add_abrt_handler(tpm_emu_close_ctrl_ioc, ioc);
>
> {
> uint32_t cmd = 0;
> @@ -190,6 +204,7 @@ void *tpm_emu_ctrl_thread(void *data)
> }
> }
>
> + qtest_remove_abrt_handler(ioc);
> object_unref(OBJECT(ioc));
> object_unref(OBJECT(lioc));
> return NULL;
> --
> 2.39.0
>
With regards,
Daniel
--
|: https://berrange.com -o- https://www.flickr.com/photos/dberrange :|
|: https://libvirt.org -o- https://fstop138.berrange.com :|
|: https://entangle-photo.org -o- https://www.instagram.com/dberrange :|
^ permalink raw reply [flat|nested] 2+ messages in thread
end of thread, other threads:[~2023-01-11 13:32 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2023-01-11 13:30 [PATCH] tests/qtest/tpm-emu: Avoid hangs using abort handlers closing channels Stefan Berger
2023-01-11 13:32 ` Daniel P. Berrangé
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).