From ccf07d45b531ec54cd2fb1eead901c480eecf062 Mon Sep 17 00:00:00 2001 From: Adam BERLINGER Date: Tue, 29 Apr 2025 14:39:17 +0200 Subject: [PATCH] driver: uart: stm32: Clear buffer length only in UART TC event The buffer_length != 0 is used to check if there is transfer ongoing inside the uart_stm32_async_tx function. uart_stm32_dma_tx_cb clears it to 0 when TX DMA is finished, but before the USART send all the data from shift register. buffer_length is also cleared in callback async_evt_tx_done, which is called when USART finished sending all the bytes. If the uart_stm32_async_tx would be called after uart_stm32_async_tx, but before async_evt_tx_done there could be race condition on buffer_length. Signed-off-by: Adam BERLINGER --- drivers/serial/uart_stm32.c | 2 -- 1 file changed, 2 deletions(-) diff --git a/drivers/serial/uart_stm32.c b/drivers/serial/uart_stm32.c index f1e560dba9c..6728a7aa4dd 100644 --- a/drivers/serial/uart_stm32.c +++ b/drivers/serial/uart_stm32.c @@ -1532,8 +1532,6 @@ void uart_stm32_dma_tx_cb(const struct device *dma_dev, void *user_data, stat.pending_length; } - data->dma_tx.buffer_length = 0; - irq_unlock(key); }