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