mirror of https://github.com/xqemu/xqemu.git
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;
|
Error *migration_blocker;
|
||||||
|
|
||||||
QemuMutex mutex;
|
QemuMutex mutex;
|
||||||
|
|
||||||
|
unsigned int established_flag:1;
|
||||||
|
unsigned int established_flag_cached:1;
|
||||||
} TPMEmulator;
|
} TPMEmulator;
|
||||||
|
|
||||||
|
|
||||||
|
@ -349,16 +352,22 @@ static bool tpm_emulator_get_tpm_established_flag(TPMBackend *tb)
|
||||||
TPMEmulator *tpm_emu = TPM_EMULATOR(tb);
|
TPMEmulator *tpm_emu = TPM_EMULATOR(tb);
|
||||||
ptm_est est;
|
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,
|
if (tpm_emulator_ctrlcmd(tpm_emu, CMD_GET_TPMESTABLISHED, &est,
|
||||||
0, sizeof(est)) < 0) {
|
0, sizeof(est)) < 0) {
|
||||||
error_report("tpm-emulator: Could not get the TPM established flag: %s",
|
error_report("tpm-emulator: Could not get the TPM established flag: %s",
|
||||||
strerror(errno));
|
strerror(errno));
|
||||||
return false;
|
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,
|
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;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
tpm_emu->established_flag_cached = 0;
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue