]> git.proxmox.com Git - mirror_qemu.git/blobdiff - tests/tpm-emu.c
exec.c: get nodes_nb_alloc with one MAX calculation
[mirror_qemu.git] / tests / tpm-emu.c
index cbb92afc8f3b7ce5cbc02980f6086bc9628673dc..c43ac4aef80a5d11298092adeafd37ab8cd6443e 100644 (file)
@@ -23,9 +23,14 @@ void tpm_emu_test_wait_cond(TestState *s)
     gint64 end_time = g_get_monotonic_time() + 5 * G_TIME_SPAN_SECOND;
 
     g_mutex_lock(&s->data_mutex);
-    if (!g_cond_wait_until(&s->data_cond, &s->data_mutex, end_time)) {
+
+    if (!s->data_cond_signal &&
+        !g_cond_wait_until(&s->data_cond, &s->data_mutex, end_time)) {
         g_assert_not_reached();
     }
+
+    s->data_cond_signal = false;
+
     g_mutex_unlock(&s->data_mutex);
 }
 
@@ -71,7 +76,11 @@ void *tpm_emu_ctrl_thread(void *data)
     QIOChannelSocket *lioc = qio_channel_socket_new();
     QIOChannel *ioc;
 
-    qio_channel_socket_listen_sync(lioc, s->addr, &error_abort);
+    qio_channel_socket_listen_sync(lioc, s->addr, 1, &error_abort);
+
+    g_mutex_lock(&s->data_mutex);
+    s->data_cond_signal = true;
+    g_mutex_unlock(&s->data_mutex);
     g_cond_signal(&s->data_cond);
 
     qio_channel_wait(QIO_CHANNEL(lioc), G_IO_IN);
@@ -125,7 +134,7 @@ void *tpm_emu_ctrl_thread(void *data)
         case CMD_SHUTDOWN: {
             ptm_res res = 0;
             qio_channel_write(ioc, (char *)&res, sizeof(res), &error_abort);
-            qio_channel_close(s->tpm_ioc, &error_abort);
+            /* the tpm data thread is expected to finish now */
             g_thread_join(s->emu_tpm_thread);
             break;
         }
@@ -155,6 +164,13 @@ void *tpm_emu_ctrl_thread(void *data)
             qio_channel_write(ioc, (char *)&loc, sizeof(loc), &error_abort);
             break;
         }
+        case CMD_GET_TPMESTABLISHED: {
+            ptm_est est = {
+                .u.resp.bit = 0,
+            };
+            qio_channel_write(ioc, (char *)&est, sizeof(est), &error_abort);
+            break;
+        }
         default:
             g_debug("unimplemented %u", cmd);
             g_assert_not_reached();