aboutsummaryrefslogtreecommitdiffstats
path: root/meta/recipes-devtools/qemu/qemu/0005-tpm-backend-Initialize-and-free-data-members-in-it-s.patch
diff options
context:
space:
mode:
Diffstat (limited to 'meta/recipes-devtools/qemu/qemu/0005-tpm-backend-Initialize-and-free-data-members-in-it-s.patch')
-rw-r--r--meta/recipes-devtools/qemu/qemu/0005-tpm-backend-Initialize-and-free-data-members-in-it-s.patch185
1 files changed, 185 insertions, 0 deletions
diff --git a/meta/recipes-devtools/qemu/qemu/0005-tpm-backend-Initialize-and-free-data-members-in-it-s.patch b/meta/recipes-devtools/qemu/qemu/0005-tpm-backend-Initialize-and-free-data-members-in-it-s.patch
new file mode 100644
index 0000000000..91dd542f45
--- /dev/null
+++ b/meta/recipes-devtools/qemu/qemu/0005-tpm-backend-Initialize-and-free-data-members-in-it-s.patch
@@ -0,0 +1,185 @@
+From 83ef052c60de271a97abb7eb9b5a8aeee52659e6 Mon Sep 17 00:00:00 2001
+From: Amarnath Valluri <amarnath.valluri@intel.com>
+Date: Fri, 31 Mar 2017 10:58:11 +0300
+Subject: [PATCH 05/12] tpm-backend: Initialize and free data members in it's
+ own methods
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+Initialize and free TPMBackend data members in it's own instance_init() and
+instance_finalize methods.
+
+Took the opportunity to remove unneeded destroy() method from TpmDriverOps
+interface as TPMBackend is a Qemu Object, we can use object_unref() inplace of
+tpm_backend_destroy() to free the backend object, hence removed destroy() from
+TPMDriverOps interface.
+
+Signed-off-by: Amarnath Valluri <amarnath.valluri@intel.com>
+Reviewed-by: Marc-André Lureau <marcandre.lureau@redhat.com>
+Reviewed-by: Stefan Berger <stefanb@linux.vnet.ibm.com>
+
+Upstream-Status: Backport [f35fe5cb97bbdaa6a6967f2fefc3fc1f79680601]
+---
+ backends/tpm.c | 16 ++++++----------
+ hw/tpm/tpm_passthrough.c | 31 ++++++++++++-------------------
+ include/sysemu/tpm_backend.h | 7 -------
+ tpm.c | 2 +-
+ 4 files changed, 19 insertions(+), 37 deletions(-)
+
+diff --git a/backends/tpm.c b/backends/tpm.c
+index ce56c3b74d..cf5abf1582 100644
+--- a/backends/tpm.c
++++ b/backends/tpm.c
+@@ -51,15 +51,6 @@ const char *tpm_backend_get_desc(TPMBackend *s)
+ return k->ops->desc();
+ }
+
+-void tpm_backend_destroy(TPMBackend *s)
+-{
+- TPMBackendClass *k = TPM_BACKEND_GET_CLASS(s);
+-
+- k->ops->destroy(s);
+-
+- tpm_backend_thread_end(s);
+-}
+-
+ int tpm_backend_init(TPMBackend *s, TPMState *state,
+ TPMRecvDataCB *datacb)
+ {
+@@ -182,17 +173,22 @@ static void tpm_backend_prop_set_opened(Object *obj, bool value, Error **errp)
+
+ static void tpm_backend_instance_init(Object *obj)
+ {
++ TPMBackend *s = TPM_BACKEND(obj);
++
+ object_property_add_bool(obj, "opened",
+ tpm_backend_prop_get_opened,
+ tpm_backend_prop_set_opened,
+ NULL);
+-
++ s->fe_model = -1;
+ }
+
+ static void tpm_backend_instance_finalize(Object *obj)
+ {
+ TPMBackend *s = TPM_BACKEND(obj);
+
++ g_free(s->id);
++ g_free(s->path);
++ g_free(s->cancel_path);
+ tpm_backend_thread_end(s);
+ }
+
+diff --git a/hw/tpm/tpm_passthrough.c b/hw/tpm/tpm_passthrough.c
+index f50d9cffd7..815a72ef9a 100644
+--- a/hw/tpm/tpm_passthrough.c
++++ b/hw/tpm/tpm_passthrough.c
+@@ -417,8 +417,6 @@ static TPMBackend *tpm_passthrough_create(QemuOpts *opts, const char *id)
+ TPMPassthruState *tpm_pt = TPM_PASSTHROUGH(tb);
+
+ tb->id = g_strdup(id);
+- /* let frontend set the fe_model to proper value */
+- tb->fe_model = -1;
+
+ if (tpm_passthrough_handle_device_opts(opts, tb)) {
+ goto err_exit;
+@@ -432,26 +430,11 @@ static TPMBackend *tpm_passthrough_create(QemuOpts *opts, const char *id)
+ return tb;
+
+ err_exit:
+- g_free(tb->id);
++ object_unref(obj);
+
+ return NULL;
+ }
+
+-static void tpm_passthrough_destroy(TPMBackend *tb)
+-{
+- TPMPassthruState *tpm_pt = TPM_PASSTHROUGH(tb);
+-
+- tpm_passthrough_cancel_cmd(tb);
+-
+- qemu_close(tpm_pt->tpm_fd);
+- qemu_close(tpm_pt->cancel_fd);
+-
+- g_free(tb->id);
+- g_free(tb->path);
+- g_free(tb->cancel_path);
+- g_free(tpm_pt->tpm_dev);
+-}
+-
+ static const QemuOptDesc tpm_passthrough_cmdline_opts[] = {
+ TPM_STANDARD_CMDLINE_OPTS,
+ {
+@@ -472,7 +455,6 @@ static const TPMDriverOps tpm_passthrough_driver = {
+ .opts = tpm_passthrough_cmdline_opts,
+ .desc = tpm_passthrough_create_desc,
+ .create = tpm_passthrough_create,
+- .destroy = tpm_passthrough_destroy,
+ .init = tpm_passthrough_init,
+ .startup_tpm = tpm_passthrough_startup_tpm,
+ .realloc_buffer = tpm_passthrough_realloc_buffer,
+@@ -486,10 +468,21 @@ static const TPMDriverOps tpm_passthrough_driver = {
+
+ static void tpm_passthrough_inst_init(Object *obj)
+ {
++ TPMPassthruState *tpm_pt = TPM_PASSTHROUGH(obj);
++
++ tpm_pt->tpm_fd = -1;
++ tpm_pt->cancel_fd = -1;
+ }
+
+ static void tpm_passthrough_inst_finalize(Object *obj)
+ {
++ TPMPassthruState *tpm_pt = TPM_PASSTHROUGH(obj);
++
++ tpm_passthrough_cancel_cmd(TPM_BACKEND(obj));
++
++ qemu_close(tpm_pt->tpm_fd);
++ qemu_close(tpm_pt->cancel_fd);
++ g_free(tpm_pt->tpm_dev);
+ }
+
+ static void tpm_passthrough_class_init(ObjectClass *klass, void *data)
+diff --git a/include/sysemu/tpm_backend.h b/include/sysemu/tpm_backend.h
+index 58308b3687..202ec8d5a2 100644
+--- a/include/sysemu/tpm_backend.h
++++ b/include/sysemu/tpm_backend.h
+@@ -78,7 +78,6 @@ struct TPMDriverOps {
+ const char *(*desc)(void);
+
+ TPMBackend *(*create)(QemuOpts *opts, const char *id);
+- void (*destroy)(TPMBackend *t);
+
+ /* initialize the backend */
+ int (*init)(TPMBackend *t);
+@@ -118,12 +117,6 @@ enum TpmType tpm_backend_get_type(TPMBackend *s);
+ const char *tpm_backend_get_desc(TPMBackend *s);
+
+ /**
+- * tpm_backend_destroy:
+- * @s: the backend to destroy
+- */
+-void tpm_backend_destroy(TPMBackend *s);
+-
+-/**
+ * tpm_backend_init:
+ * @s: the backend to initialized
+ * @state: TPMState
+diff --git a/tpm.c b/tpm.c
+index b7166ca200..7feb3b43c9 100644
+--- a/tpm.c
++++ b/tpm.c
+@@ -158,7 +158,7 @@ void tpm_cleanup(void)
+
+ QLIST_FOREACH_SAFE(drv, &tpm_backends, list, next) {
+ QLIST_REMOVE(drv, list);
+- tpm_backend_destroy(drv);
++ object_unref(OBJECT(drv));
+ }
+ }
+
+--
+2.11.0
+