diff options
author | Lino Sanfilippo <l.sanfilippo@kunbus.com> | 2023-07-13 21:01:08 +0200 |
---|---|---|
committer | Jarkko Sakkinen <jarkko@kernel.org> | 2023-07-17 19:40:27 +0000 |
commit | 481c2d14627de8ecbb54dd125466e4b4a5069b47 (patch) | |
tree | 2c0fdfac5796d1f8f3b631974aabc72a549a157e /Documentation/mm | |
parent | 393f362389cecc2e4f2e3520a6c8ee9dbb1e3d15 (diff) | |
download | linux-481c2d14627de8ecbb54dd125466e4b4a5069b47.tar.gz linux-481c2d14627de8ecbb54dd125466e4b4a5069b47.tar.bz2 linux-481c2d14627de8ecbb54dd125466e4b4a5069b47.zip |
tpm,tpm_tis: Disable interrupts after 1000 unhandled IRQs
After activation of interrupts for TPM TIS drivers 0-day reports an
interrupt storm on an Inspur NF5180M6 server.
Fix this by detecting the storm and falling back to polling:
Count the number of unhandled interrupts within a 10 ms time interval. In
case that more than 1000 were unhandled deactivate interrupts entirely,
deregister the handler and use polling instead.
Also print a note to point to the tpm_tis_dmi_table.
Since the interrupt deregistration function devm_free_irq() waits for all
interrupt handlers to finish, only trigger a worker in the interrupt
handler and do the unregistration in the worker to avoid a deadlock.
Note: the storm detection logic equals the implementation in
note_interrupt() which uses timestamps and counters stored in struct
irq_desc. Since this structure is private to the generic interrupt core
the TPM TIS core uses its own timestamps and counters. Furthermore the TPM
interrupt handler always returns IRQ_HANDLED to prevent the generic
interrupt core from processing the interrupt storm.
Cc: stable@vger.kernel.org # v6.4+
Fixes: e644b2f498d2 ("tpm, tpm_tis: Enable interrupt test")
Reported-by: kernel test robot <yujie.liu@intel.com>
Closes: https://lore.kernel.org/oe-lkp/202305041325.ae8b0c43-yujie.liu@intel.com/
Suggested-by: Lukas Wunner <lukas@wunner.de>
Signed-off-by: Lino Sanfilippo <l.sanfilippo@kunbus.com>
Reviewed-by: Jarkko Sakkinen <jarkko@kernel.org>
Signed-off-by: Jarkko Sakkinen <jarkko@kernel.org>
Diffstat (limited to 'Documentation/mm')
0 files changed, 0 insertions, 0 deletions