mirror of
https://github.com/apache/nuttx.git
synced 2026-05-21 21:34:07 +08:00
s32k1xx:Serial Do not wait on TXDMA semaphore
If using flow control with a high CTS the thread may be
blocked forever on the second transmit attempt due to waiting
on the txdma semaphore. The calling thread can then never
make progress and release any resources it has taken, thus
may cause a deadlock in other parts of the system.
The implementation differs in behavior from interrupt-driven
TX. It should not implicitly wait on a taken semaphore but
return immediately and let the upper layers decide on what to
do next.
This commit is contained in:
committed by
Xiang Xiao
parent
8362e3147e
commit
a92bd5d081
@@ -1768,9 +1768,12 @@ static void s32k1xx_dma_txavailable(struct uart_dev_s *dev)
|
||||
|
||||
/* Only send when the DMA is idle */
|
||||
|
||||
nxsem_wait(&priv->txdmasem);
|
||||
int rv = nxsem_trywait(&priv->txdmasem);
|
||||
|
||||
uart_xmitchars_dma(dev);
|
||||
if (rv == OK)
|
||||
{
|
||||
uart_xmitchars_dma(dev);
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
|
||||
Reference in New Issue
Block a user