]> git.proxmox.com Git - mirror_ubuntu-jammy-kernel.git/commitdiff
scsi: mpi3mr: Replace spin_lock() with spin_lock_irqsave()
authorSreekanth Reddy <sreekanth.reddy@broadcom.com>
Mon, 20 Dec 2021 14:11:36 +0000 (19:41 +0530)
committerStefan Bader <stefan.bader@canonical.com>
Wed, 27 Apr 2022 10:00:26 +0000 (12:00 +0200)
BugLink: https://bugs.launchpad.net/bugs/1967116
Use spin_lock_irqsave() instead of spin_lock() while acquiring
reply_free_queue_lock & sbq_lock locks.

Link: https://lore.kernel.org/r/20211220141159.16117-3-sreekanth.reddy@broadcom.com
Signed-off-by: Sreekanth Reddy <sreekanth.reddy@broadcom.com>
Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
(cherry picked from commit a83ec831b24a8142e0871544b19ee5671607588e)
Signed-off-by: Jeff Lane <jeffrey.lane@canonical.com>
Acked-by: Tim Gardner <tim.gardner@canonical.com>
Acked-by: Paolo Pisati <paolo.pisati@canonical.com>
Signed-off-by: Paolo Pisati <paolo.pisati@canonical.com>
drivers/scsi/mpi3mr/mpi3mr_fw.c

index 9bb64a7b2af7295692d92661f333592b8536f3e3..04cfe4066dc625c1cd1ecfc1c8dbd2aebd9ce90c 100644 (file)
@@ -124,8 +124,9 @@ static void mpi3mr_repost_reply_buf(struct mpi3mr_ioc *mrioc,
        u64 reply_dma)
 {
        u32 old_idx = 0;
+       unsigned long flags;
 
-       spin_lock(&mrioc->reply_free_queue_lock);
+       spin_lock_irqsave(&mrioc->reply_free_queue_lock, flags);
        old_idx  =  mrioc->reply_free_queue_host_index;
        mrioc->reply_free_queue_host_index = (
            (mrioc->reply_free_queue_host_index ==
@@ -134,15 +135,16 @@ static void mpi3mr_repost_reply_buf(struct mpi3mr_ioc *mrioc,
        mrioc->reply_free_q[old_idx] = cpu_to_le64(reply_dma);
        writel(mrioc->reply_free_queue_host_index,
            &mrioc->sysif_regs->reply_free_host_index);
-       spin_unlock(&mrioc->reply_free_queue_lock);
+       spin_unlock_irqrestore(&mrioc->reply_free_queue_lock, flags);
 }
 
 void mpi3mr_repost_sense_buf(struct mpi3mr_ioc *mrioc,
        u64 sense_buf_dma)
 {
        u32 old_idx = 0;
+       unsigned long flags;
 
-       spin_lock(&mrioc->sbq_lock);
+       spin_lock_irqsave(&mrioc->sbq_lock, flags);
        old_idx  =  mrioc->sbq_host_index;
        mrioc->sbq_host_index = ((mrioc->sbq_host_index ==
            (mrioc->sense_buf_q_sz - 1)) ? 0 :
@@ -150,7 +152,7 @@ void mpi3mr_repost_sense_buf(struct mpi3mr_ioc *mrioc,
        mrioc->sense_buf_q[old_idx] = cpu_to_le64(sense_buf_dma);
        writel(mrioc->sbq_host_index,
            &mrioc->sysif_regs->sense_buffer_free_host_index);
-       spin_unlock(&mrioc->sbq_lock);
+       spin_unlock_irqrestore(&mrioc->sbq_lock, flags);
 }
 
 static void mpi3mr_print_event_data(struct mpi3mr_ioc *mrioc,