Skip to content

Commit 1382999

Browse files
zx2c4torvalds
authored andcommitted
tpm: Allow system suspend to continue when TPM suspend fails
TPM 1 is sometimes broken across system suspends, due to races or locking issues or something else that haven't been diagnosed or fixed yet, most likely having to do with concurrent reads from the TPM's hardware random number generator driver. These issues prevent the system from actually suspending, with errors like: tpm tpm0: A TPM error (28) occurred continue selftest ... tpm tpm0: A TPM error (28) occurred attempting get random ... tpm tpm0: Error (28) sending savestate before suspend tpm_tis 00:08: PM: __pnp_bus_suspend(): tpm_pm_suspend+0x0/0x80 returns 28 tpm_tis 00:08: PM: dpm_run_callback(): pnp_bus_suspend+0x0/0x10 returns 28 tpm_tis 00:08: PM: failed to suspend: error 28 PM: Some devices failed to suspend, or early wake event detected This issue was partially fixed by 23393c6 ("char: tpm: Protect tpm_pm_suspend with locks"), in a last minute 6.1 commit that Linus took directly because the TPM maintainers weren't available. However, it seems like this just addresses the most common cases of the bug, rather than addressing it entirely. So there are more things to fix still, apparently. In lieu of actually fixing the underlying bug, just allow system suspend to continue, so that laptops still go to sleep fine. Later, this can be reverted when the real bug is fixed. Link: https://lore.kernel.org/lkml/[email protected]/ Cc: [email protected] # 6.1+ Reported-by: Vlastimil Babka <[email protected]> Suggested-by: Linus Torvalds <[email protected]> Acked-by: Luigi Semenzato <[email protected]> Cc: Peter Huewe <[email protected]> Cc: Jarkko Sakkinen <[email protected]> Cc: James Bottomley <[email protected]> Cc: Johannes Altmanninger <[email protected]> Signed-off-by: Jason A. Donenfeld <[email protected]> Signed-off-by: Linus Torvalds <[email protected]>
1 parent cb7a95a commit 1382999

File tree

1 file changed

+3
-1
lines changed

1 file changed

+3
-1
lines changed

drivers/char/tpm/tpm-interface.c

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -412,7 +412,9 @@ int tpm_pm_suspend(struct device *dev)
412412
}
413413

414414
suspended:
415-
return rc;
415+
if (rc)
416+
dev_err(dev, "Ignoring error %d while suspending\n", rc);
417+
return 0;
416418
}
417419
EXPORT_SYMBOL_GPL(tpm_pm_suspend);
418420

0 commit comments

Comments
 (0)