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>
---
backends/tpm.c | 11 -----------
hw/tpm/tpm_passthrough.c | 14 --------------
include/sysemu/tpm_backend.h | 7 -------
tpm.c | 2 +-
4 files changed, 1 insertion(+), 33 deletions(-)
diff --git a/backends/tpm.c b/backends/tpm.c
index c96f462..3493df6 100644
--- a/backends/tpm.c
+++ b/backends/tpm.c
@@ -51,17 +51,6 @@ const char *tpm_backend_get_desc(TPMBackend *s)
return k->ops->desc ? k->ops->desc() : "";
}
-void tpm_backend_destroy(TPMBackend *s)
-{
- TPMBackendClass *k = TPM_BACKEND_GET_CLASS(s);
-
- if (k->ops->destroy) {
- k->ops->destroy(s);
- }
-
- object_unref(OBJECT(s));
-}
-
int tpm_backend_init(TPMBackend *s, TPMState *state,
TPMRecvDataCB *datacb)
{
diff --git a/hw/tpm/tpm_passthrough.c b/hw/tpm/tpm_passthrough.c
index 71bdf25..8e11ed3 100644
--- a/hw/tpm/tpm_passthrough.c
+++ b/hw/tpm/tpm_passthrough.c
@@ -428,19 +428,6 @@ err_exit:
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(tpm_pt->tpm_dev);
-
- qapi_free_TPMPassthroughOptions(tpm_pt->ops);
-}
-
static TPMOptions *tpm_passthrough_get_tpm_options(TPMBackend *tb)
{
TPMPassthruState *tpm_pt = TPM_PASSTHROUGH(tb);
@@ -483,7 +470,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,
.realloc_buffer = tpm_passthrough_realloc_buffer,
.reset = tpm_passthrough_reset,
.had_startup_error = tpm_passthrough_get_startup_error,
diff --git a/include/sysemu/tpm_backend.h b/include/sysemu/tpm_backend.h
index 7f4d621..8f8f133 100644
--- a/include/sysemu/tpm_backend.h
+++ b/include/sysemu/tpm_backend.h
@@ -77,7 +77,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);
@@ -119,12 +118,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 1b6b550..43d980e 100644
--- a/tpm.c
+++ b/tpm.c
@@ -197,7 +197,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.7.4
On 04/07/2017 10:30 AM, Amarnath Valluri wrote:
> 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>
> ---
> backends/tpm.c | 11 -----------
> hw/tpm/tpm_passthrough.c | 14 --------------
> include/sysemu/tpm_backend.h | 7 -------
> tpm.c | 2 +-
> 4 files changed, 1 insertion(+), 33 deletions(-)
>
> diff --git a/backends/tpm.c b/backends/tpm.c
> index c96f462..3493df6 100644
> --- a/backends/tpm.c
> +++ b/backends/tpm.c
> @@ -51,17 +51,6 @@ const char *tpm_backend_get_desc(TPMBackend *s)
> return k->ops->desc ? k->ops->desc() : "";
> }
>
> -void tpm_backend_destroy(TPMBackend *s)
> -{
> - TPMBackendClass *k = TPM_BACKEND_GET_CLASS(s);
> -
> - if (k->ops->destroy) {
> - k->ops->destroy(s);
> - }
> -
> - object_unref(OBJECT(s));
> -}
> -
> int tpm_backend_init(TPMBackend *s, TPMState *state,
> TPMRecvDataCB *datacb)
> {
> diff --git a/hw/tpm/tpm_passthrough.c b/hw/tpm/tpm_passthrough.c
> index 71bdf25..8e11ed3 100644
> --- a/hw/tpm/tpm_passthrough.c
> +++ b/hw/tpm/tpm_passthrough.c
> @@ -428,19 +428,6 @@ err_exit:
> 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(tpm_pt->tpm_dev);
This g_free should be in the finalizer as well, right? It isn't. So we
will leak some memory.
> -
> - qapi_free_TPMPassthroughOptions(tpm_pt->ops);
> -}
> -
> static TPMOptions *tpm_passthrough_get_tpm_options(TPMBackend *tb)
> {
> TPMPassthruState *tpm_pt = TPM_PASSTHROUGH(tb);
> @@ -483,7 +470,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,
> .realloc_buffer = tpm_passthrough_realloc_buffer,
> .reset = tpm_passthrough_reset,
> .had_startup_error = tpm_passthrough_get_startup_error,
> diff --git a/include/sysemu/tpm_backend.h b/include/sysemu/tpm_backend.h
> index 7f4d621..8f8f133 100644
> --- a/include/sysemu/tpm_backend.h
> +++ b/include/sysemu/tpm_backend.h
> @@ -77,7 +77,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);
> @@ -119,12 +118,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 1b6b550..43d980e 100644
> --- a/tpm.c
> +++ b/tpm.c
> @@ -197,7 +197,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));
> }
> }
>
I *think* you should apply this patch after introducing the
tpm_passthrough_inst_finalize or merge it into that one.
On 04/25/2017 09:59 PM, Stefan Berger wrote:
> On 04/07/2017 10:30 AM, Amarnath Valluri wrote:
>> 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>
>> ---
>> backends/tpm.c | 11 -----------
>> hw/tpm/tpm_passthrough.c | 14 --------------
>> include/sysemu/tpm_backend.h | 7 -------
>> tpm.c | 2 +-
>> 4 files changed, 1 insertion(+), 33 deletions(-)
>>
>> diff --git a/backends/tpm.c b/backends/tpm.c
>> index c96f462..3493df6 100644
>> --- a/backends/tpm.c
>> +++ b/backends/tpm.c
>> @@ -51,17 +51,6 @@ const char *tpm_backend_get_desc(TPMBackend *s)
>> return k->ops->desc ? k->ops->desc() : "";
>> }
>>
>> -void tpm_backend_destroy(TPMBackend *s)
>> -{
>> - TPMBackendClass *k = TPM_BACKEND_GET_CLASS(s);
>> -
>> - if (k->ops->destroy) {
>> - k->ops->destroy(s);
>> - }
>> -
>> - object_unref(OBJECT(s));
>> -}
>> -
>> int tpm_backend_init(TPMBackend *s, TPMState *state,
>> TPMRecvDataCB *datacb)
>> {
>> diff --git a/hw/tpm/tpm_passthrough.c b/hw/tpm/tpm_passthrough.c
>> index 71bdf25..8e11ed3 100644
>> --- a/hw/tpm/tpm_passthrough.c
>> +++ b/hw/tpm/tpm_passthrough.c
>> @@ -428,19 +428,6 @@ err_exit:
>> 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(tpm_pt->tpm_dev);
>
> This g_free should be in the finalizer as well, right? It isn't. So we
> will leak some memory.
Yes, I will fix this.
>
>
>> -
>> - qapi_free_TPMPassthroughOptions(tpm_pt->ops);
>> -}
>> -
>> static TPMOptions *tpm_passthrough_get_tpm_options(TPMBackend *tb)
>> {
>> TPMPassthruState *tpm_pt = TPM_PASSTHROUGH(tb);
>> @@ -483,7 +470,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,
>> .realloc_buffer = tpm_passthrough_realloc_buffer,
>> .reset = tpm_passthrough_reset,
>> .had_startup_error = tpm_passthrough_get_startup_error,
>> diff --git a/include/sysemu/tpm_backend.h b/include/sysemu/tpm_backend.h
>> index 7f4d621..8f8f133 100644
>> --- a/include/sysemu/tpm_backend.h
>> +++ b/include/sysemu/tpm_backend.h
>> @@ -77,7 +77,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);
>> @@ -119,12 +118,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 1b6b550..43d980e 100644
>> --- a/tpm.c
>> +++ b/tpm.c
>> @@ -197,7 +197,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));
>> }
>> }
>>
>
> I *think* you should apply this patch after introducing the
> tpm_passthrough_inst_finalize or merge it into that one.
>
Ok, i even think it makes sense to meld this commit with
baeb9df(tpm-backend: Initialize and free data members in it's own methods).
- Amarnath
© 2016 - 2026 Red Hat, Inc.