diff --git a/drivers/usbdev/cdcncm.c b/drivers/usbdev/cdcncm.c index d9fa738c600..7f10e5355e3 100644 --- a/drivers/usbdev/cdcncm.c +++ b/drivers/usbdev/cdcncm.c @@ -1331,8 +1331,13 @@ static int cdcncm_send(FAR struct netdev_lowerhalf_s *dev, FAR netpkt_t *pkt) } else { - work_queue(ETHWORK, &self->delaywork, cdcncm_transmit_work, self, - MSEC2TICK(CDCNCM_DGRAM_COMBINE_PERIOD)); + /* Defer to the work thread with zero delay. A non-zero delay is + * rounded up to a full tick (10ms at 100Hz), which dominated the + * USB-NIC round-trip; delay 0 wakes the worker immediately while + * still coalescing datagrams appended in the same TX burst. + */ + + work_queue(ETHWORK, &self->delaywork, cdcncm_transmit_work, self, 0); } return OK;