lkml.org 
[lkml]   [2022]   [Jun]   [7]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 5.18 092/879] scsi: lpfc: Fix call trace observed during I/O with CMF enabled
    Date
    From: James Smart <jsmart2021@gmail.com>

    [ Upstream commit d6d45f67a11136cb88a70a29ab22ea6db8ae6bd5 ]

    The following was seen with CMF enabled:

    BUG: using smp_processor_id() in preemptible
    code: systemd-udevd/31711
    kernel: caller is lpfc_update_cmf_cmd+0x214/0x420 [lpfc]
    kernel: CPU: 12 PID: 31711 Comm: systemd-udevd
    kernel: Call Trace:
    kernel: <TASK>
    kernel: dump_stack_lvl+0x44/0x57
    kernel: check_preemption_disabled+0xbf/0xe0
    kernel: lpfc_update_cmf_cmd+0x214/0x420 [lpfc]
    kernel: lpfc_nvme_fcp_io_submit+0x23b4/0x4df0 [lpfc]

    this_cpu_ptr() calls smp_processor_id() in a preemptible context.

    Fix by using per_cpu_ptr() with raw_smp_processor_id() instead.

    Link: https://lore.kernel.org/r/20220412222008.126521-16-jsmart2021@gmail.com
    Co-developed-by: Justin Tee <justin.tee@broadcom.com>
    Signed-off-by: Justin Tee <justin.tee@broadcom.com>
    Signed-off-by: James Smart <jsmart2021@gmail.com>
    Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    ---
    drivers/scsi/lpfc/lpfc_scsi.c | 4 ++--
    1 file changed, 2 insertions(+), 2 deletions(-)

    diff --git a/drivers/scsi/lpfc/lpfc_scsi.c b/drivers/scsi/lpfc/lpfc_scsi.c
    index c4fa7d68fe03..f617a2ef6b0f 100644
    --- a/drivers/scsi/lpfc/lpfc_scsi.c
    +++ b/drivers/scsi/lpfc/lpfc_scsi.c
    @@ -3835,7 +3835,7 @@ lpfc_update_cmf_cmpl(struct lpfc_hba *phba,
    else
    time = div_u64(time + 500, 1000); /* round it */

    - cgs = this_cpu_ptr(phba->cmf_stat);
    + cgs = per_cpu_ptr(phba->cmf_stat, raw_smp_processor_id());
    atomic64_add(size, &cgs->rcv_bytes);
    atomic64_add(time, &cgs->rx_latency);
    atomic_inc(&cgs->rx_io_cnt);
    @@ -3879,7 +3879,7 @@ lpfc_update_cmf_cmd(struct lpfc_hba *phba, uint32_t size)
    atomic_set(&phba->rx_max_read_cnt, size);
    }

    - cgs = this_cpu_ptr(phba->cmf_stat);
    + cgs = per_cpu_ptr(phba->cmf_stat, raw_smp_processor_id());
    atomic64_add(size, &cgs->total_bytes);
    return 0;
    }
    --
    2.35.1


    \
     
     \ /
      Last update: 2022-06-08 00:10    [W:2.247 / U:2.012 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site