tpm-backend: Move realloc_buffer() implementation to tpm-tis model

buffer reallocation is very unlikely to be backend specific. Hence move inside
the tis.

Signed-off-by: Amarnath Valluri <amarnath.valluri@intel.com>
Reviewed-by: Stefan Berger <stefanb@linux.vnet.ibm.com>
Reviewed-by: Marc-André Lureau <marcandre.lureau@redhat.com>
Signed-off-by: Stefan Berger <stefanb@linux.vnet.ibm.com>
This commit is contained in:
Amarnath Valluri 2017-09-29 14:10:18 +03:00 committed by Stefan Berger
parent f59864ba3a
commit d0c519bdff
4 changed files with 12 additions and 35 deletions

View File

@ -80,15 +80,6 @@ bool tpm_backend_had_startup_error(TPMBackend *s)
return s->had_startup_error;
}
size_t tpm_backend_realloc_buffer(TPMBackend *s, TPMSizedBuffer *sb)
{
TPMBackendClass *k = TPM_BACKEND_GET_CLASS(s);
assert(k->ops->realloc_buffer);
return k->ops->realloc_buffer(sb);
}
void tpm_backend_deliver_request(TPMBackend *s)
{
g_thread_pool_push(s->thread_pool, (gpointer)TPM_BACKEND_CMD_PROCESS_CMD,

View File

@ -247,17 +247,6 @@ static int tpm_passthrough_reset_tpm_established_flag(TPMBackend *tb,
return 0;
}
static size_t tpm_passthrough_realloc_buffer(TPMSizedBuffer *sb)
{
size_t wanted_size = 4096; /* Linux tpm.c buffer size */
if (sb->size != wanted_size) {
sb->buffer = g_realloc(sb->buffer, wanted_size);
sb->size = wanted_size;
}
return sb->size;
}
static void tpm_passthrough_cancel_cmd(TPMBackend *tb)
{
TPMPassthruState *tpm_pt = TPM_PASSTHROUGH(tb);
@ -435,7 +424,6 @@ static const TPMDriverOps tpm_passthrough_driver = {
.opts = tpm_passthrough_cmdline_opts,
.desc = "Passthrough TPM backend driver",
.create = tpm_passthrough_create,
.realloc_buffer = tpm_passthrough_realloc_buffer,
.reset = tpm_passthrough_reset,
.cancel_cmd = tpm_passthrough_cancel_cmd,
.get_tpm_established_flag = tpm_passthrough_get_tpm_established_flag,

View File

@ -963,6 +963,16 @@ static int tpm_tis_do_startup_tpm(TPMState *s)
return tpm_backend_startup_tpm(s->be_driver);
}
static void tpm_tis_realloc_buffer(TPMSizedBuffer *sb)
{
size_t wanted_size = 4096; /* Linux tpm.c buffer size */
if (sb->size != wanted_size) {
sb->buffer = g_realloc(sb->buffer, wanted_size);
sb->size = wanted_size;
}
}
/*
* Get the TPMVersion of the backend device being used
*/
@ -1010,9 +1020,9 @@ static void tpm_tis_reset(DeviceState *dev)
tis->loc[c].state = TPM_TIS_STATE_IDLE;
tis->loc[c].w_offset = 0;
tpm_backend_realloc_buffer(s->be_driver, &tis->loc[c].w_buffer);
tpm_tis_realloc_buffer(&tis->loc[c].w_buffer);
tis->loc[c].r_offset = 0;
tpm_backend_realloc_buffer(s->be_driver, &tis->loc[c].r_buffer);
tpm_tis_realloc_buffer(&tis->loc[c].r_buffer);
}
tpm_tis_do_startup_tpm(s);

View File

@ -84,8 +84,6 @@ struct TPMDriverOps {
/* start up the TPM on the backend */
int (*startup_tpm)(TPMBackend *t);
size_t (*realloc_buffer)(TPMSizedBuffer *sb);
void (*reset)(TPMBackend *t);
void (*cancel_cmd)(TPMBackend *t);
@ -139,16 +137,6 @@ int tpm_backend_startup_tpm(TPMBackend *s);
*/
bool tpm_backend_had_startup_error(TPMBackend *s);
/**
* tpm_backend_realloc_buffer:
* @s: the backend
* @sb: the TPMSizedBuffer to re-allocated to the size suitable for the
* backend.
*
* This function returns the size of the allocated buffer
*/
size_t tpm_backend_realloc_buffer(TPMBackend *s, TPMSizedBuffer *sb);
/**
* tpm_backend_deliver_request:
* @s: the backend to send the request to