summaryrefslogtreecommitdiffstats
path: root/tools/usb/testusb.c
diff options
context:
space:
mode:
authorLino Sanfilippo <l.sanfilippo@kunbus.com>2023-07-13 21:01:08 +0200
committerJarkko Sakkinen <jarkko@kernel.org>2023-07-17 19:40:27 +0000
commit481c2d14627de8ecbb54dd125466e4b4a5069b47 (patch)
tree2c0fdfac5796d1f8f3b631974aabc72a549a157e /tools/usb/testusb.c
parent393f362389cecc2e4f2e3520a6c8ee9dbb1e3d15 (diff)
downloadlinux-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 'tools/usb/testusb.c')
0 files changed, 0 insertions, 0 deletions