From mboxrd@z Thu Jan 1 00:00:00 1970 From: Jarkko Sakkinen Subject: Re: [PATCH 2/3] tpm2-cmd: Use dynamic delay to wait for self test result Date: Sun, 20 Aug 2017 21:26:32 +0300 Message-ID: <20170820182632.ik4d5nfm2ggashiy@linux.intel.com> References: <20170818121532.5764-1-Alexander.Steffen@infineon.com> <20170818121532.5764-2-Alexander.Steffen@infineon.com> Mime-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Return-path: Content-Disposition: inline In-Reply-To: <20170818121532.5764-2-Alexander.Steffen-d0qZbvYSIPpWk0Htik3J/w@public.gmane.org> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: tpmdd-devel-bounces-5NWGOfrQmneRv+LV9MX5uipxlwaOVQ5f@public.gmane.org To: Alexander Steffen Cc: tpmdd-devel-5NWGOfrQmneRv+LV9MX5uipxlwaOVQ5f@public.gmane.org List-Id: tpmdd-devel@lists.sourceforge.net 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 > --- > 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 ------------------------------------------------------------------------------ Check out the vibrant tech community on one of the world's most engaging tech sites, Slashdot.org! http://sdm.link/slashdot