qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Qemu-devel] [PATCH v3 for-2.11 1/3] tpm_emulator: Add a caching lay


From: Marc-André Lureau
Subject: Re: [Qemu-devel] [PATCH v3 for-2.11 1/3] tpm_emulator: Add a caching layer for the TPM Established flag
Date: Wed, 15 Nov 2017 04:47:33 +0100

Hi

On Wed, Nov 15, 2017 at 2:16 AM, Stefan Berger
<address@hidden> wrote:
> On 11/14/2017 06:40 PM, Marc-André Lureau wrote:
>>
>> Hi
>>
>> On Tue, Nov 14, 2017 at 10:52 PM, Stefan Berger
>> <address@hidden> 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.
>>
>> What's the impact? Isn't this just a "small" optimization? Iotw, why
>> is this for-2.11?
>
>
> The TIS has a register that contains this flag and that's being polled quite
> frequently. So it generates a lot of traffic to the emulator. This caching
> layer gets rid of most of the traffic.

I didn't notice any problem when doing my tests, I guess Amarnath
niether. perhaps it's best to delay for after 2.11.

>    Stefan
>
>
>>
>>> Signed-off-by: Stefan Berger <address@hidden>
>>>
>>> v1->v2:
>>>   - move the caching to the backend layer since detecting the
>>>     TPM 1.2 TSC_ResetEstablishmentBit() command is easier to do
>>>     here.
>>> ---
>>>   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 e1a6810..b293db7 100644
>>> --- a/hw/tpm/tpm_emulator.c
>>> +++ b/hw/tpm/tpm_emulator.c
>>> @@ -73,6 +73,9 @@ typedef struct TPMEmulator {
>>>       Error *migration_blocker;
>>>
>>>       QemuMutex mutex;
>>> +
>>> +    unsigned int established_flag:1;
>>> +    unsigned int established_flag_cached:1;
>>>   } TPMEmulator;
>>>
>>>
>>> @@ -287,16 +290,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);
>>> +
>>> +    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,
>>> @@ -327,6 +336,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



reply via email to

[Prev in Thread] Current Thread [Next in Thread]