Re: question about setting TPM_CHIP_FLAG_IRQ in tpm_tis_core_init

From: Jerry Snitselaar
Date: Tue Nov 12 2019 - 09:24:29 EST


On Tue Nov 12 19, Stefan Berger wrote:
On 11/11/19 10:36 PM, Jerry Snitselaar wrote:
Question about 1ea32c83c699 ("tpm_tis_core: Set TPM_CHIP_FLAG_IRQ before probing for interrupts").
Doesn't tpm_tis_send set this flag, and setting it here in tpm_tis_core_init short circuits what
tpm_tis_send was doing before? There is a bug report of an interrupt storm from a tpm on a t490s laptop
with the Fedora 31 kernel (5.3), and I'm wondering if this change could cause that. Before they got
the warning about interrupts not working, and using polling instead.

I set this flag for the TIS because it wasn't set anywhere else. tpm_tis_send() wouldn't set the flag but go via the path:

if (!(chip->flags & TPM_CHIP_FLAG_IRQ) || priv->irq_tested)

        return tpm_tis_send_main(chip, buf, len);

the only other line for the TIS to set the IRQ flag was in the same function further below, though that wouldn't be reached due to the above:

[...]

priv->irq = irq;

chip->flags |= TPM_CHIP_FLAG_IRQ;


   Stefan



Ugh, you're right I was reading that as ! around both the flag and priv->irq_tested.

Should the flag be cleared if tpm_tis_probe_irq_single fails prior to calling
tpm_tis_gen_interrupt?