Message ID | 20241009053854.15353-1-ed.tsai@mediatek.com (mailing list archive) |
---|---|
State | New |
Headers | show |
Series | [v2] scsi: ufs: ufs-mediatek: configure individual LU queue flags | expand |
On 10/8/24 10:38 PM, ed.tsai@mediatek.com wrote: > In addition, because the SCSI probe_type = PROBE_PREFFER_ASYNCHRONOUS, > sd_probe() is completed by another thread, causing the sd index to be > obtained asynchronously. Directly setting the queue through sysfs is > cumbersome. We do not need to change the queue settings at runtime, so > a simpler and more intuitive approach is to set its flag once the SCSI > device is confirmed to be ready. Please set this flag from user space. The example below shows that it is easy to set this flag from user space without knowing which sd* name has been assigned to the block device: $ adb root $ adb shell 'cat /sys/class/scsi_device/0:0:0:2/device/block/*/queue/rq_affinity' 1 $ adb shell 'echo 2 > $(echo /sys/class/scsi_device/0:0:0:2/device/block/*/queue/rq_affinity)' $ adb shell 'cat /sys/class/scsi_device/0:0:0:2/device/block/*/queue/rq_affinity' 2 Thanks, Bart.
diff --git a/drivers/ufs/core/ufshcd.c b/drivers/ufs/core/ufshcd.c index 7cab103112e1..be50b86269bf 100644 --- a/drivers/ufs/core/ufshcd.c +++ b/drivers/ufs/core/ufshcd.c @@ -5253,6 +5253,9 @@ static int ufshcd_device_configure(struct scsi_device *sdev, */ sdev->silence_suspend = 1; + if (hba->vops && hba->vops->config_scsi_dev) + hba->vops->config_scsi_dev(sdev); + ufshcd_crypto_register(hba, q); return 0; diff --git a/drivers/ufs/host/ufs-mediatek.c b/drivers/ufs/host/ufs-mediatek.c index 9a5919434c4e..0b57623edca5 100644 --- a/drivers/ufs/host/ufs-mediatek.c +++ b/drivers/ufs/host/ufs-mediatek.c @@ -1780,6 +1780,15 @@ static int ufs_mtk_config_esi(struct ufs_hba *hba) return ufs_mtk_config_mcq(hba, true); } +static void ufs_mtk_config_scsi_dev(struct scsi_device *sdev) +{ + struct ufs_hba *hba = shost_priv(sdev->host); + + dev_dbg(hba->dev, "lu %llu scsi device configured", sdev->lun); + if (sdev->lun == 2) + blk_queue_flag_set(QUEUE_FLAG_SAME_FORCE, sdev->request_queue); +} + /* * struct ufs_hba_mtk_vops - UFS MTK specific variant operations * @@ -1809,6 +1818,7 @@ static const struct ufs_hba_variant_ops ufs_hba_mtk_vops = { .op_runtime_config = ufs_mtk_op_runtime_config, .mcq_config_resource = ufs_mtk_mcq_config_resource, .config_esi = ufs_mtk_config_esi, + .config_scsi_dev = ufs_mtk_config_scsi_dev, }; /** diff --git a/include/ufs/ufshcd.h b/include/ufs/ufshcd.h index a95282b9f743..800d79dc91fc 100644 --- a/include/ufs/ufshcd.h +++ b/include/ufs/ufshcd.h @@ -383,6 +383,7 @@ struct ufs_hba_variant_ops { int (*get_outstanding_cqs)(struct ufs_hba *hba, unsigned long *ocqs); int (*config_esi)(struct ufs_hba *hba); + void (*config_scsi_dev)(struct scsi_device *sdev); }; /* clock gating state */