Hi On Wed, Nov 8, 2017 at 9:37 PM, Stefan Berger <stef...@linux.vnet.ibm.com> wrote: > Add a caching layer for the TPM established flag so that we don't > need to go to the emulator every time the flag is read by accessing > the REG_ACCESS register. > > Signed-off-by: Stefan Berger <stef...@linux.vnet.ibm.com> > > v1->v2: > - move the caching to the backend layer since detecting the > TPM 1.2 TSC_ResetEstablishmentBit() command is easier to do > here.
What about the HASH_START? Is this not supported by qemu TIS? Is the function gone or done differently with TPM2 or CRB? > --- > hw/tpm/tpm_emulator.c | 17 ++++++++++++++--- > 1 file changed, 14 insertions(+), 3 deletions(-) > > diff --git a/hw/tpm/tpm_emulator.c b/hw/tpm/tpm_emulator.c > index 9aaec8e..507e2cb 100644 > --- a/hw/tpm/tpm_emulator.c > +++ b/hw/tpm/tpm_emulator.c > @@ -71,6 +71,9 @@ typedef struct TPMEmulator { > ptm_cap caps; /* capabilities of the TPM */ > uint8_t cur_locty_number; /* last set locality */ > Error *migration_blocker; > + > + unsigned int established_flag:1; > + unsigned int established_flag_cached:1; > } TPMEmulator; > > > @@ -277,16 +280,22 @@ static bool > tpm_emulator_get_tpm_established_flag(TPMBackend *tb) > TPMEmulator *tpm_emu = TPM_EMULATOR(tb); > ptm_est est; > > - DPRINTF("%s", __func__); > + if (tpm_emu->established_flag_cached) { > + return tpm_emu->established_flag; > + } > + > if (tpm_emulator_ctrlcmd(&tpm_emu->ctrl_chr, CMD_GET_TPMESTABLISHED, > &est, > 0, sizeof(est)) < 0) { > error_report("tpm-emulator: Could not get the TPM established flag: > %s", > strerror(errno)); > return false; > } > - DPRINTF("established flag: %0x", est.u.resp.bit); > + DPRINTF("got established flag: %0x", est.u.resp.bit); > + > + tpm_emu->established_flag_cached = 1; > + tpm_emu->established_flag = (est.u.resp.bit != 0); > > - return (est.u.resp.bit != 0); > + return tpm_emu->established_flag; > } > > static int tpm_emulator_reset_tpm_established_flag(TPMBackend *tb, > @@ -317,6 +326,8 @@ static int > tpm_emulator_reset_tpm_established_flag(TPMBackend *tb, > return -1; > } > > + tpm_emu->established_flag_cached = 0; > + > return 0; > } > > -- > 2.5.5 > > -- Marc-André Lureau