Re: [PATCH 2/3] tpm2-cmd: Use dynamic delay to wait for self test result

Jarkko Sakkinen <jarkko.sakkinen-VuQAYsv1563Yd54FQh9/[email protected]>
Newsgroups net.sourceforge.lists.tpmdd-devel
Message-ID <[email protected]>
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.Steffen-d0qZbvYSIPpWk0Htik3J/[email protected]>
> ---
>  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.sakkinen-VuQAYsv1563Yd54FQh9/[email protected]>

/Jarkko

------------------------------------------------------------------------------
Check out the vibrant tech community on one of the world's most
engaging tech sites, Slashdot.org! http://sdm.link/slashdot
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.