[PATCH] i2c: xiic: Don't try to handle more interrupt events after error
Wolfram Sang
wsa at kernel.org
Thu Jul 6 12:33:03 PDT 2023
On Tue, Jun 06, 2023 at 12:25:58PM -0600, Robert Hancock wrote:
> In xiic_process, it is possible that error events such as arbitration
> lost or TX error can be raised in conjunction with other interrupt flags
> such as TX FIFO empty or bus not busy. Error events result in the
> controller being reset and the error returned to the calling request,
> but the function could potentially try to keep handling the other
> events, such as by writing more messages into the TX FIFO. Since the
> transaction has already failed, this is not helpful and will just cause
> issues.
>
> This problem has been present ever since:
>
> commit 7f9906bd7f72 ("i2c: xiic: Service all interrupts in isr")
>
> which allowed non-error events to be handled after errors, but became
> more obvious after:
>
> commit 743e227a8959 ("i2c: xiic: Defer xiic_wakeup() and
> __xiic_start_xfer() in xiic_process()")
>
> which reworked the code to add a WARN_ON which triggers if both the
> xfer_more and wakeup_req flags were set, since this combination is
> not supposed to happen, but was occurring in this scenario.
>
> Skip further interrupt handling after error flags are detected to avoid
> this problem.
>
> Fixes: 7f9906bd7f72 ("i2c: xiic: Service all interrupts in isr")
> Signed-off-by: Robert Hancock <robert.hancock at calian.com>
Applied to for-current, thanks!
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 833 bytes
Desc: not available
URL: <http://lists.infradead.org/pipermail/linux-arm-kernel/attachments/20230706/e7fa5cd3/attachment.sig>
More information about the linux-arm-kernel
mailing list