Message ID | 20180507160733.8817-2-nayna@linux.vnet.ibm.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
> do { > - tpm_msleep(TPM_POLL_SLEEP); > + tpm_msleep(TPM_TIMEOUT_POLL); > I'm just curious why it was decided to still use tpm_msleep() here instead of usleep_range() which was used in the 2nd patch. Otherwise, Acked-by: Jay Freyensee <why2jjj.linux@gmail.com> -- To unsubscribe from this list: send the line "unsubscribe linux-security-module" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
On 05/08/2018 10:04 PM, J Freyensee wrote: > >> do { >> - tpm_msleep(TPM_POLL_SLEEP); >> + tpm_msleep(TPM_TIMEOUT_POLL); >> > I'm just curious why it was decided to still use tpm_msleep() here > instead of usleep_range() which was used in the 2nd patch. TPM_TIMEOUT_POLL is in msec i.e. 1 msec and usleep_range() is used only when timeout is needed in usecs. > > Otherwise, > > Acked-by: Jay Freyensee <why2jjj.linux@gmail.com> Thanks !! Thanks & Regards, - Nayna -- To unsubscribe from this list: send the line "unsubscribe linux-security-module" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
On 05/10/2018 06:11 PM, Nayna Jain wrote: > > > On 05/08/2018 10:04 PM, J Freyensee wrote: >> >>> do { >>> - tpm_msleep(TPM_POLL_SLEEP); >>> + tpm_msleep(TPM_TIMEOUT_POLL); >>> >> I'm just curious why it was decided to still use tpm_msleep() here >> instead of usleep_range() which was used in the 2nd patch. > > TPM_TIMEOUT_POLL is in msec i.e. 1 msec and usleep_range() is used > only when timeout is needed in usecs. Just to add bit more details: usleep_range() is used in wait_for_tpm_stat() and get_burstcount() which are expected to return quickly. tpm_transmit() is a generic function used across all drivers and commands. Some of the commands (eg. hash, key generation) take longer compared to other commands (eg. extend). The sleep time in tpm_transmit is reduced but kept in msecs to balance between the smaller and longer commands. Thanks & Regards, - Nayna > >> >> Otherwise, >> >> Acked-by: Jay Freyensee <why2jjj.linux@gmail.com> > > Thanks !! > > Thanks & Regards, > - Nayna > > -- To unsubscribe from this list: send the line "unsubscribe linux-security-module" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
On Mon, May 07, 2018 at 12:07:32PM -0400, Nayna Jain wrote: > tpm_try_transmit currently checks TPM status every 5 msecs between > send and recv. It does so in a loop for the maximum timeout as defined > in the TPM Interface Specification. However, the TPM may return before > 5 msecs. Thus the polling interval for each iteration can be reduced, > which improves overall performance. This patch changes the polling sleep > time from 5 msecs to 1 msec. > > Additionally, this patch renames TPM_POLL_SLEEP to TPM_TIMEOUT_POLL and > moves it to tpm.h as an enum value. > > After this change, performance on a system[1] with a TPM 1.2 with an 8 byte > burstcount for 1000 extends improved from ~14 sec to ~10.7 sec. > > [1] All tests are performed on an x86 based, locked down, single purpose > closed system. It has Infineon TPM 1.2 using LPC Bus. > > Signed-off-by: Nayna Jain <nayna@linux.vnet.ibm.com> Reviewed-by: Jarkko Sakkinen <jarkko.sakkinen@linux.intel.com> /Jarkko -- To unsubscribe from this list: send the line "unsubscribe linux-security-module" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
On Mon, May 14, 2018 at 01:46:00PM +0300, Jarkko Sakkinen wrote: > On Mon, May 07, 2018 at 12:07:32PM -0400, Nayna Jain wrote: > > tpm_try_transmit currently checks TPM status every 5 msecs between > > send and recv. It does so in a loop for the maximum timeout as defined > > in the TPM Interface Specification. However, the TPM may return before > > 5 msecs. Thus the polling interval for each iteration can be reduced, > > which improves overall performance. This patch changes the polling sleep > > time from 5 msecs to 1 msec. > > > > Additionally, this patch renames TPM_POLL_SLEEP to TPM_TIMEOUT_POLL and > > moves it to tpm.h as an enum value. > > > > After this change, performance on a system[1] with a TPM 1.2 with an 8 byte > > burstcount for 1000 extends improved from ~14 sec to ~10.7 sec. > > > > [1] All tests are performed on an x86 based, locked down, single purpose > > closed system. It has Infineon TPM 1.2 using LPC Bus. > > > > Signed-off-by: Nayna Jain <nayna@linux.vnet.ibm.com> > > Reviewed-by: Jarkko Sakkinen <jarkko.sakkinen@linux.intel.com> Tested-by: Jarkko Sakkinen <jarkko.sakkinen@linux.intel.com> /Jarkko -- To unsubscribe from this list: send the line "unsubscribe linux-security-module" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
diff --git a/drivers/char/tpm/tpm-interface.c b/drivers/char/tpm/tpm-interface.c index 6201aab374e6..e32f6e85dc6d 100644 --- a/drivers/char/tpm/tpm-interface.c +++ b/drivers/char/tpm/tpm-interface.c @@ -489,7 +489,7 @@ static ssize_t tpm_try_transmit(struct tpm_chip *chip, goto out; } - tpm_msleep(TPM_TIMEOUT); + tpm_msleep(TPM_TIMEOUT_POLL); rmb(); } while (time_before(jiffies, stop)); diff --git a/drivers/char/tpm/tpm.h b/drivers/char/tpm/tpm.h index eedcd9cf30bc..ca05828b6981 100644 --- a/drivers/char/tpm/tpm.h +++ b/drivers/char/tpm/tpm.h @@ -53,7 +53,8 @@ enum tpm_const { enum tpm_timeout { TPM_TIMEOUT = 5, /* msecs */ TPM_TIMEOUT_RETRY = 100, /* msecs */ - TPM_TIMEOUT_RANGE_US = 300 /* usecs */ + TPM_TIMEOUT_RANGE_US = 300, /* usecs */ + TPM_TIMEOUT_POLL = 1 /* msecs */ }; /* TPM addresses */ diff --git a/drivers/char/tpm/tpm_tis_core.c b/drivers/char/tpm/tpm_tis_core.c index 5a1f47b43947..493401f5fd39 100644 --- a/drivers/char/tpm/tpm_tis_core.c +++ b/drivers/char/tpm/tpm_tis_core.c @@ -31,12 +31,6 @@ #include "tpm.h" #include "tpm_tis_core.h" -/* This is a polling delay to check for status and burstcount. - * As per ddwg input, expectation is that status check and burstcount - * check should return within few usecs. - */ -#define TPM_POLL_SLEEP 1 /* msec */ - static void tpm_tis_clkrun_enable(struct tpm_chip *chip, bool value); static bool wait_for_tpm_stat_cond(struct tpm_chip *chip, u8 mask, @@ -90,7 +84,7 @@ static int wait_for_tpm_stat(struct tpm_chip *chip, u8 mask, } } else { do { - tpm_msleep(TPM_POLL_SLEEP); + tpm_msleep(TPM_TIMEOUT_POLL); status = chip->ops->status(chip); if ((status & mask) == mask) return 0; @@ -234,7 +228,7 @@ static int get_burstcount(struct tpm_chip *chip) burstcnt = (value >> 8) & 0xFFFF; if (burstcnt) return burstcnt; - tpm_msleep(TPM_POLL_SLEEP); + tpm_msleep(TPM_TIMEOUT_POLL); } while (time_before(jiffies, stop)); return -EBUSY; }
tpm_try_transmit currently checks TPM status every 5 msecs between send and recv. It does so in a loop for the maximum timeout as defined in the TPM Interface Specification. However, the TPM may return before 5 msecs. Thus the polling interval for each iteration can be reduced, which improves overall performance. This patch changes the polling sleep time from 5 msecs to 1 msec. Additionally, this patch renames TPM_POLL_SLEEP to TPM_TIMEOUT_POLL and moves it to tpm.h as an enum value. After this change, performance on a system[1] with a TPM 1.2 with an 8 byte burstcount for 1000 extends improved from ~14 sec to ~10.7 sec. [1] All tests are performed on an x86 based, locked down, single purpose closed system. It has Infineon TPM 1.2 using LPC Bus. Signed-off-by: Nayna Jain <nayna@linux.vnet.ibm.com> --- drivers/char/tpm/tpm-interface.c | 2 +- drivers/char/tpm/tpm.h | 3 ++- drivers/char/tpm/tpm_tis_core.c | 10 ++-------- 3 files changed, 5 insertions(+), 10 deletions(-)