diff mbox series

[2/4] scsi: ufs: core: Use reg_lock to protect UTMRLCLR

Message ID 20241021120313.493371-3-avri.altman@wdc.com
State New
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 UTMRLCLR 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:25 p.m. UTC | #1
On 10/21/24 5:03 AM, Avri Altman wrote:
>   	if (!test_bit(tag, &hba->outstanding_tasks))
>   		goto out;
>   
> -	spin_lock_irqsave(hba->host->host_lock, flags);
> +	spin_lock_irqsave(&hba->reg_lock, flags);
>   	ufshcd_utmrl_clear(hba, tag);
> -	spin_unlock_irqrestore(hba->host->host_lock, flags);
> +	spin_unlock_irqrestore(&hba->reg_lock, flags);
>   
>   	/* poll for max. 1 sec to clear door bell register by h/w */
>   	err = ufshcd_wait_for_register(hba,

Hi Avri,

ufshcd_utmrl_clear() performs a single write so I assume that calls of
that function do not have to be serialized?

Thanks,

Bart.
Avri Altman Oct. 22, 2024, 6:02 a.m. UTC | #2
> 
> On 10/21/24 5:03 AM, Avri Altman wrote:
> >       if (!test_bit(tag, &hba->outstanding_tasks))
> >               goto out;
> >
> > -     spin_lock_irqsave(hba->host->host_lock, flags);
> > +     spin_lock_irqsave(&hba->reg_lock, flags);
> >       ufshcd_utmrl_clear(hba, tag);
> > -     spin_unlock_irqrestore(hba->host->host_lock, flags);
> > +     spin_unlock_irqrestore(&hba->reg_lock, flags);
> >
> >       /* poll for max. 1 sec to clear door bell register by h/w */
> >       err = ufshcd_wait_for_register(hba,
> 
> Hi Avri,
> 
> ufshcd_utmrl_clear() performs a single write so I assume that calls of that
> function do not 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 21eda055fb7d..081cbf7174da 100644
--- a/drivers/ufs/core/ufshcd.c
+++ b/drivers/ufs/core/ufshcd.c
@@ -7025,9 +7025,9 @@  static int ufshcd_clear_tm_cmd(struct ufs_hba *hba, int tag)
 	if (!test_bit(tag, &hba->outstanding_tasks))
 		goto out;
 
-	spin_lock_irqsave(hba->host->host_lock, flags);
+	spin_lock_irqsave(&hba->reg_lock, flags);
 	ufshcd_utmrl_clear(hba, tag);
-	spin_unlock_irqrestore(hba->host->host_lock, flags);
+	spin_unlock_irqrestore(&hba->reg_lock, flags);
 
 	/* poll for max. 1 sec to clear door bell register by h/w */
 	err = ufshcd_wait_for_register(hba,