From patchwork Thu Aug 31 17:18:57 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Alexander Steffen X-Patchwork-Id: 9932595 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork.web.codeaurora.org (Postfix) with ESMTP id 79100602F0 for ; Thu, 31 Aug 2017 17:20:08 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 5C6E0289FC for ; Thu, 31 Aug 2017 17:20:08 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 513D528A3C; Thu, 31 Aug 2017 17:20:08 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-6.8 required=2.0 tests=BAYES_00,DKIM_SIGNED, RCVD_IN_DNSWL_HI,T_DKIM_INVALID autolearn=ham version=3.3.1 Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id C7F3C289FC for ; Thu, 31 Aug 2017 17:20:07 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751887AbdHaRTK (ORCPT ); Thu, 31 Aug 2017 13:19:10 -0400 Received: from smtp11.infineon.com ([217.10.52.105]:19038 "EHLO smtp11.infineon.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751879AbdHaRTJ (ORCPT ); Thu, 31 Aug 2017 13:19:09 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=infineon.com; i=@infineon.com; q=dns/txt; s=IFXMAIL; t=1504199949; x=1535735949; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version; bh=iVHc8IN75tljmSdtMcZUFG5RYkb2AYjiKVu1cuGUvqQ=; b=WCwZ1SCETxsXiHFvbeNnciTpR838VwzhbnlO6YFH+DPblqMhPsLL1wRH SZSMIx9LTd1MwQ6VDlUyus50x/K8XPfDUom7pDdddySSR++xrjk6M4Csa 4qF69NP1iZJ/r0JjoaSc0TaJr9heqG5Nw2hrnYTw3Hv9HecBPDSMNyIHn s=; X-SBRS: None Received: from unknown (HELO mucxv002.muc.infineon.com) ([172.23.11.17]) by smtp11.infineon.com with ESMTP/TLS/AES256-GCM-SHA384; 31 Aug 2017 19:19:07 +0200 Received: from MUCSE609.infineon.com (mucse609.infineon.com [172.23.7.110]) by mucxv002.muc.infineon.com (Postfix) with ESMTPS; Thu, 31 Aug 2017 19:19:07 +0200 (CEST) Received: from MUCSE603.infineon.com (172.23.7.104) by MUCSE609.infineon.com (172.23.7.110) with Microsoft SMTP Server (TLS) id 15.0.1263.5; Thu, 31 Aug 2017 19:19:06 +0200 Received: from ABGN5CG4522MQD.eu.infineon.com (172.29.170.103) by MUCSE603.infineon.com (172.23.7.104) with Microsoft SMTP Server (TLS) id 15.0.1263.5; Thu, 31 Aug 2017 19:19:06 +0200 From: Alexander Steffen To: , CC: , , Alexander Steffen Subject: [PATCH RESEND v2 2/3] tpm2-cmd: Use dynamic delay to wait for self test result Date: Thu, 31 Aug 2017 19:18:57 +0200 Message-ID: <20170831171858.13252-3-Alexander.Steffen@infineon.com> X-Mailer: git-send-email 2.11.1.windows.1 In-Reply-To: <20170831171858.13252-1-Alexander.Steffen@infineon.com> References: <20170831171858.13252-1-Alexander.Steffen@infineon.com> MIME-Version: 1.0 X-Originating-IP: [172.29.170.103] X-ClientProxiedBy: MUCSE601.infineon.com (172.23.7.102) To MUCSE603.infineon.com (172.23.7.104) Sender: owner-linux-security-module@vger.kernel.org Precedence: bulk List-ID: X-Virus-Scanned: ClamAV using ClamSMTP 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 Reviewed-by: Jarkko Sakkinen --- 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 8e940a5..2178437 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; tpm_msleep(delay_msec); + duration -= delay_msec; + + /* wait longer the next round */ + delay_msec *= 2; } return rc;