Re: [PATCH V4 12/12] scsi: replace sdev->device_busy with sbitmap
From: Ming Lei <hidden>
Date: 2020-11-19 06:34:57
Also in:
linux-scsi, oe-kbuild-all
On Thu, Nov 19, 2020 at 11:50:39AM +0530, Kashyap Desai wrote:
quoted hunk ↗ jump to hunk
quoted
quoted
If you fix the issue, kindly add following tag as appropriate Reported-by: kernel test robot <redacted> All errors (new ones prefixed by >>):quoted
quoted
drivers/scsi/megaraid/megaraid_sas_fusion.c:365:41: error: nomemberquoted
named 'device_busy' in 'struct scsi_device'quoted
sdev_busy = atomic_read(&scmd->device->device_busy);This new reference to sdev->device_busy is added by recent shared hosttagquoted
patch, and according to the comment, you may have planed to convert into one megaraid internal counter. /* TBD - if sml remove device_busy in future, driver * should track counter in internal structure. */ So can you post one patch? And I am happy to fold it into this series.Ming - Please find the patch for megaraid_sas driver - I have used helper inline function just for inter-operability with older kernel to support in our out of box driver. This way it will be easy for us to replace helper function as per kernel version check. Subject: [PATCH] megaraid_sas: replace sdev_busy with local counter --- drivers/scsi/megaraid/megaraid_sas.h | 2 ++ drivers/scsi/megaraid/megaraid_sas_fusion.c | 34 ++++++++++++++++++--- 2 files changed, 32 insertions(+), 4 deletions(-)diff --git a/drivers/scsi/megaraid/megaraid_sas.hb/drivers/scsi/megaraid/megaraid_sas.h index 0f808d63580e..0c6a56b24c6e 100644--- a/drivers/scsi/megaraid/megaraid_sas.h +++ b/drivers/scsi/megaraid/megaraid_sas.h@@ -2019,10 +2019,12 @@ union megasas_frame { * struct MR_PRIV_DEVICE - sdev private hostdata * @is_tm_capable: firmware managed tm_capable flag * @tm_busy: TM request is in progress + * @sdev_priv_busy: pending command per sdev */ struct MR_PRIV_DEVICE { bool is_tm_capable; bool tm_busy; + atomic_t sdev_priv_busy; atomic_t r1_ldio_hint; u8 interface_type; u8 task_abort_tmo;diff --git a/drivers/scsi/megaraid/megaraid_sas_fusion.cb/drivers/scsi/megaraid/megaraid_sas_fusion.c index fd607287608e..e813ea0ad8b7 100644--- a/drivers/scsi/megaraid/megaraid_sas_fusion.c +++ b/drivers/scsi/megaraid/megaraid_sas_fusion.c@@ -220,6 +220,32 @@ megasas_clear_intr_fusion(struct megasas_instance*instance) return 1; } +static inline void +megasas_sdev_busy_inc(struct scsi_cmnd *scmd) +{ + struct MR_PRIV_DEVICE *mr_device_priv_data; + + mr_device_priv_data = scmd->device->hostdata; + atomic_inc(&mr_device_priv_data->sdev_priv_busy); +} +static inline void +megasas_sdev_busy_dec(struct scsi_cmnd *scmd) +{ + struct MR_PRIV_DEVICE *mr_device_priv_data; + + mr_device_priv_data = scmd->device->hostdata; + atomic_dec(&mr_device_priv_data->sdev_priv_busy); +} +static inline int +megasas_sdev_busy_read(struct scsi_cmnd *scmd) +{ + struct MR_PRIV_DEVICE *mr_device_priv_data; + + mr_device_priv_data = scmd->device->hostdata; + return atomic_read(&mr_device_priv_data->sdev_priv_busy); +} + + /** * megasas_get_cmd_fusion - Get a command from the free pool * @instance: Adapter soft state@@ -359,10 +385,7 @@ megasas_get_msix_index(struct megasas_instance*instance, { int sdev_busy; - /* TBD - if sml remove device_busy in future, driver - * should track counter in internal structure. - */ - sdev_busy = atomic_read(&scmd->device->device_busy); + sdev_busy = megasas_sdev_busy_read(scmd);
The above is only used for MR_BALANCED_PERF_MODE, so maybe you can skip inc/dec/read the counter for other perf mode. Thanks, Ming