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;
> }