diff mbox

[1/4] DSPBRIDGE: Fix macros that break when inside an if/else

Message ID 1246978928-7139-1-git-send-email-ameya.palande@nokia.com (mailing list archive)
State Not Applicable, archived
Headers show

Commit Message

Ameya Palande July 7, 2009, 3:02 p.m. UTC
From: Phil Carmody <ext-phil.2.carmody@nokia.com>

cp_{to,fm}_usr break if between an if and an else (with no {}).

http://www.faqs.org/faqs/C-faq/abridged/
10.4: What's the best way to write a multi-statement macro?
A:    #define Func() do {stmt1; stmt2; ... } while(0) /* (no trailing ;) */

Signed-off-by: Phil Carmody <ext-phil.2.carmody@nokia.com>
---
 drivers/dsp/bridge/pmgr/wcd.c |   42 ++++++++++++++++++++++------------------
 1 files changed, 23 insertions(+), 19 deletions(-)

Comments

Guzman Lugo, Fernando July 9, 2009, 11:51 p.m. UTC | #1
Thanks for the patch, it only has indentation problems, this is the checkpatch output:

WARNING: suspect code indent for conditional statements (8, 12)
#34: FILE: drivers/dsp/bridge/pmgr/wcd.c:152:
+       if (DSP_SUCCEEDED(status)) {                    \
+           if (unlikely((src) == NULL) ||              \

WARNING: line over 80 characters
#36: FILE: drivers/dsp/bridge/pmgr/wcd.c:154:
+               unlikely(copy_from_user(dest, src, (elements) * sizeof(*(dest))))) { \

WARNING: suspect code indent for conditional statements (8, 12)
#46: FILE: drivers/dsp/bridge/pmgr/wcd.c:164:
+       if (DSP_SUCCEEDED(status)) {                    \
+           if (unlikely((dest) == NULL) ||                             \

WARNING: line over 80 characters
#48: FILE: drivers/dsp/bridge/pmgr/wcd.c:166:
+               unlikely(copy_to_user(dest, src, (elements) * sizeof(*(src))))) { \

total: 0 errors, 4 warnings, 48 lines checked

Could you please fix that warning please?

Regards,
Fernando.


> -----Original Message-----
> From: Ameya Palande [mailto:ameya.palande@nokia.com]
> Sent: Tuesday, July 07, 2009 10:02 AM
> To: linux-omap@vger.kernel.org
> Cc: Guzman Lugo, Fernando; Kanigeri, Hari; ext-phil.2.carmody@nokia.com
> Subject: [PATCH 1/4] DSPBRIDGE: Fix macros that break when inside an
> if/else
> 
> From: Phil Carmody <ext-phil.2.carmody@nokia.com>
> 
> cp_{to,fm}_usr break if between an if and an else (with no {}).
> 
> http://www.faqs.org/faqs/C-faq/abridged/
> 10.4: What's the best way to write a multi-statement macro?
> A:    #define Func() do {stmt1; stmt2; ... } while(0) /* (no trailing ;)
> */
> 
> Signed-off-by: Phil Carmody <ext-phil.2.carmody@nokia.com>
> ---
>  drivers/dsp/bridge/pmgr/wcd.c |   42 ++++++++++++++++++++++--------------
> ----
>  1 files changed, 23 insertions(+), 19 deletions(-)
> 
> diff --git a/drivers/dsp/bridge/pmgr/wcd.c b/drivers/dsp/bridge/pmgr/wcd.c
> index 86812c6..aaf3019 100644
> --- a/drivers/dsp/bridge/pmgr/wcd.c
> +++ b/drivers/dsp/bridge/pmgr/wcd.c
> @@ -147,25 +147,29 @@
> 
>  /* Following two macros should ideally have do{}while(0) */
> 
> -#define cp_fm_usr(dest, src, status, elements)    \
> -    if (DSP_SUCCEEDED(status)) {\
> -	    if (unlikely(src == NULL) ||				\
> -		unlikely(copy_from_user(dest, src, elements *
> sizeof(*(dest))))) { \
> -		GT_1trace(WCD_debugMask, GT_7CLASS, \
> -		"copy_from_user failed, src=0x%x\n", src);  \
> -		status = DSP_EPOINTER ; \
> -	} \
> -    }
> -
> -#define cp_to_usr(dest, src, status, elements)    \
> -    if (DSP_SUCCEEDED(status)) {\
> -	    if (unlikely(dest == NULL) ||				\
> -		unlikely(copy_to_user(dest, src, elements * sizeof(*(src)))))
> { \
> -		GT_1trace(WCD_debugMask, GT_7CLASS, \
> -		"copy_to_user failed, dest=0x%x\n", dest); \
> -		status = DSP_EPOINTER ;\
> -	} \
> -    }
> +#define cp_fm_usr(dest, src, status, elements)	\
> +    do {						\
> +	if (DSP_SUCCEEDED(status)) {			\
> +	    if (unlikely((src) == NULL) ||		\
> +		unlikely(copy_from_user(dest, src, (elements) *
> sizeof(*(dest))))) { \
> +		GT_1trace(WCD_debugMask, GT_7CLASS,	\
> +			  "copy_from_user failed, src=0x%x\n", src);	\
> +		(status) = DSP_EPOINTER ;				\
> +	    }						\
> +	}						\
> +    } while (0)
> +
> +#define cp_to_usr(dest, src, status, elements) \
> +    do {						\
> +	if (DSP_SUCCEEDED(status)) {			\
> +	    if (unlikely((dest) == NULL) ||				\
> +		unlikely(copy_to_user(dest, src, (elements) *
> sizeof(*(src))))) { \
> +		GT_1trace(WCD_debugMask, GT_7CLASS,	\
> +			  "copy_to_user failed, dest=0x%x\n", dest);	\
> +		(status) = DSP_EPOINTER ;		\
> +	    }						\
> +	}						\
> +    } while (0)
> 
>  /* Device IOCtl function pointer */
>  struct WCD_Cmd {
> --
> 1.6.2.4
> 

--
To unsubscribe from this list: send the line "unsubscribe linux-omap" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Phil Carmody July 14, 2009, 11:02 a.m. UTC | #2
On Fri, 2009-07-10 at 01:51 +0200, ext Guzman Lugo, Fernando wrote:
> Thanks for the patch, it only has indentation problems, this is the checkpatch output:
> 
> WARNING: suspect code indent for conditional statements (8, 12)
> #34: FILE: drivers/dsp/bridge/pmgr/wcd.c:152:
> +       if (DSP_SUCCEEDED(status)) {                    \
> +           if (unlikely((src) == NULL) ||              \
> 
> WARNING: line over 80 characters
> #36: FILE: drivers/dsp/bridge/pmgr/wcd.c:154:
> +               unlikely(copy_from_user(dest, src, (elements) * sizeof(*(dest))))) { \
> 
> WARNING: suspect code indent for conditional statements (8, 12)
> #46: FILE: drivers/dsp/bridge/pmgr/wcd.c:164:
> +       if (DSP_SUCCEEDED(status)) {                    \
> +           if (unlikely((dest) == NULL) ||                             \
> 
> WARNING: line over 80 characters
> #48: FILE: drivers/dsp/bridge/pmgr/wcd.c:166:
> +               unlikely(copy_to_user(dest, src, (elements) * sizeof(*(src))))) { \
> 
> total: 0 errors, 4 warnings, 48 lines checked
> 
> Could you please fix that warning please?

I suspect the only way to fix those warnings would either introduce
other warnings, or \
							would \
							lead \
							to \
							utterly \
							unread- \
							able \
							code.

If you check how and why the original TI-originated version of the code
does not follow the linux coding standards, the difficulties we would
have making a warning-free patch of it should be apparent.

Phil

--
To unsubscribe from this list: send the line "unsubscribe linux-omap" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Nishanth Menon July 14, 2009, 11:05 a.m. UTC | #3
Phil,
> -----Original Message-----
> From: linux-omap-owner@vger.kernel.org [mailto:linux-omap-
> owner@vger.kernel.org] On Behalf Of Phil Carmody
> Sent: Tuesday, July 14, 2009 6:03 AM
> 
> On Fri, 2009-07-10 at 01:51 +0200, ext Guzman Lugo, Fernando wrote:
> > Thanks for the patch, it only has indentation problems, this is the
> checkpatch output:
> >
> > WARNING: suspect code indent for conditional statements (8, 12)
> > #34: FILE: drivers/dsp/bridge/pmgr/wcd.c:152:
> > +       if (DSP_SUCCEEDED(status)) {                    \
> > +           if (unlikely((src) == NULL) ||              \
> >
> > WARNING: line over 80 characters
> > #36: FILE: drivers/dsp/bridge/pmgr/wcd.c:154:
> > +               unlikely(copy_from_user(dest, src, (elements) *
> sizeof(*(dest))))) { \
> >
> > WARNING: suspect code indent for conditional statements (8, 12)
> > #46: FILE: drivers/dsp/bridge/pmgr/wcd.c:164:
> > +       if (DSP_SUCCEEDED(status)) {                    \
> > +           if (unlikely((dest) == NULL) ||
> \
> >
> > WARNING: line over 80 characters
> > #48: FILE: drivers/dsp/bridge/pmgr/wcd.c:166:
> > +               unlikely(copy_to_user(dest, src, (elements) *
> sizeof(*(src))))) { \
> >
> > total: 0 errors, 4 warnings, 48 lines checked
> >
> > Could you please fix that warning please?
> 
> I suspect the only way to fix those warnings would either introduce
> other warnings, or \
Gentle query: Have we already tried this or is it just a suspicion?


> 							would \
> 							lead \
> 							to \
> 							utterly \
> 							unread- \
> 							able \
> 							code.
> 
> If you check how and why the original TI-originated version of the code
> does not follow the linux coding standards, the difficulties we would
> have making a warning-free patch of it should be apparent.

Past is past. The idea was not to introduce anymore warning code.

Regards,
Nishanth Menon

--
To unsubscribe from this list: send the line "unsubscribe linux-omap" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Ameya Palande July 14, 2009, 11:17 a.m. UTC | #4
ext Menon, Nishanth wrote:
> Phil,
>> -----Original Message-----
>> From: linux-omap-owner@vger.kernel.org [mailto:linux-omap-
>> owner@vger.kernel.org] On Behalf Of Phil Carmody
>> Sent: Tuesday, July 14, 2009 6:03 AM
>>
>> On Fri, 2009-07-10 at 01:51 +0200, ext Guzman Lugo, Fernando wrote:
>>> Thanks for the patch, it only has indentation problems, this is the
>> checkpatch output:
>>> WARNING: suspect code indent for conditional statements (8, 12)
>>> #34: FILE: drivers/dsp/bridge/pmgr/wcd.c:152:
>>> +       if (DSP_SUCCEEDED(status)) {                    \
>>> +           if (unlikely((src) == NULL) ||              \
>>>
>>> WARNING: line over 80 characters
>>> #36: FILE: drivers/dsp/bridge/pmgr/wcd.c:154:
>>> +               unlikely(copy_from_user(dest, src, (elements) *
>> sizeof(*(dest))))) { \
>>> WARNING: suspect code indent for conditional statements (8, 12)
>>> #46: FILE: drivers/dsp/bridge/pmgr/wcd.c:164:
>>> +       if (DSP_SUCCEEDED(status)) {                    \
>>> +           if (unlikely((dest) == NULL) ||
>> \
>>> WARNING: line over 80 characters
>>> #48: FILE: drivers/dsp/bridge/pmgr/wcd.c:166:
>>> +               unlikely(copy_to_user(dest, src, (elements) *
>> sizeof(*(src))))) { \
>>> total: 0 errors, 4 warnings, 48 lines checked
>>>
>>> Could you please fix that warning please?
>> I suspect the only way to fix those warnings would either introduce
>> other warnings, or \
> Gentle query: Have we already tried this or is it just a suspicion?
> 
> 
>> 							would \
>> 							lead \
>> 							to \
>> 							utterly \
>> 							unread- \
>> 							able \
>> 							code.
>>
>> If you check how and why the original TI-originated version of the code
>> does not follow the linux coding standards, the difficulties we would
>> have making a warning-free patch of it should be apparent.
> 
> Past is past. The idea was not to introduce anymore warning code.

I agree but if you want to stick to this, then I don't think we can get a
readable macro. And I personally prefer readability over warnings generated by
checkpatch.pl script.

Cheers,
Ameya.
--
To unsubscribe from this list: send the line "unsubscribe linux-omap" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Phil Carmody July 14, 2009, 11:20 a.m. UTC | #5
On Tue, 2009-07-14 at 13:05 +0200, ext Menon, Nishanth wrote:
> Phil,
> > -----Original Message-----
> > From: linux-omap-owner@vger.kernel.org [mailto:linux-omap-
> > owner@vger.kernel.org] On Behalf Of Phil Carmody
> > Sent: Tuesday, July 14, 2009 6:03 AM
> > 
> > On Fri, 2009-07-10 at 01:51 +0200, ext Guzman Lugo, Fernando wrote:
> > > Thanks for the patch, it only has indentation problems, this is the
> > checkpatch output:
> > >
> > > WARNING: suspect code indent for conditional statements (8, 12)
> > > #34: FILE: drivers/dsp/bridge/pmgr/wcd.c:152:
> > > +       if (DSP_SUCCEEDED(status)) {                    \
> > > +           if (unlikely((src) == NULL) ||              \
> > >
> > > WARNING: line over 80 characters
> > > #36: FILE: drivers/dsp/bridge/pmgr/wcd.c:154:
> > > +               unlikely(copy_from_user(dest, src, (elements) *
> > sizeof(*(dest))))) { \
> > >
> > > WARNING: suspect code indent for conditional statements (8, 12)
> > > #46: FILE: drivers/dsp/bridge/pmgr/wcd.c:164:
> > > +       if (DSP_SUCCEEDED(status)) {                    \
> > > +           if (unlikely((dest) == NULL) ||
> > \
> > >
> > > WARNING: line over 80 characters
> > > #48: FILE: drivers/dsp/bridge/pmgr/wcd.c:166:
> > > +               unlikely(copy_to_user(dest, src, (elements) *
> > sizeof(*(src))))) { \
> > >
> > > total: 0 errors, 4 warnings, 48 lines checked
> > >
> > > Could you please fix that warning please?
> > 
> > I suspect the only way to fix those warnings would either introduce
> > other warnings, or \
> Gentle query: Have we already tried this or is it just a suspicion?

Being an Englishman, I use various forms of irony more than others do;
that particular form's called "litotes". It indeed is not a suspicion -
I tried about 4 or 5 variations, none of which were both readable and
warning-free. In the end I decided that whatever was closest to the
original would be safest.

> > 							would \
> > 							lead \
> > 							to \
> > 							utterly \
> > 							unread- \
> > 							able \
> > 							code.
> > 
> > If you check how and why the original TI-originated version of the code
> > does not follow the linux coding standards, the difficulties we would
> > have making a warning-free patch of it should be apparent.
> 
> Past is past. The idea was not to introduce anymore warning code.

The TI code would trigger the following 4 warnings:
WARNING: suspect code indent for conditional statements (4, 12)
WARNING: line over 80 characters
WARNING: suspect code indent for conditional statements (4, 12)
WARNING: line over 80 characters
4 warnings isn't more than 4 warnings, it's no change - and as I mention
above, in the absence of an easy fix, that was deliberate.

Phil

--
To unsubscribe from this list: send the line "unsubscribe linux-omap" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
diff mbox

Patch

diff --git a/drivers/dsp/bridge/pmgr/wcd.c b/drivers/dsp/bridge/pmgr/wcd.c
index 86812c6..aaf3019 100644
--- a/drivers/dsp/bridge/pmgr/wcd.c
+++ b/drivers/dsp/bridge/pmgr/wcd.c
@@ -147,25 +147,29 @@ 
 
 /* Following two macros should ideally have do{}while(0) */
 
-#define cp_fm_usr(dest, src, status, elements)    \
-    if (DSP_SUCCEEDED(status)) {\
-	    if (unlikely(src == NULL) ||				\
-		unlikely(copy_from_user(dest, src, elements * sizeof(*(dest))))) { \
-		GT_1trace(WCD_debugMask, GT_7CLASS, \
-		"copy_from_user failed, src=0x%x\n", src);  \
-		status = DSP_EPOINTER ; \
-	} \
-    }
-
-#define cp_to_usr(dest, src, status, elements)    \
-    if (DSP_SUCCEEDED(status)) {\
-	    if (unlikely(dest == NULL) ||				\
-		unlikely(copy_to_user(dest, src, elements * sizeof(*(src))))) { \
-		GT_1trace(WCD_debugMask, GT_7CLASS, \
-		"copy_to_user failed, dest=0x%x\n", dest); \
-		status = DSP_EPOINTER ;\
-	} \
-    }
+#define cp_fm_usr(dest, src, status, elements)	\
+    do {						\
+	if (DSP_SUCCEEDED(status)) {			\
+	    if (unlikely((src) == NULL) ||		\
+		unlikely(copy_from_user(dest, src, (elements) * sizeof(*(dest))))) { \
+		GT_1trace(WCD_debugMask, GT_7CLASS,	\
+			  "copy_from_user failed, src=0x%x\n", src);	\
+		(status) = DSP_EPOINTER ;				\
+	    }						\
+	}						\
+    } while (0)
+
+#define cp_to_usr(dest, src, status, elements) \
+    do {						\
+	if (DSP_SUCCEEDED(status)) {			\
+	    if (unlikely((dest) == NULL) ||				\
+		unlikely(copy_to_user(dest, src, (elements) * sizeof(*(src))))) { \
+		GT_1trace(WCD_debugMask, GT_7CLASS,	\
+			  "copy_to_user failed, dest=0x%x\n", dest);	\
+		(status) = DSP_EPOINTER ;		\
+	    }						\
+	}						\
+    } while (0)
 
 /* Device IOCtl function pointer */
 struct WCD_Cmd {