[patch] staging: comedi: dt9812: Resolves sparse endian warnings.

H Hartley Sweeten hartleys at visionengravers.com
Fri Jul 26 18:19:39 UTC 2013


On Friday, July 26, 2013 10:59 AM, Shaun Laing wrote:

Please make sure to copy the mailing list... ;-)

> I'm sorry Hartley,
>
> I'm really new at this so there's probably something I'm doing wrong.
> Do you have time to help me figure this out?  Here's how I'm building
> this module:
>
> shaun at rivendell:~/src/linux/staging$ make O=../staging-build C=1
> CF=-D__CHECK_ENDIAN__ drivers/staging/comedi/drivers/dt9812.o

Ah.. That's the difference.

I usually don't pass the CF=-D__CHECK_ENDIAN__ option.

With that option it appears there are a number of comedi drivers that
have some endian issues.

Your patch does fix these four in the dt9812 driver:

drivers/staging/comedi/drivers/dt9812.c:739:18: warning: cast to restricted __le16
drivers/staging/comedi/drivers/dt9812.c:746:19: warning: cast to restricted __le16
drivers/staging/comedi/drivers/dt9812.c:753:27: warning: cast to restricted __le16
drivers/staging/comedi/drivers/dt9812.c:760:18: warning: cast to restricted __le32

So, FWIW:

Reviewed-by: H Hartley Sweeten <hsweeten at visionengravers.com>


These endian warnings still exist in the driver:

drivers/staging/comedi/drivers/dt9812.c:260:17: warning: incorrect type in assignment (different base types)
drivers/staging/comedi/drivers/dt9812.c:260:17:    expected unsigned int [unsigned] [usertype] cmd
drivers/staging/comedi/drivers/dt9812.c:260:17:    got restricted __le32 [usertype] <noident>
drivers/staging/comedi/drivers/dt9812.c:261:39: warning: incorrect type in assignment (different base types)
drivers/staging/comedi/drivers/dt9812.c:261:39:    expected unsigned short [unsigned] [usertype] address
drivers/staging/comedi/drivers/dt9812.c:261:39:    got restricted __le16 [usertype] <noident>
drivers/staging/comedi/drivers/dt9812.c:263:40: warning: incorrect type in assignment (different base types)
drivers/staging/comedi/drivers/dt9812.c:263:40:    expected unsigned short [unsigned] [usertype] numbytes
drivers/staging/comedi/drivers/dt9812.c:263:40:    got restricted __le16 [usertype] <noident>
drivers/staging/comedi/drivers/dt9812.c:284:17: warning: incorrect type in assignment (different base types)
drivers/staging/comedi/drivers/dt9812.c:284:17:    expected unsigned int [unsigned] [usertype] cmd
drivers/staging/comedi/drivers/dt9812.c:284:17:    got restricted __le32 [usertype] <noident>
drivers/staging/comedi/drivers/dt9812.c:308:17: warning: incorrect type in assignment (different base types)
drivers/staging/comedi/drivers/dt9812.c:308:17:    expected unsigned int [unsigned] [usertype] cmd
drivers/staging/comedi/drivers/dt9812.c:308:17:    got restricted __le32 [usertype] <noident>
drivers/staging/comedi/drivers/dt9812.c:329:17: warning: incorrect type in assignment (different base types)
drivers/staging/comedi/drivers/dt9812.c:329:17:    expected unsigned int [unsigned] [usertype] cmd
drivers/staging/comedi/drivers/dt9812.c:329:17:    got restricted __le32 [usertype] <noident>

It appears they can be "fixed" by changing the types in the struct dt9812_flash_data
and struct dt9812_usb_cmd. But I'm not positive if this is the "correct" fix. Hopefully
someone with a bit more endian knowledge will comment. If they do, and this is the
right fix, feel free to add this chunk to your patch.

Regards,
Hartley



@@ -188,8 +188,8 @@ enum {
 };
 
 struct dt9812_flash_data {
-       u16 numbytes;
-       u16 address;
+       __le16 numbytes;
+       __le16 address;
 };
 
 #define DT9812_MAX_NUM_MULTI_BYTE_RDS  \
@@ -230,7 +230,7 @@ struct dt9812_rmw_multi {
 };
 
 struct dt9812_usb_cmd {
-       u32 cmd;
+       __le32 cmd;
        union {
                struct dt9812_flash_data flash_data_info;
                struct dt9812_read_multi read_multi_info;





More information about the devel mailing list