diff mbox series

[3/4] scsi: ufs: core: Use reg_lock to protect UTRLCLR

Message ID 20241021120313.493371-4-avri.altman@wdc.com (mailing list archive)
State Superseded
Headers show
Series Untie the host lock entanglement - part 1 | expand

Commit Message

Avri Altman Oct. 21, 2024, 12:03 p.m. UTC
Use the host register lock to serialize access to the UTRLCLR as well,
instead of the host_lock.

Signed-off-by: Avri Altman <avri.altman@wdc.com>
---
 drivers/ufs/core/ufshcd.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

Comments

Bart Van Assche Oct. 21, 2024, 8:26 p.m. UTC | #1
On 10/21/24 5:03 AM, Avri Altman wrote:
> @@ -3100,9 +3100,9 @@ static int ufshcd_clear_cmd(struct ufs_hba *hba, u32 task_tag)
>   	mask = 1U << task_tag;
>   
>   	/* clear outstanding transaction before retry */
> -	spin_lock_irqsave(hba->host->host_lock, flags);
> +	spin_lock_irqsave(&hba->reg_lock, flags);
>   	ufshcd_utrl_clear(hba, mask);
> -	spin_unlock_irqrestore(hba->host->host_lock, flags);
> +	spin_unlock_irqrestore(&hba->reg_lock, flags);
>   
>   	/*
>   	 * wait for h/w to clear corresponding bit in door-bell.

Hi Avri,

A similar comment as for the previous patch applies to this patch:
ufshcd_utrl_clear() performs a single MMIO write so I don't think that
calls of this function have to be serialized.

Thanks,

Bart.
Avri Altman Oct. 22, 2024, 6:03 a.m. UTC | #2
> On 10/21/24 5:03 AM, Avri Altman wrote:
> > @@ -3100,9 +3100,9 @@ static int ufshcd_clear_cmd(struct ufs_hba *hba,
> u32 task_tag)
> >       mask = 1U << task_tag;
> >
> >       /* clear outstanding transaction before retry */
> > -     spin_lock_irqsave(hba->host->host_lock, flags);
> > +     spin_lock_irqsave(&hba->reg_lock, flags);
> >       ufshcd_utrl_clear(hba, mask);
> > -     spin_unlock_irqrestore(hba->host->host_lock, flags);
> > +     spin_unlock_irqrestore(&hba->reg_lock, flags);
> >
> >       /*
> >        * wait for h/w to clear corresponding bit in door-bell.
> 
> Hi Avri,
> 
> A similar comment as for the previous patch applies to this patch:
> ufshcd_utrl_clear() performs a single MMIO write so I don't think that calls of
> this function have to be serialized.
Done.

Thanks,
Avri

> 
> Thanks,
> 
> Bart.
diff mbox series

Patch

diff --git a/drivers/ufs/core/ufshcd.c b/drivers/ufs/core/ufshcd.c
index 081cbf7174da..4eee737a4fd5 100644
--- a/drivers/ufs/core/ufshcd.c
+++ b/drivers/ufs/core/ufshcd.c
@@ -3100,9 +3100,9 @@  static int ufshcd_clear_cmd(struct ufs_hba *hba, u32 task_tag)
 	mask = 1U << task_tag;
 
 	/* clear outstanding transaction before retry */
-	spin_lock_irqsave(hba->host->host_lock, flags);
+	spin_lock_irqsave(&hba->reg_lock, flags);
 	ufshcd_utrl_clear(hba, mask);
-	spin_unlock_irqrestore(hba->host->host_lock, flags);
+	spin_unlock_irqrestore(&hba->reg_lock, flags);
 
 	/*
 	 * wait for h/w to clear corresponding bit in door-bell.