diff mbox series

[v4,3/4] scsi: ufs: core: Make ufshcd_uic_cmd_compl() easier to analyze

Message ID 20240912223019.3510966-4-bvanassche@acm.org (mailing list archive)
State Accepted
Headers show
Series Clean up the UFS driver UIC code | expand

Commit Message

Bart Van Assche Sept. 12, 2024, 10:30 p.m. UTC
In ufshcd_uic_cmd_compl(), there is code that dereferences 'cmd' with
and without checking the 'cmd' pointer. This confuses static source code
analyzers like Coverity and sparse. Since none of the code in
ufshcd_uic_cmd_compl() can do anything useful if 'cmd' is NULL, move the
'cmd' test near the start of this function.

Signed-off-by: Bart Van Assche <bvanassche@acm.org>
---
 drivers/ufs/core/ufshcd.c | 8 +++++++-
 1 file changed, 7 insertions(+), 1 deletion(-)

Comments

Peter Wang (王信友) Sept. 13, 2024, 7:06 a.m. UTC | #1
On Thu, 2024-09-12 at 15:30 -0700, Bart Van Assche wrote:
>  	 
> External email : Please do not click links or open attachments until
> you have verified the sender or the content.
>  In ufshcd_uic_cmd_compl(), there is code that dereferences 'cmd'
> with
> and without checking the 'cmd' pointer. This confuses static source
> code
> analyzers like Coverity and sparse. Since none of the code in
> ufshcd_uic_cmd_compl() can do anything useful if 'cmd' is NULL, move
> the
> 'cmd' test near the start of this function.
> 
> Signed-off-by: Bart Van Assche <bvanassche@acm.org>
> ---
> 
> 

Reviewed-by: Peter Wang <peter.wang@mediatek.com>
Bao D. Nguyen Sept. 13, 2024, 7:31 a.m. UTC | #2
On 9/12/2024 3:30 PM, Bart Van Assche wrote:
> In ufshcd_uic_cmd_compl(), there is code that dereferences 'cmd' with
> and without checking the 'cmd' pointer. This confuses static source code
> analyzers like Coverity and sparse. Since none of the code in
> ufshcd_uic_cmd_compl() can do anything useful if 'cmd' is NULL, move the
> 'cmd' test near the start of this function.
> 
> Signed-off-by: Bart Van Assche <bvanassche@acm.org>


>   	if (ufshcd_is_auto_hibern8_error(hba, intr_status))
>   		hba->errors |= (UFSHCD_UIC_HIBERN8_MASK & intr_status);

Hi Bart, while you are at it, there are extra parenthesis here too.

Reviewed-by: Bao D. Nguyen <quic_nguyenb@quicinc.com>
Bart Van Assche Sept. 13, 2024, 5:55 p.m. UTC | #3
On 9/13/24 12:31 AM, Bao D. Nguyen wrote:
> On 9/12/2024 3:30 PM, Bart Van Assche wrote:
>>       if (ufshcd_is_auto_hibern8_error(hba, intr_status))
>>           hba->errors |= (UFSHCD_UIC_HIBERN8_MASK & intr_status);
> 
> Hi Bart, while you are at it, there are extra parenthesis here too.

Agreed, but since of the one-change-per-patch rule I'd like to keep that
change out of this patch.

Thanks,

Bart.
diff mbox series

Patch

diff --git a/drivers/ufs/core/ufshcd.c b/drivers/ufs/core/ufshcd.c
index 134cba0ff512..d047ccba8b84 100644
--- a/drivers/ufs/core/ufshcd.c
+++ b/drivers/ufs/core/ufshcd.c
@@ -5462,10 +5462,13 @@  static irqreturn_t ufshcd_uic_cmd_compl(struct ufs_hba *hba, u32 intr_status)
 
 	spin_lock(hba->host->host_lock);
 	cmd = hba->active_uic_cmd;
+	if (WARN_ON_ONCE(!cmd))
+		goto unlock;
+
 	if (ufshcd_is_auto_hibern8_error(hba, intr_status))
 		hba->errors |= (UFSHCD_UIC_HIBERN8_MASK & intr_status);
 
-	if (intr_status & UIC_COMMAND_COMPL && cmd) {
+	if (intr_status & UIC_COMMAND_COMPL) {
 		cmd->argument2 |= ufshcd_get_uic_cmd_result(hba);
 		cmd->argument3 = ufshcd_get_dme_attr_val(hba);
 		if (!hba->uic_async_done)
@@ -5482,7 +5485,10 @@  static irqreturn_t ufshcd_uic_cmd_compl(struct ufs_hba *hba, u32 intr_status)
 
 	if (retval == IRQ_HANDLED)
 		ufshcd_add_uic_command_trace(hba, cmd, UFS_CMD_COMP);
+
+unlock:
 	spin_unlock(hba->host->host_lock);
+
 	return retval;
 }