aboutsummaryrefslogtreecommitdiff
path: root/include
diff options
context:
space:
mode:
authorMarc-André Lureau <marcandre.lureau@redhat.com>2018-01-29 19:33:05 +0100
committerStefan Berger <stefanb@linux.vnet.ibm.com>2018-01-29 14:22:23 -0500
commitc4fb8561bcec5f3ae3ae2d8a688d1e1aeb247a91 (patch)
treefc0db641fffd5b36e4c9852bbcace08b93413104 /include
parent05b71fb207ab7f016e067bd2a40fc0804362eb74 (diff)
tpm: replace GThreadPool with AIO threadpool
The TPM backend uses a GThreadPool to handle IO in a seperate thread. However, GThreadPool isn't integrated with Qemu main loops, making it unnecessarily complicated to deal with. Qemu has a AIO threadpool, that is better integrated with loops and various IO functions, provides completion BH by default etc. Remove the only user of GThreadPool from qemu, use AIO threadpool. Note that the backend: - no longer accepts queing multiple requests (unneeded so far) - increase ref to itself when handling a command, for extra safety - tpm_backend_thread_end() is renamed tpm_backend_finish_sync() and will wait for completion of BH (request_completed), which will help migration handling. Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com> Reviewed-by: Stefan Berger <stefanb@linux.vnet.ibm.com> Signed-off-by: Stefan Berger <stefanb@linux.vnet.ibm.com>
Diffstat (limited to 'include')
-rw-r--r--include/sysemu/tpm_backend.h12
1 files changed, 10 insertions, 2 deletions
diff --git a/include/sysemu/tpm_backend.h b/include/sysemu/tpm_backend.h
index 0d6c994a62..a69593e0cd 100644
--- a/include/sysemu/tpm_backend.h
+++ b/include/sysemu/tpm_backend.h
@@ -45,9 +45,8 @@ struct TPMBackend {
/*< protected >*/
TPMIf *tpmif;
bool opened;
- GThreadPool *thread_pool;
bool had_startup_error;
- QEMUBH *bh;
+ TPMBackendCmd *cmd;
/* <public> */
char *id;
@@ -197,6 +196,15 @@ TPMVersion tpm_backend_get_tpm_version(TPMBackend *s);
size_t tpm_backend_get_buffer_size(TPMBackend *s);
/**
+ * tpm_backend_finish_sync:
+ * @s: the backend to call into
+ *
+ * Finish the pending command synchronously (this will call aio_poll()
+ * on qemu main AIOContext until it ends)
+ */
+void tpm_backend_finish_sync(TPMBackend *s);
+
+/**
* tpm_backend_query_tpm:
* @s: the backend
*