Re: Possible false positive from checkpatch.pl

From: Larry Finger
Date: Mon Jul 12 2010 - 14:36:10 EST


On 07/12/2010 01:28 PM, Joe Perches wrote:
On Mon, 2010-07-12 at 12:52 -0500, Larry Finger wrote:
Andy,

In preparing a vendor driver for submission to staging, I am getting the
following from checkpatch.pl:

ERROR: Macros with multiple statements should be enclosed in a do - while loop
#377: FILE: staging/rtl8712/rtl871x_mp_ioctl.h:377:
+#define GEN_MP_IOCTL_HANDLER(sz, hdl, oid) {sz, hdl, oid},

I think you should leave off the trailing comma from the macros
and C99 might be better. Maybe something like:

(whatever the field names really are)

#define GEN_MP_IOCTL_HANDLER(sz, hdl, oid) \
{.field1 = sz, .field2 = hdl, .field3 = oid}

ERROR: Macros with multiple statements should be enclosed in a do - while loop
#378: FILE: staging/rtl8712/rtl871x_mp_ioctl.h:378:
+#define EXT_MP_IOCTL_HANDLER(sz, subcode, oid) {sz,&mp_ioctl_ \
+ ## subcode ## _hdl, oid},

The line continuation is rather ugly too. Perhaps it's better as:

#define EXT_MP_IOCTL_HANDLER(sz, subcode, oid) \
{.field1 = sz, .field2 =&mp_ioctl_##subcode##_hdl, .field3 = oid}

They pass checkpatch without error.

$ cat foo.h
#define GEN_MP_IOCTL_HANDLER(sz, hdl, oid) \
{.field1 = sz, .field2 = hdl, .field3 = oid}
#define EXT_MP_IOCTL_HANDLER(sz, subcode, oid) \
{.field1 = sz, .field2 =&mp_ioctl_##subcode##_hdl, .field3 = oid}
$ ./scripts/checkpatch.pl -f foo.h
total: 0 errors, 0 warnings, 4 lines checked

foo.h has no obvious style problems and is ready for submission.

These are ugly macros that will be eliminated, but for the moment they are in the code. As I stated in my original email, removing the comma from the definition and adding it to the code does fix the checkpatch error, but it should not be necessary.

Larry
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/