FAILED: patch "[PATCH] serial: stm32: Merge hard IRQ and threaded IRQ handling into" failed to apply to 5.10-stable tree
Subsystems (3)
[email protected]
maintainerThe patch below does not apply to the 5.10-stable tree.
If someone wants it applied there, or to any other stable or longterm tree, then please email the backport, including the original git commit id to <[email protected]>.
Possible dependencies:
3f6c02fa712b ("serial: stm32: Merge hard IRQ and threaded IRQ handling into single IRQ handler") 6333a4850621 ("serial: stm32: push DMA RX data before suspending")6eeb348c8482 ("serial: stm32: terminate / restart DMA transfer at suspend / resume") e0abc903deea ("serial: stm32: rework RX dma initialization and release") d1ec8a2eabe9 ("serial: stm32: update throttle and unthrottle ops for dma mode") 33bb2f6ac308 ("serial: stm32: rework RX over DMA")cc58d0a3f0a4 ("serial: stm32: re-introduce an irq flag condition in usart_receive_chars") 59bd4eedf118 ("serial: stm32: use the defined variable to simplify code") a7770a4bfcf4 ("serial: stm32: defer probe for dma devices")cea37afd28f1 ("serial: stm32: defer sysrq processing")e359b4411c28 ("serial: stm32: fix threaded interrupt handling")3d530017bef1 ("serial: stm32: update wakeup IRQ management")c0f3332cb5f2 ("serial: stm32: clean wakeup handling in serial_suspend") 1631eeeaf084 ("serial: stm32: rework wakeup management")9f77d19207a0 ("serial: stm32: add FIFO flush when port is closed")12761869f0ef ("serial: stm32: fix wake-up flag handling")ad7676812437 ("serial: stm32: fix a deadlock condition with wakeup event") 25a8e7611da5 ("serial: stm32: fix TX and RX FIFO thresholds")f4518a8a75f5 ("serial: stm32: fix startup by enabling usart for reception") 87fd0741d6dc ("serial: stm32: fix probe and remove order for dma")
thanks,
greg k-h
------------------ original commit in Linus's tree ------------------
From 3f6c02fa712bd453871877fe1d1969625617471e Mon Sep 17 00:00:00 2001
From: Marek Vasut <[email protected]>
Date: Fri, 20 Jan 2023 17:03:32 +0100
Subject: [PATCH] serial: stm32: Merge hard IRQ and threaded IRQ handling into
single IRQ handler
Requesting an interrupt with IRQF_ONESHOT will run the primary handler in the hard-IRQ context even in the force-threaded mode. The force-threaded mode is used by PREEMPT_RT in order to avoid acquiring sleeping locks (spinlock_t) in hard-IRQ context. This combination makes it impossible and leads to "sleeping while atomic" warnings.
Use one interrupt handler for both handlers (primary and secondary) and drop the IRQF_ONESHOT flag which is not needed.
drivers/tty/serial/stm32-usart.c +5 -28
@@ -797,25 +797,11 @@ static irqreturn_t stm32_usart_interrupt(int irq, void *ptr)spin_unlock (&port->lock); } -if (stm32_usart_rx_dma_enabled (port)) -return IRQ_WAKE_THREAD ; -else -return IRQ_HANDLED ; -} - -static irqreturn_t stm32_usart_threaded_interrupt (int irq,void *ptr) -{ -struct uart_port *port = ptr; -struct tty_port *tport = &port->state->port; -struct stm32_port *stm32_port =to_stm32_port (port); -unsigned int size; -unsigned long flags; -/* Receiver timeout irq for DMA RX */ -if (!stm32_port->throttled) { -spin_lock_irqsave (&port->lock, flags); +if (stm32_usart_rx_dma_enabled (port) && !stm32_port->throttled) { +spin_lock (&port->lock); size =stm32_usart_receive_chars (port, false); -uart_unlock_and_check_sysrq_irqrestore (port, flags); +uart_unlock_and_check_sysrq (port);if (size)tty_flip_buffer_push (tport); }
@@ -1015,10 +1001,8 @@ static int stm32_usart_startup(struct uart_port *port)u32 val;int ret; - ret =request_threaded_irq (port->irq, stm32_usart_interrupt, - stm32_usart_threaded_interrupt, -IRQF_ONESHOT |IRQF_NO_SUSPEND , - name, port); + ret =request_irq (port->irq, stm32_usart_interrupt, +IRQF_NO_SUSPEND , name, port);if (ret)return ret;
@@ -1601,13 +1585,6 @@ static int stm32_usart_of_dma_rx_probe(struct stm32_port *stm32port,struct dma_slave_config config;int ret; -/* -* Using DMA and threaded handler for the console could lead to -* deadlocks. -*/ -if (uart_console (port)) -return -ENODEV ; - stm32port->rx_buf =dma_alloc_coherent (dev,RX_BUF_L , &stm32port->rx_dma_buf,GFP_KERNEL );