If MCQ support is present, enabling it after MCQ support
has been configured would require reallocating tags and memory.
It would also free up the already allocated memory in
Single Doorbell Mode. So defer invoking scsi_add_host() until
MCQ is configured.
Co-developed-by: Can Guo <[email protected]>
Signed-off-by: Can Guo <[email protected]>
Signed-off-by: Asutosh Das <[email protected]>
---
drivers/ufs/core/ufshcd.c | 19 +++++++++++++++----
1 file changed, 15 insertions(+), 4 deletions(-)
diff --git a/drivers/ufs/core/ufshcd.c b/drivers/ufs/core/ufshcd.c
index 08be8ad..42c49ce 100644
--- a/drivers/ufs/core/ufshcd.c
+++ b/drivers/ufs/core/ufshcd.c
@@ -8208,6 +8208,7 @@ static int ufshcd_probe_hba(struct ufs_hba *hba, bool init_dev_params)
int ret;
unsigned long flags;
ktime_t start = ktime_get();
+ struct Scsi_Host *host = hba->host;
hba->ufshcd_state = UFSHCD_STATE_RESET;
@@ -8242,6 +8243,14 @@ static int ufshcd_probe_hba(struct ufs_hba *hba, bool init_dev_params)
ret = ufshcd_device_params_init(hba);
if (ret)
goto out;
+
+ if (is_mcq_supported(hba)) {
+ ret = scsi_add_host(host, hba->dev);
+ if (ret) {
+ dev_err(hba->dev, "scsi_add_host failed\n");
+ goto out;
+ }
+ }
}
ufshcd_tune_unipro_params(hba);
@@ -9838,10 +9847,12 @@ int ufshcd_init(struct ufs_hba *hba, void __iomem *mmio_base, unsigned int irq)
hba->is_irq_enabled = true;
}
- err = scsi_add_host(host, hba->dev);
- if (err) {
- dev_err(hba->dev, "scsi_add_host failed\n");
- goto out_disable;
+ if (!is_mcq_supported(hba)) {
+ err = scsi_add_host(host, hba->dev);
+ if (err) {
+ dev_err(hba->dev, "scsi_add_host failed\n");
+ goto out_disable;
+ }
}
hba->tmf_tag_set = (struct blk_mq_tag_set) {
--
2.7.4
On 11/22/22 20:10, Asutosh Das wrote:
> If MCQ support is present, enabling it after MCQ support
> has been configured would require reallocating tags and memory.
> It would also free up the already allocated memory in
> Single Doorbell Mode. So defer invoking scsi_add_host() until
> MCQ is configured.
Reviewed-by: Bart Van Assche <[email protected]>
On Tue, Nov 22, 2022 at 08:10:17PM -0800, Asutosh Das wrote:
> If MCQ support is present, enabling it after MCQ support
> has been configured would require reallocating tags and memory.
> It would also free up the already allocated memory in
> Single Doorbell Mode. So defer invoking scsi_add_host() until
> MCQ is configured.
Why cannot we do it for non MCQ case as well?
Thanks,
Mani
>
> Co-developed-by: Can Guo <[email protected]>
> Signed-off-by: Can Guo <[email protected]>
> Signed-off-by: Asutosh Das <[email protected]>
> ---
> drivers/ufs/core/ufshcd.c | 19 +++++++++++++++----
> 1 file changed, 15 insertions(+), 4 deletions(-)
>
> diff --git a/drivers/ufs/core/ufshcd.c b/drivers/ufs/core/ufshcd.c
> index 08be8ad..42c49ce 100644
> --- a/drivers/ufs/core/ufshcd.c
> +++ b/drivers/ufs/core/ufshcd.c
> @@ -8208,6 +8208,7 @@ static int ufshcd_probe_hba(struct ufs_hba *hba, bool init_dev_params)
> int ret;
> unsigned long flags;
> ktime_t start = ktime_get();
> + struct Scsi_Host *host = hba->host;
>
> hba->ufshcd_state = UFSHCD_STATE_RESET;
>
> @@ -8242,6 +8243,14 @@ static int ufshcd_probe_hba(struct ufs_hba *hba, bool init_dev_params)
> ret = ufshcd_device_params_init(hba);
> if (ret)
> goto out;
> +
> + if (is_mcq_supported(hba)) {
> + ret = scsi_add_host(host, hba->dev);
> + if (ret) {
> + dev_err(hba->dev, "scsi_add_host failed\n");
> + goto out;
> + }
> + }
> }
>
> ufshcd_tune_unipro_params(hba);
> @@ -9838,10 +9847,12 @@ int ufshcd_init(struct ufs_hba *hba, void __iomem *mmio_base, unsigned int irq)
> hba->is_irq_enabled = true;
> }
>
> - err = scsi_add_host(host, hba->dev);
> - if (err) {
> - dev_err(hba->dev, "scsi_add_host failed\n");
> - goto out_disable;
> + if (!is_mcq_supported(hba)) {
> + err = scsi_add_host(host, hba->dev);
> + if (err) {
> + dev_err(hba->dev, "scsi_add_host failed\n");
> + goto out_disable;
> + }
> }
>
> hba->tmf_tag_set = (struct blk_mq_tag_set) {
> --
> 2.7.4
>
--
மணிவண்ணன் சதாசிவம்
On Mon, Nov 28 2022 at 06:42 -0800, Manivannan Sadhasivam wrote:
>On Tue, Nov 22, 2022 at 08:10:17PM -0800, Asutosh Das wrote:
>> If MCQ support is present, enabling it after MCQ support
>> has been configured would require reallocating tags and memory.
>> It would also free up the already allocated memory in
>> Single Doorbell Mode. So defer invoking scsi_add_host() until
>> MCQ is configured.
>
>Why cannot we do it for non MCQ case as well?
>
Hello Mani,
Thanks for taking a look.
I don't think there was any specific reason to defer it for SDB mode.
-asd
>--
>மணிவண்ணன் சதாசிவம்