Patch "scsi: lpfc: Fix hard lockup when reading the rx_monitor from debugfs" has been added to the 6.0-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

    scsi: lpfc: Fix hard lockup when reading the rx_monitor from debugfs

to the 6.0-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:
     scsi-lpfc-fix-hard-lockup-when-reading-the-rx_monito.patch
and it can be found in the queue-6.0 subdirectory.

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



commit b19c314c5776bbd982fe09a5a07ecefbc5d4d384
Author: Justin Tee <justin.tee@xxxxxxxxxxxx>
Date:   Mon Oct 17 09:43:20 2022 -0700

    scsi: lpfc: Fix hard lockup when reading the rx_monitor from debugfs
    
    [ Upstream commit c44e50f4a0ec00c2298f31f91bc2c3e9bbd81c7e ]
    
    During I/O and simultaneous cat of /sys/kernel/debug/lpfc/fnX/rx_monitor, a
    hard lockup similar to the call trace below may occur.
    
    The spin_lock_bh in lpfc_rx_monitor_report is not protecting from timer
    interrupts as expected, so change the strength of the spin lock to _irq.
    
    Kernel panic - not syncing: Hard LOCKUP
    CPU: 3 PID: 110402 Comm: cat Kdump: loaded
    
    exception RIP: native_queued_spin_lock_slowpath+91
    
    [IRQ stack]
     native_queued_spin_lock_slowpath at ffffffffb814e30b
     _raw_spin_lock at ffffffffb89a667a
     lpfc_rx_monitor_record at ffffffffc0a73a36 [lpfc]
     lpfc_cmf_timer at ffffffffc0abbc67 [lpfc]
     __hrtimer_run_queues at ffffffffb8184250
     hrtimer_interrupt at ffffffffb8184ab0
     smp_apic_timer_interrupt at ffffffffb8a026ba
     apic_timer_interrupt at ffffffffb8a01c4f
    [End of IRQ stack]
    
     apic_timer_interrupt at ffffffffb8a01c4f
     lpfc_rx_monitor_report at ffffffffc0a73c80 [lpfc]
     lpfc_rx_monitor_read at ffffffffc0addde1 [lpfc]
     full_proxy_read at ffffffffb83e7fc3
     vfs_read at ffffffffb833fe71
     ksys_read at ffffffffb83402af
     do_syscall_64 at ffffffffb800430b
     entry_SYSCALL_64_after_hwframe at ffffffffb8a000ad
    
    Signed-off-by: Justin Tee <justin.tee@xxxxxxxxxxxx>
    Link: https://lore.kernel.org/r/20221017164323.14536-2-justintee8345@xxxxxxxxx
    Signed-off-by: Martin K. Petersen <martin.petersen@xxxxxxxxxx>
    Signed-off-by: Sasha Levin <sashal@xxxxxxxxxx>

diff --git a/drivers/scsi/lpfc/lpfc_sli.c b/drivers/scsi/lpfc/lpfc_sli.c
index 03c21167fc85..c4960da4c1c4 100644
--- a/drivers/scsi/lpfc/lpfc_sli.c
+++ b/drivers/scsi/lpfc/lpfc_sli.c
@@ -8076,10 +8076,10 @@ u32 lpfc_rx_monitor_report(struct lpfc_hba *phba,
 					"IO_cnt", "Info", "BWutil(ms)");
 	}
 
-	/* Needs to be _bh because record is called from timer interrupt
+	/* Needs to be _irq because record is called from timer interrupt
 	 * context
 	 */
-	spin_lock_bh(ring_lock);
+	spin_lock_irq(ring_lock);
 	while (*head_idx != *tail_idx) {
 		entry = &ring[*head_idx];
 
@@ -8123,7 +8123,7 @@ u32 lpfc_rx_monitor_report(struct lpfc_hba *phba,
 		if (cnt >= max_read_entries)
 			break;
 	}
-	spin_unlock_bh(ring_lock);
+	spin_unlock_irq(ring_lock);
 
 	return cnt;
 }



[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