Patch "mei: vsc: Call wake_up() in the threaded IRQ handler" has been added to the 6.8-stable tree

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



This is a note to let you know that I've just added the patch titled

    mei: vsc: Call wake_up() in the threaded IRQ handler

to the 6.8-stable tree which can be found at:
    http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary

The filename of the patch is:
     mei-vsc-call-wake_up-in-the-threaded-irq-handler.patch
and it can be found in the queue-6.8 subdirectory.

If you, or anyone else, feels it should not be added to the stable tree,
please let <stable@xxxxxxxxxxxxxxx> know about it.



commit 1ee94631f68f1829bf3dc3cae978870d81cce308
Author: Sakari Ailus <sakari.ailus@xxxxxxxxxxxxxxx>
Date:   Mon Feb 19 21:58:05 2024 +0200

    mei: vsc: Call wake_up() in the threaded IRQ handler
    
    [ Upstream commit 058a38acba15fd8e7b262ec6e17c4204cb15f984 ]
    
    The hard IRQ handler vsc_tp_irq() is called with a raw spinlock taken.
    wake_up() acquires a spinlock, a sleeping lock on PREEMPT_RT. This leads
    to sleeping in atomic context.
    
    Move the wake_up() call to the threaded IRQ handler vsc_tp_thread_isr()
    where it can be safely called.
    
    Fixes: 566f5ca97680 ("mei: Add transport driver for IVSC device")
    Signed-off-by: Sakari Ailus <sakari.ailus@xxxxxxxxxxxxxxx>
    Tested-and-Reviewed-by: Wentong Wu <wentong.wu@xxxxxxxxx>
    Link: https://lore.kernel.org/r/20240219195807.517742-2-sakari.ailus@xxxxxxxxxxxxxxx
    Signed-off-by: Greg Kroah-Hartman <gregkh@xxxxxxxxxxxxxxxxxxx>
    Signed-off-by: Sasha Levin <sashal@xxxxxxxxxx>

diff --git a/drivers/misc/mei/vsc-tp.c b/drivers/misc/mei/vsc-tp.c
index 55f7db490d3bb..0e623700c3b0e 100644
--- a/drivers/misc/mei/vsc-tp.c
+++ b/drivers/misc/mei/vsc-tp.c
@@ -416,8 +416,6 @@ static irqreturn_t vsc_tp_isr(int irq, void *data)
 
 	atomic_inc(&tp->assert_cnt);
 
-	wake_up(&tp->xfer_wait);
-
 	return IRQ_WAKE_THREAD;
 }
 
@@ -425,6 +423,8 @@ static irqreturn_t vsc_tp_thread_isr(int irq, void *data)
 {
 	struct vsc_tp *tp = data;
 
+	wake_up(&tp->xfer_wait);
+
 	if (tp->event_notify)
 		tp->event_notify(tp->event_notify_context);
 




[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Index of Archives]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux