Re: [PATCH] adsp: Fix test on unsigned in find_adsp_module_by_id()

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



A negative id will not be noticed unless the comparison is signed.

Signed-off-by: Roel Kluin <roel.kluin@xxxxxxxxx>
---
>> diff --git a/drivers/staging/dream/qdsp5/adsp.c b/drivers/staging/dream/qdsp5/adsp.c
>> index d096456..6948bdc 100644
>> --- a/drivers/staging/dream/qdsp5/adsp.c
>> +++ b/drivers/staging/dream/qdsp5/adsp.c
>> @@ -171,7 +171,7 @@ static struct msm_adsp_module *find_adsp_module_by_id(
>>        } else {
>>  #if CONFIG_MSM_AMSS_VERSION >= 6350
>>                id = get_module_index(id);
>> -               if (id < 0)
>> +               if ((int)id < 0)
> 
> Are you sure this is right? Simply casting an unsigned number to
> signed won't miraculously give it a negative value...

> 
An uint32_t is usually an unsigned int, so it should work, but
maybe plainly casting it to signed is better. Tested with snippet
below.

#include <stdio.h>
#include <stdlib.h>

int foo()
{
        return -1;
}

int main()
{

        unsigned int i = foo();

        if (i < 0)
                printf("1:%d\n", i);
        if ((int)i < 0)
                printf("2:%d\n", i);
        if ((signed)i < 0)
                printf("3:%d\n", i);
        return 0;
}

If you want the signed cast, you can use this:

diff --git a/drivers/staging/dream/qdsp5/adsp.c b/drivers/staging/dream/qdsp5/adsp.c
index d096456..4633e4e 100644
--- a/drivers/staging/dream/qdsp5/adsp.c
+++ b/drivers/staging/dream/qdsp5/adsp.c
@@ -171,7 +171,7 @@ static struct msm_adsp_module *find_adsp_module_by_id(
 	} else {
 #if CONFIG_MSM_AMSS_VERSION >= 6350
 		id = get_module_index(id);
-		if (id < 0)
+		if ((signed)id < 0)
 			return NULL;
 #endif
 		return info->id_to_module[id];
_______________________________________________
devel mailing list
devel@xxxxxxxxxxxxxxxxxxxxxx
http://driverdev.linuxdriverproject.org/mailman/listinfo/devel

[Index of Archives]     [Linux Driver Backports]     [DMA Engine]     [Linux GPIO]     [Linux SPI]     [Video for Linux]     [Linux USB Devel]     [Linux Coverity]     [Linux Audio Users]     [Linux Kernel]     [Linux SCSI]     [Yosemite Backpacking]
  Powered by Linux