Skip to content

Commit

Permalink
[BACKPORT] s32k1xx:Serial Do not wait on TXDMA semaphore
Browse files Browse the repository at this point in the history
    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.
  • Loading branch information
davids5 committed Nov 13, 2023
1 parent 031034e commit 087a129
Showing 1 changed file with 5 additions and 2 deletions.
7 changes: 5 additions & 2 deletions arch/arm/src/s32k1xx/s32k1xx_serial.c
Original file line number Diff line number Diff line change
Expand Up @@ -1766,9 +1766,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

Expand Down

0 comments on commit 087a129

Please sign in to comment.