checkpatch currently complains about macros like the following:
#define for_each_dma_cap_mask(cap, mask) \
for ((cap) = first_dma_cap(mask); \
(cap) < DMA_TX_TYPE_END; \
(cap) = next_dma_cap((cap), (mask)))
Signed-off-by: Dan Williams <[email protected]>
---
scripts/checkpatch.pl | 4 ++--
1 files changed, 2 insertions(+), 2 deletions(-)
diff --git a/scripts/checkpatch.pl b/scripts/checkpatch.pl
index e216d49..ee6bac9 100755
--- a/scripts/checkpatch.pl
+++ b/scripts/checkpatch.pl
@@ -548,10 +548,10 @@ sub process {
}
}
-#multiline macros should be enclosed in a do while loop
+#multiline macros should be enclosed in a do while loop, unless they are a for_each helper
if (($prevline=~/\#define.*\\/) and !($prevline=~/do\s+{/) and
!($prevline=~/\(\{/) and ($line=~/;\s*\\/) and
- !($line=~/do.*{/) and !($line=~/\(\{/)) {
+ !($line=~/do.*{/) and !($line=~/\(\{/) and !($prevline=~/.*for_each.*/)) {
print "Macros with multiple statements should be enclosed in a do - while loop\n";
print "$hereprev";
$clean = 0;
Dan Williams wrote:
> checkpatch currently complains about macros like the following:
>
> #define for_each_dma_cap_mask(cap, mask) \
> for ((cap) = first_dma_cap(mask); \
> (cap) < DMA_TX_TYPE_END; \
> (cap) = next_dma_cap((cap), (mask)))
>
>
> Signed-off-by: Dan Williams <[email protected]>
I'd like it if this patch updated Chapter 12 of Documentation/CodingStyle as well.
That section is where the rule to check came from and it would be nice for it to
mention the exception to the rule as well.
Joel Schopp wrote:
>
> Dan Williams wrote:
>> checkpatch currently complains about macros like the following:
>>
>> #define for_each_dma_cap_mask(cap, mask) \
>> for ((cap) = first_dma_cap(mask); \
>> (cap) < DMA_TX_TYPE_END; \
>> (cap) = next_dma_cap((cap), (mask)))
>>
>>
>> Signed-off-by: Dan Williams <[email protected]>
>
> I'd like it if this patch updated Chapter 12 of
> Documentation/CodingStyle as well. That section is where the rule to
> check came from and it would be nice for it to mention the exception to
> the rule as well.
>
>
>
The actual restriction is on statements not on lines it seems:
"Macros with multiple statements should be enclosed in a do - while block"
So if this is only a single statement it is safe without a "container".
I have a patch cooked up here which works out if there are more than
one statement which seems to do the trick.
Dan, thanks for the report.
-apw