[Qemu-devel] [PATCH 29/42] tpm-be: update optional function pointers

Marc-André Lureau posted 42 patches 8 years, 4 months ago
[Qemu-devel] [PATCH 29/42] tpm-be: update optional function pointers
Posted by Marc-André Lureau 8 years, 4 months ago
QEMU code doesn't generally have assert() for mandatory
callbacks/function pointers, probably because the crash is pretty
obvious. Document the methods instead of going into the code.

Make get_tpm_options() mandatory to implement (since all
backend implementation have it).

Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
---
 include/sysemu/tpm_backend.h | 5 ++++-
 backends/tpm.c               | 9 +--------
 2 files changed, 5 insertions(+), 9 deletions(-)

diff --git a/include/sysemu/tpm_backend.h b/include/sysemu/tpm_backend.h
index a893e586ae..594bb50782 100644
--- a/include/sysemu/tpm_backend.h
+++ b/include/sysemu/tpm_backend.h
@@ -66,15 +66,18 @@ struct TPMBackendClass {
 
     TPMBackend *(*create)(QemuOpts *opts, const char *id);
 
-    /* start up the TPM on the backend */
+    /* start up the TPM on the backend - optional */
     int (*startup_tpm)(TPMBackend *t);
 
+    /* optional */
     void (*reset)(TPMBackend *t);
 
     void (*cancel_cmd)(TPMBackend *t);
 
+    /* optional */
     bool (*get_tpm_established_flag)(TPMBackend *t);
 
+    /* optional */
     int (*reset_tpm_established_flag)(TPMBackend *t, uint8_t locty);
 
     TPMVersion (*get_tpm_version)(TPMBackend *t);
diff --git a/backends/tpm.c b/backends/tpm.c
index 7e636fbc7a..7777467c44 100644
--- a/backends/tpm.c
+++ b/backends/tpm.c
@@ -33,7 +33,6 @@ static void tpm_backend_worker_thread(gpointer data, gpointer user_data)
     TPMBackend *s = TPM_BACKEND(user_data);
     TPMBackendClass *k = TPM_BACKEND_GET_CLASS(s);
 
-    assert(k->handle_request != NULL);
     k->handle_request(s, (TPMBackendCmd *)data);
 
     qemu_bh_schedule(s->bh);
@@ -114,8 +113,6 @@ void tpm_backend_cancel_cmd(TPMBackend *s)
 {
     TPMBackendClass *k = TPM_BACKEND_GET_CLASS(s);
 
-    assert(k->cancel_cmd);
-
     k->cancel_cmd(s);
 }
 
@@ -139,8 +136,6 @@ TPMVersion tpm_backend_get_tpm_version(TPMBackend *s)
 {
     TPMBackendClass *k = TPM_BACKEND_GET_CLASS(s);
 
-    assert(k->get_tpm_version);
-
     return k->get_tpm_version(s);
 }
 
@@ -152,9 +147,7 @@ TPMInfo *tpm_backend_query_tpm(TPMBackend *s)
 
     info->id = g_strdup(s->id);
     info->model = tic->model;
-    if (k->get_tpm_options) {
-        info->options = k->get_tpm_options(s);
-    }
+    info->options = k->get_tpm_options(s);
 
     return info;
 }
-- 
2.14.1.146.gd35faa819


Re: [Qemu-devel] [PATCH 29/42] tpm-be: update optional function pointers
Posted by Stefan Berger 8 years, 4 months ago
On 10/09/2017 06:56 PM, Marc-André Lureau wrote:
> QEMU code doesn't generally have assert() for mandatory
> callbacks/function pointers, probably because the crash is pretty
> obvious. Document the methods instead of going into the code.
>
> Make get_tpm_options() mandatory to implement (since all
> backend implementation have it).
>
> Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
Reviewed-by: Stefan Berger <stefanb@linux.vnet.ibm.com>

> ---
>   include/sysemu/tpm_backend.h | 5 ++++-
>   backends/tpm.c               | 9 +--------
>   2 files changed, 5 insertions(+), 9 deletions(-)
>
> diff --git a/include/sysemu/tpm_backend.h b/include/sysemu/tpm_backend.h
> index a893e586ae..594bb50782 100644
> --- a/include/sysemu/tpm_backend.h
> +++ b/include/sysemu/tpm_backend.h
> @@ -66,15 +66,18 @@ struct TPMBackendClass {
>
>       TPMBackend *(*create)(QemuOpts *opts, const char *id);
>
> -    /* start up the TPM on the backend */
> +    /* start up the TPM on the backend - optional */
>       int (*startup_tpm)(TPMBackend *t);
>
> +    /* optional */
>       void (*reset)(TPMBackend *t);
>
>       void (*cancel_cmd)(TPMBackend *t);
>
> +    /* optional */
>       bool (*get_tpm_established_flag)(TPMBackend *t);
>
> +    /* optional */
>       int (*reset_tpm_established_flag)(TPMBackend *t, uint8_t locty);
>
>       TPMVersion (*get_tpm_version)(TPMBackend *t);
> diff --git a/backends/tpm.c b/backends/tpm.c
> index 7e636fbc7a..7777467c44 100644
> --- a/backends/tpm.c
> +++ b/backends/tpm.c
> @@ -33,7 +33,6 @@ static void tpm_backend_worker_thread(gpointer data, gpointer user_data)
>       TPMBackend *s = TPM_BACKEND(user_data);
>       TPMBackendClass *k = TPM_BACKEND_GET_CLASS(s);
>
> -    assert(k->handle_request != NULL);
>       k->handle_request(s, (TPMBackendCmd *)data);
>
>       qemu_bh_schedule(s->bh);
> @@ -114,8 +113,6 @@ void tpm_backend_cancel_cmd(TPMBackend *s)
>   {
>       TPMBackendClass *k = TPM_BACKEND_GET_CLASS(s);
>
> -    assert(k->cancel_cmd);
> -
>       k->cancel_cmd(s);
>   }
>
> @@ -139,8 +136,6 @@ TPMVersion tpm_backend_get_tpm_version(TPMBackend *s)
>   {
>       TPMBackendClass *k = TPM_BACKEND_GET_CLASS(s);
>
> -    assert(k->get_tpm_version);
> -
>       return k->get_tpm_version(s);
>   }
>
> @@ -152,9 +147,7 @@ TPMInfo *tpm_backend_query_tpm(TPMBackend *s)
>
>       info->id = g_strdup(s->id);
>       info->model = tic->model;
> -    if (k->get_tpm_options) {
> -        info->options = k->get_tpm_options(s);
> -    }
> +    info->options = k->get_tpm_options(s);
>
>       return info;
>   }