On Fri, Aug 18, 2017 at 02:15:31PM +0200, Alexander Steffen wrote:
> In order to avoid delaying the code longer than necessary while still
> giving the TPM enough time to execute the self tests asynchronously, start
> with a small delay between two polls and increase it each round.
> 
> Signed-off-by: Alexander Steffen <alexander.stef...@infineon.com>
> ---
>  drivers/char/tpm/tpm2-cmd.c | 17 +++++++++--------
>  1 file changed, 9 insertions(+), 8 deletions(-)
> 
> diff --git a/drivers/char/tpm/tpm2-cmd.c b/drivers/char/tpm/tpm2-cmd.c
> index 7e328d6..e3d4cc3 100644
> --- a/drivers/char/tpm/tpm2-cmd.c
> +++ b/drivers/char/tpm/tpm2-cmd.c
> @@ -877,20 +877,17 @@ static int tpm2_start_selftest(struct tpm_chip *chip, 
> bool full)
>  static int tpm2_do_selftest(struct tpm_chip *chip)
>  {
>       int rc;
> -     unsigned int loops;
> -     unsigned int delay_msec = 100;
> -     unsigned long duration;
> -     int i;
> -
> -     duration = tpm2_calc_ordinal_duration(chip, TPM2_CC_SELF_TEST);
> +     unsigned int delay_msec = 20;
> +     long duration;
>  
> -     loops = jiffies_to_msecs(duration) / delay_msec;
> +     duration = jiffies_to_msecs(
> +             tpm2_calc_ordinal_duration(chip, TPM2_CC_SELF_TEST));
>  
>       rc = tpm2_start_selftest(chip, false);
>       if (rc)
>               return rc;
>  
> -     for (i = 0; i < loops; i++) {
> +     while (duration > 0) {
>               /* Attempt to read a PCR value */
>               rc = tpm2_pcr_read(chip, 0, NULL);
>               if (rc < 0)
> @@ -900,6 +897,10 @@ static int tpm2_do_selftest(struct tpm_chip *chip)
>                       break;
>  
>               msleep(delay_msec);
> +             duration -= delay_msec;
> +
> +             /* wait longer the next round */
> +             delay_msec *= 2;
>       }
>  
>       return rc;
> -- 
> 2.7.4
> 

Reviewed-by: Jarkko Sakkinen <jarkko.sakki...@linux.intel.com>

/Jarkko

------------------------------------------------------------------------------
Check out the vibrant tech community on one of the world's most
engaging tech sites, Slashdot.org! http://sdm.link/slashdot
_______________________________________________
tpmdd-devel mailing list
tpmdd-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/tpmdd-devel

Reply via email to