From 057701a7708ca6ca96aaf3784c0ef72d22424df8 Mon Sep 17 00:00:00 2001 From: Maarten van der Schrieck Date: Thu, 22 Jun 2023 15:52:10 +0200 Subject: [PATCH] rp2/machine_uart: Fix potential race condition in interrupt handling. The irq service routine cleared the RT interrupt bit on TX interrupt. This opens the possibility that an RT interrupt is missed. Signed-off-by: Maarten van der Schrieck --- ports/rp2/machine_uart.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ports/rp2/machine_uart.c b/ports/rp2/machine_uart.c index bca07cebfc..72e68a6fb6 100644 --- a/ports/rp2/machine_uart.c +++ b/ports/rp2/machine_uart.c @@ -194,7 +194,7 @@ STATIC inline void uart_service_interrupt(machine_uart_obj_t *self) { } if (uart_get_hw(self->uart)->mis & UART_UARTMIS_TXMIS_BITS) { // tx interrupt? // clear all interrupt bits but rx - uart_get_hw(self->uart)->icr = UART_UARTICR_BITS & (~UART_UARTICR_RXIC_BITS); + uart_get_hw(self->uart)->icr = UART_UARTICR_BITS & ~(UART_UARTICR_RXIC_BITS | UART_UARTICR_RTIC_BITS); uart_fill_tx_fifo(self); } }