tpm_emulator: Add a caching layer for the TPM Established flag
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 <stefanb@linux.vnet.ibm.com> Reviewed-by: Marc-André Lureau <marcandre.lureau@redhat.com>
This commit is contained in:
parent
281f327487
commit
0b4c7c65f8
@ -72,6 +72,9 @@ typedef struct TPMEmulator {
|
||||
Error *migration_blocker;
|
||||
|
||||
QemuMutex mutex;
|
||||
|
||||
unsigned int established_flag:1;
|
||||
unsigned int established_flag_cached:1;
|
||||
} TPMEmulator;
|
||||
|
||||
|
||||
@ -349,16 +352,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, 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);
|
||||
|
||||
return (est.u.resp.bit != 0);
|
||||
tpm_emu->established_flag_cached = 1;
|
||||
tpm_emu->established_flag = (est.u.resp.bit != 0);
|
||||
|
||||
return tpm_emu->established_flag;
|
||||
}
|
||||
|
||||
static int tpm_emulator_reset_tpm_established_flag(TPMBackend *tb,
|
||||
@ -389,6 +398,8 @@ static int tpm_emulator_reset_tpm_established_flag(TPMBackend *tb,
|
||||
return -1;
|
||||
}
|
||||
|
||||
tpm_emu->established_flag_cached = 0;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user