2022-07-04 4:19 GMT+02:00, Greg T <greg.iforce@xxxxxxxxx>: > Call Trace: > <TASK> > _raw_spin_lock_irqsave+0x41/0x50 > uart_write+0x69/0x1e0 > serport_serio_write+0x2b/0x40 [serport] > iforce_serio_xmit+0xa8/0x1a0 [iforce_serio] > serport_ldisc_write_wakeup+0x59/0x70 [serport] I've found this in tty_ldisc.h: * @write_wakeup: [DRV] ``void ()(struct tty_struct *tty)`` * * This function is called by the low-level tty driver to signal that line * discpline should try to send more characters to the low-level driver * for transmission. If the line discpline does not have any more data to * send, it can just return. If the line discipline does have some data to * send, please arise a tasklet or workqueue to do the real data transfer. * Do not send data in this hook, it may lead to a deadlock. Does iforce-serio.c have a maintainer? It looks to me that iforce_serio_write_wakeup should not call iforce_serio_xmit in it.