summaryrefslogtreecommitdiffstats
path: root/tpm-fix-stall-on-boot.patch
diff options
context:
space:
mode:
Diffstat (limited to 'tpm-fix-stall-on-boot.patch')
-rw-r--r--tpm-fix-stall-on-boot.patch24
1 files changed, 24 insertions, 0 deletions
diff --git a/tpm-fix-stall-on-boot.patch b/tpm-fix-stall-on-boot.patch
new file mode 100644
index 000000000..adba40a6e
--- /dev/null
+++ b/tpm-fix-stall-on-boot.patch
@@ -0,0 +1,24 @@
+Fix TPM timeouts on boot (#530393)
+
+--- a/drivers/char/tpm/tpm.c
++++ a/drivers/char/tpm/tpm.c
+@@ -354,12 +354,14 @@ unsigned long tpm_calc_ordinal_duration(struct tpm_chip *chip,
+ tpm_protected_ordinal_duration[ordinal &
+ TPM_PROTECTED_ORDINAL_MASK];
+
+- if (duration_idx != TPM_UNDEFINED)
++ if (duration_idx != TPM_UNDEFINED) {
+ duration = chip->vendor.duration[duration_idx];
+- if (duration <= 0)
++ /* if duration is 0, it's because chip->vendor.duration wasn't */
++ /* filled yet, so we set the lowest timeout just to give enough */
++ /* time to tpm_get_timeouts() succeed */
++ return (duration <= 0 ? HZ : duration);
++ } else
+ return 2 * 60 * HZ;
+- else
+- return duration;
+ }
+ EXPORT_SYMBOL_GPL(tpm_calc_ordinal_duration);
+
+