diff mbox series

soundwire: qcom: use signed variable for error return

Message ID 20210331072111.2945945-1-vkoul@kernel.org
State Superseded
Headers show
Series soundwire: qcom: use signed variable for error return | expand

Commit Message

Vinod Koul March 31, 2021, 7:21 a.m. UTC
We get warning for using a unsigned variable being compared to less than
zero. The comparison is correct as it checks for errors from previous
call to qcom_swrm_get_alert_slave_dev_num(), so we should use a signed
variable instead.

drivers/soundwire/qcom.c: qcom_swrm_irq_handler() warn: impossible
condition '(devnum < 0) => (0-255 < 0)'

Reported-by: kernel test robot <lkp@intel.com>
Signed-off-by: Vinod Koul <vkoul@kernel.org>

---
 drivers/soundwire/qcom.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

-- 
2.26.3

Comments

Pierre-Louis Bossart March 31, 2021, 2:41 p.m. UTC | #1
On 3/31/21 2:21 AM, Vinod Koul wrote:
> We get warning for using a unsigned variable being compared to less than

> zero. The comparison is correct as it checks for errors from previous

> call to qcom_swrm_get_alert_slave_dev_num(), so we should use a signed

> variable instead.

> 

> drivers/soundwire/qcom.c: qcom_swrm_irq_handler() warn: impossible

> condition '(devnum < 0) => (0-255 < 0)'

> 

> Reported-by: kernel test robot <lkp@intel.com>

> Signed-off-by: Vinod Koul <vkoul@kernel.org>

> ---

>   drivers/soundwire/qcom.c | 2 +-

>   1 file changed, 1 insertion(+), 1 deletion(-)

> 

> diff --git a/drivers/soundwire/qcom.c b/drivers/soundwire/qcom.c

> index b08ecb9b418c..55ed133c6704 100644

> --- a/drivers/soundwire/qcom.c

> +++ b/drivers/soundwire/qcom.c

> @@ -428,7 +428,7 @@ static irqreturn_t qcom_swrm_irq_handler(int irq, void *dev_id)

>   	struct qcom_swrm_ctrl *swrm = dev_id;

>   	u32 value, intr_sts, intr_sts_masked, slave_status;

>   	u32 i;

> -	u8 devnum = 0;

> +	s8 devnum = 0;


it's not great to store negative error codes with s8. That works in this 
specific case because the function only returns -EINVAL.

We actually have zero occurrences of s8 in the drivers/soundwire/ code.

>   	int ret = IRQ_HANDLED;

>   

>   	swrm->reg_read(swrm, SWRM_INTERRUPT_STATUS, &intr_sts);

>
Vinod Koul March 31, 2021, 3:48 p.m. UTC | #2
On 31-03-21, 09:41, Pierre-Louis Bossart wrote:
> 

> 

> On 3/31/21 2:21 AM, Vinod Koul wrote:

> > We get warning for using a unsigned variable being compared to less than

> > zero. The comparison is correct as it checks for errors from previous

> > call to qcom_swrm_get_alert_slave_dev_num(), so we should use a signed

> > variable instead.

> > 

> > drivers/soundwire/qcom.c: qcom_swrm_irq_handler() warn: impossible

> > condition '(devnum < 0) => (0-255 < 0)'

> > 

> > Reported-by: kernel test robot <lkp@intel.com>

> > Signed-off-by: Vinod Koul <vkoul@kernel.org>

> > ---

> >   drivers/soundwire/qcom.c | 2 +-

> >   1 file changed, 1 insertion(+), 1 deletion(-)

> > 

> > diff --git a/drivers/soundwire/qcom.c b/drivers/soundwire/qcom.c

> > index b08ecb9b418c..55ed133c6704 100644

> > --- a/drivers/soundwire/qcom.c

> > +++ b/drivers/soundwire/qcom.c

> > @@ -428,7 +428,7 @@ static irqreturn_t qcom_swrm_irq_handler(int irq, void *dev_id)

> >   	struct qcom_swrm_ctrl *swrm = dev_id;

> >   	u32 value, intr_sts, intr_sts_masked, slave_status;

> >   	u32 i;

> > -	u8 devnum = 0;

> > +	s8 devnum = 0;

> 

> it's not great to store negative error codes with s8. That works in this

> specific case because the function only returns -EINVAL.


Yeah I did check EINVAL was the case which would work but in general I
agree that makes sense, I discussed with Srini on IRC and looks like I
havent posted v2, should hit the pipes shortly

-- 
~Vinod
Bjorn Andersson March 31, 2021, 4:24 p.m. UTC | #3
On Wed 31 Mar 02:21 CDT 2021, Vinod Koul wrote:

> We get warning for using a unsigned variable being compared to less than

> zero. The comparison is correct as it checks for errors from previous

> call to qcom_swrm_get_alert_slave_dev_num(), so we should use a signed

> variable instead.

> 

> drivers/soundwire/qcom.c: qcom_swrm_irq_handler() warn: impossible

> condition '(devnum < 0) => (0-255 < 0)'

> 

> Reported-by: kernel test robot <lkp@intel.com>

> Signed-off-by: Vinod Koul <vkoul@kernel.org>

> ---

>  drivers/soundwire/qcom.c | 2 +-

>  1 file changed, 1 insertion(+), 1 deletion(-)

> 

> diff --git a/drivers/soundwire/qcom.c b/drivers/soundwire/qcom.c

> index b08ecb9b418c..55ed133c6704 100644

> --- a/drivers/soundwire/qcom.c

> +++ b/drivers/soundwire/qcom.c

> @@ -428,7 +428,7 @@ static irqreturn_t qcom_swrm_irq_handler(int irq, void *dev_id)

>  	struct qcom_swrm_ctrl *swrm = dev_id;

>  	u32 value, intr_sts, intr_sts_masked, slave_status;

>  	u32 i;

> -	u8 devnum = 0;

> +	s8 devnum = 0;


At least in today's linux-next qcom_swrm_get_alert_slave_dev_num()
returns an int and the code only checks to see if this is negative.  So
it seems like making this a full int ensures there's no truncation etc.

And at least as written today there's no need to initialize the
variable.

Regards,
Bjorn

>  	int ret = IRQ_HANDLED;

>  

>  	swrm->reg_read(swrm, SWRM_INTERRUPT_STATUS, &intr_sts);

> -- 

> 2.26.3

>
diff mbox series

Patch

diff --git a/drivers/soundwire/qcom.c b/drivers/soundwire/qcom.c
index b08ecb9b418c..55ed133c6704 100644
--- a/drivers/soundwire/qcom.c
+++ b/drivers/soundwire/qcom.c
@@ -428,7 +428,7 @@  static irqreturn_t qcom_swrm_irq_handler(int irq, void *dev_id)
 	struct qcom_swrm_ctrl *swrm = dev_id;
 	u32 value, intr_sts, intr_sts_masked, slave_status;
 	u32 i;
-	u8 devnum = 0;
+	s8 devnum = 0;
 	int ret = IRQ_HANDLED;
 
 	swrm->reg_read(swrm, SWRM_INTERRUPT_STATUS, &intr_sts);