nuttx/drivers
Lingao Meng 3a0fb4b9bf drivers/serial: bound uart_tcdrain xmit-buffer wait by caller timeout
uart_tcdrain() takes a caller-supplied timeout (e.g. 10s from the
TCDRN ioctl path), but the timeout was only applied to the final
TX-FIFO polling loop.  The earlier xmit-buffer drain loop called
nxsem_wait(&dev->xmitsem) with no timeout, so any condition that
prevents the lower half from posting xmitsem (e.g. a stuck DMA
completion path, a wedged hardware-flow-control stall) would block
tcdrain() indefinitely, regardless of the timeout the caller asked
for.  The pre-existing comment ("NOTE: There is no timeout on the
following loop. ... the caller should call tcflush() first") openly
acknowledged this hang.

Move the start timestamp before both phases and replace the bare
nxsem_wait() with nxsem_tickwait() using the remaining time, so the
total time spent in tcdrain() honors the caller's timeout regardless
of which phase stalls.  When the remaining time is already exhausted,
short-circuit to -ETIMEDOUT without calling into the scheduler.  The
existing exit path (drop critical section, skip the FIFO polling
loop, unlock the xmit mutex, leave the cancellation point) handles
the new -ETIMEDOUT propagation correctly without further changes.

Also fold the "Set up for the timeout" comment into the kludge
REVISIT comment, since the timestamp is no longer set up at that
point.

Signed-off-by: Lingao Meng <menglingao@xiaomi.com>
2026-06-02 19:50:55 +08:00
..
1wire style: fix checkpatch issues after debug.h move 2026-04-07 07:50:06 -03:00
aie include/debug.h: Move to include/nuttx/debug.h 2026-04-07 07:50:06 -03:00
analog drivers/analog/dac7554: Add NULL checks after kmm_malloc in dac7554_initialize 2026-05-30 17:50:14 +08:00
audio !sys/types.h: change time_t and clock_t to int64_t to align with other OSes 2026-05-19 16:21:28 +08:00
bch include/debug.h: Move to include/nuttx/debug.h 2026-04-07 07:50:06 -03:00
can drivers/can: Fix close drain, write-only reader lifecycle, and STM32 RX header 2026-04-28 10:32:56 -03:00
clk include/debug.h: Move to include/nuttx/debug.h 2026-04-07 07:50:06 -03:00
contactless include/debug.h: Move to include/nuttx/debug.h 2026-04-07 07:50:06 -03:00
coresight style: fix checkpatch issues after debug.h move 2026-04-07 07:50:06 -03:00
crypto include/debug.h: Move to include/nuttx/debug.h 2026-04-07 07:50:06 -03:00
devicetree include/debug.h: Move to include/nuttx/debug.h 2026-04-07 07:50:06 -03:00
dma
dummy
eeprom include/debug.h: Move to include/nuttx/debug.h 2026-04-07 07:50:06 -03:00
efuse include/debug.h: Move to include/nuttx/debug.h 2026-04-07 07:50:06 -03:00
i2c drivers: Fix comment typos — 'register' → 'registered' across drivers. 2026-05-28 22:21:47 +08:00
i2s drivers: Fix comment typos — 'register' → 'registered' across drivers. 2026-05-28 22:21:47 +08:00
i3c drivers: Fix comment typos — 'register' → 'registered' across drivers. 2026-05-28 22:21:47 +08:00
input !sys/types.h: change time_t and clock_t to int64_t to align with other OSes 2026-05-19 16:21:28 +08:00
ioexpander include/debug.h: Move to include/nuttx/debug.h 2026-04-07 07:50:06 -03:00
ipcc include/debug.h: Move to include/nuttx/debug.h 2026-04-07 07:50:06 -03:00
lcd !boards: Remove NSH_ARCHINIT and board_app_initialize 2026-05-02 18:36:46 +08:00
leds !drivers/pwm: remove PWM_MULTICHAN option 2026-05-18 11:35:25 -04:00
loop include/debug.h: Move to include/nuttx/debug.h 2026-04-07 07:50:06 -03:00
math include/debug.h: Move to include/nuttx/debug.h 2026-04-07 07:50:06 -03:00
misc !nuttx: drop redundant casts on tv_sec/tv_nsec and fix printf formats 2026-05-19 16:21:28 +08:00
mmcsd include/debug.h: Move to include/nuttx/debug.h 2026-04-07 07:50:06 -03:00
modem style: fix checkpatch issues after debug.h move 2026-04-07 07:50:06 -03:00
motor drivers: Fix comment typos — 'register' → 'registered' across drivers. 2026-05-28 22:21:47 +08:00
mtd drivers/mtd/mx25rxx.c: add support for MX25L12873G 2026-05-20 14:50:18 -03:00
net drivers/net: Fix typo in lan9250_set_txavailable function name. 2026-05-29 09:43:20 +08:00
note !nuttx: drop redundant casts on tv_sec/tv_nsec and fix printf formats 2026-05-19 16:21:28 +08:00
pci include/debug.h: Move to include/nuttx/debug.h 2026-04-07 07:50:06 -03:00
pinctrl
pipes include/debug.h: Move to include/nuttx/debug.h 2026-04-07 07:50:06 -03:00
power !sys/types.h: change time_t and clock_t to int64_t to align with other OSes 2026-05-19 16:21:28 +08:00
rc drivers: Fix comment typos — 'register' → 'registered' across drivers. 2026-05-28 22:21:47 +08:00
regmap include/debug.h: Move to include/nuttx/debug.h 2026-04-07 07:50:06 -03:00
reset include/debug.h: Move to include/nuttx/debug.h 2026-04-07 07:50:06 -03:00
rf include/debug.h: Move to include/nuttx/debug.h 2026-04-07 07:50:06 -03:00
rpmsg drivers/rpmsg: Fix typo rpmsg_device_destory -> rpmsg_device_destroy 2026-05-30 17:49:03 +08:00
rptun drivers/rptun: guard nxsched_waitpid with CONFIG_SCHED_WAITPID 2026-05-21 06:28:36 +08:00
segger drivers/segger: Add a kconfig to override Segger SystemView target sources version 2025-07-22 23:21:31 +08:00
sensors drivers: Fix comment typos — 'register' → 'registered' across drivers. 2026-05-28 22:21:47 +08:00
serial drivers/serial: bound uart_tcdrain xmit-buffer wait by caller timeout 2026-06-02 19:50:55 +08:00
spi drivers: Fix comment typos — 'register' → 'registered' across drivers. 2026-05-28 22:21:47 +08:00
syslog !nuttx: drop redundant casts on tv_sec/tv_nsec and fix printf formats 2026-05-19 16:21:28 +08:00
thermal include/debug.h: Move to include/nuttx/debug.h 2026-04-07 07:50:06 -03:00
timers rtc/ptc85263A: Add handling of stop_enable flag. 2026-05-29 01:27:03 +08:00
usbdev include/debug.h: Move to include/nuttx/debug.h 2026-04-07 07:50:06 -03:00
usbhost drivers/usbhost_hidmouse: fix button detection in touchscreen example 2026-05-22 10:38:25 +08:00
usbmisc include/debug.h: Move to include/nuttx/debug.h 2026-04-07 07:50:06 -03:00
usbmonitor include/debug.h: Move to include/nuttx/debug.h 2026-04-07 07:50:06 -03:00
usrsock include/debug.h: Move to include/nuttx/debug.h 2026-04-07 07:50:06 -03:00
vhost include/debug.h: Move to include/nuttx/debug.h 2026-04-07 07:50:06 -03:00
video drivers: Fix comment typos — 'register' → 'registered' across drivers. 2026-05-28 22:21:47 +08:00
virtio include/debug.h: Move to include/nuttx/debug.h 2026-04-07 07:50:06 -03:00
wireless !sys/types.h: change time_t and clock_t to int64_t to align with other OSes 2026-05-19 16:21:28 +08:00
.gitignore
CMakeLists.txt
drivers_initialize.c serial/uart_rpmsg: add _raw version of driver 2026-02-23 09:19:57 -03:00
Kconfig espressif/rmt: replace rmtchar with arch-specific lirc adapter 2026-04-04 11:18:32 -03:00
Makefile docs/rc: document RC/LIRC drivers and remove empty drivers/rmt files 2026-04-04 11:18:32 -03:00