scsi: smartpqi: Remove contention for raid_bypass_cnt
authorMike McGowen <mike.mcgowen@microchip.com>
Fri, 28 Apr 2023 15:37:05 +0000 (10:37 -0500)
committerMartin K. Petersen <martin.petersen@oracle.com>
Mon, 8 May 2023 11:17:11 +0000 (07:17 -0400)
Reduce CPU contention when incrementing variable raid_bypass_cnt.

Remove the atomic operations for this variable by changing the atomic to an
unsigned int and replace atomic operations with standard operations. The
value is only checked that it is increasing and accuracy is not required.

Reviewed-by: Scott Benesh <scott.benesh@microchip.com>
Reviewed-by: Scott Teel <scott.teel@microchip.com>
Reviewed-by: Kevin Barnett <kevin.barnett@microchip.com>
Signed-off-by: Mike McGowen <mike.mcgowen@microchip.com>
Signed-off-by: Don Brace <don.brace@microchip.com>
Link: https://lore.kernel.org/r/20230428153712.297638-6-don.brace@microchip.com
Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
drivers/scsi/smartpqi/smartpqi.h
drivers/scsi/smartpqi/smartpqi_init.c

index 228838eb3686f5739a75b176d504a4a7b5b90f85..659a087a0e52bc147adb9eded38cc92b55674757 100644 (file)
@@ -1147,7 +1147,7 @@ struct pqi_scsi_dev {
 
        struct pqi_stream_data stream_data[NUM_STREAMS_PER_LUN];
        atomic_t scsi_cmds_outstanding[PQI_MAX_LUNS_PER_DEVICE];
-       atomic_t raid_bypass_cnt;
+       unsigned int raid_bypass_cnt;
 };
 
 /* VPD inquiry pages */
index 3daad878bafabada0244730fa9bf54f410cf2058..7fe80bef1a15c4f678881f3cf31aa784f5d7c79a 100644 (file)
@@ -6052,7 +6052,7 @@ static int pqi_scsi_queue_command(struct Scsi_Host *shost, struct scsi_cmnd *scm
                        rc = pqi_raid_bypass_submit_scsi_cmd(ctrl_info, device, scmd, queue_group);
                        if (rc == 0 || rc == SCSI_MLQUEUE_HOST_BUSY) {
                                raid_bypassed = true;
-                               atomic_inc(&device->raid_bypass_cnt);
+                               device->raid_bypass_cnt++;
                        }
                }
                if (!raid_bypassed)
@@ -7288,7 +7288,7 @@ static ssize_t pqi_raid_bypass_cnt_show(struct device *dev,
        struct scsi_device *sdev;
        struct pqi_scsi_dev *device;
        unsigned long flags;
-       int raid_bypass_cnt;
+       unsigned int raid_bypass_cnt;
 
        sdev = to_scsi_device(dev);
        ctrl_info = shost_to_hba(sdev->host);
@@ -7304,7 +7304,7 @@ static ssize_t pqi_raid_bypass_cnt_show(struct device *dev,
                return -ENODEV;
        }
 
-       raid_bypass_cnt = atomic_read(&device->raid_bypass_cnt);
+       raid_bypass_cnt = device->raid_bypass_cnt;
 
        spin_unlock_irqrestore(&ctrl_info->scsi_device_list_lock, flags);