From: Vladimir Zapolskiy <vz@mleia.com>
To: Joe Perches <joe@perches.com>
Cc: Andy Whitcroft <apw@canonical.com>,
Andrew Morton <akpm@linux-foundation.org>,
linux-kernel@vger.kernel.org,
Dan Carpenter <dan.carpenter@oracle.com>
Subject: Re: [PATCH] checkpatch: fix a number of COMPLEX_MACRO false positives
Date: Tue, 10 Nov 2015 20:01:44 +0200 [thread overview]
Message-ID: <56423108.7070903@mleia.com> (raw)
In-Reply-To: <5632B125.4080009@mleia.com>
Hello Joe,
I'm adding Dan to Cc.
On 30.10.2015 01:52, Vladimir Zapolskiy wrote:
> On 30.10.2015 00:46, Joe Perches wrote:
>> On Thu, 2015-10-29 at 23:36 +0200, Vladimir Zapolskiy wrote:
>>> A simple search over the kernel souce displays a number of correctly
>>> defined multiline macro, which generally are used as an array element
>>> initializer:
>>>
>>> % find ../linux -type f | xargs grep -B1 -H '^[:space]*\[.*\\$'
>>>
>>> However checkpatch.pl unexpectedly complains about all these macro
>>> definitions:
>>>
>>> % ./scripts/checkpatch.pl --types COMPLEX_MACRO -f include/linux/perf/arm_pmu.h
>>>
>>> ERROR: Macros with complex values should be enclosed in parentheses
>>> +#define PERF_MAP_ALL_UNSUPPORTED \
>>> + [0 ... PERF_COUNT_HW_MAX - 1] = HW_OP_UNSUPPORTED
>>>
>>> The change intends to fix this type of false positives by flattening
>>> only array members and skipping array element designators.
>>>
>>> Signed-off-by: Vladimir Zapolskiy <vz@mleia.com>
>>> ---
>>> scripts/checkpatch.pl | 5 +++--
>>> 1 file changed, 3 insertions(+), 2 deletions(-)
>>>
>>> diff --git a/scripts/checkpatch.pl b/scripts/checkpatch.pl
>>> index f2a1131..3882893 100755
>>> --- a/scripts/checkpatch.pl
>>> +++ b/scripts/checkpatch.pl
>>> @@ -4526,7 +4526,7 @@ sub process {
>>> # Flatten any parentheses and braces
>>> while ($dstat =~ s/\([^\(\)]*\)/1/ ||
>>> $dstat =~ s/\{[^\{\}]*\}/1/ ||
>>> - $dstat =~ s/\[[^\[\]]*\]/1/)
>>> + $dstat =~ s/.\[[^\[\]]*\]/1/)
>>
>> Perhaps the . before the [ might be a bit broad.
>
> At this point preceding spaces and parentheses are removed, probably any
> alphanumeric symbol should fit here.
>
> OTOH I believe in correct C code here before \[ symbol you may find only
> an alphanumeric symbol or ^, so I don't expect any false negatives, if .
> is used above.
>
I tested this version (COMPLEX_MACRO only) with . symbol over all .c and
.h files in the kernel (commit ce5c2d2c256a4) and the change fixes 230
false positives, see the list below in format $file:$lineno.
No new false negatives are introduced, so according to my test . is okay
here to have.
Please also note that the problem is quite old and it emerged earlier,
e.g. see http://permalink.gmane.org/gmane.linux.ports.arm.kernel/451646 etc.
>> I'm not sure there's a great way to handle this.
>>
>> Andy?
>>> {
>>> }
>>>
>>> @@ -4546,7 +4546,8 @@ sub process {
>>> union|
>>> struct|
>>> \.$Ident\s*=\s*|
>>> - ^\"|\"$
>>> + ^\"|\"$|
>>> + ^\[
>>> }x;
>>> #print "REST<$rest> dstat<$dstat> ctx<$ctx>\n";
>>> if ($dstat ne '' &&
arch/arc/kernel/sys.c:11
arch/arm64/kernel/smp.c:624
arch/arm64/kernel/sys32.c:43
arch/arm64/kernel/sys.c:46
arch/arm/kernel/smp.c:473
arch/arm/mach-davinci/mux.h:18
arch/arm/mach-davinci/mux.h:29
arch/arm/mach-davinci/mux.h:40
arch/arm/mach-imx/devices/platform-flexcan.c:19
arch/arm/mach-imx/devices/platform-imx2-wdt.c:20
arch/arm/mach-imx/devices/platform-imx-i2c.c:21
arch/arm/mach-imx/devices/platform-imx-ssi.c:12
arch/arm/mach-imx/devices/platform-imx-uart.c:12
arch/arm/mach-imx/devices/platform-imx-uart.c:22
arch/arm/mach-imx/devices/platform-mxc-mmc.c:23
arch/arm/mach-imx/devices/platform-sdhci-esdhc-imx.c:22
arch/arm/mach-imx/devices/platform-spi_imx.c:21
arch/avr32/mach-at32ap/at32ap700x.c:1732
arch/blackfin/mach-bf527/boards/ezkit.c:513
arch/blackfin/mach-bf533/boards/stamp.c:594
arch/blackfin/mach-bf533/boards/stamp.c:612
arch/blackfin/mach-bf537/boards/stamp.c:2546
arch/blackfin/mach-bf537/boards/stamp.c:2564
arch/blackfin/mach-bf548/boards/ezkit.c:1834
arch/blackfin/mach-bf548/boards/ezkit.c:1860
arch/c6x/kernel/sys_c6x.c:51
arch/h8300/kernel/syscalls.c:6
arch/hexagon/kernel/syscalltab.c:28
arch/ia64/kernel/module.c:111
arch/metag/kernel/sys_metag.c:160
arch/mips/bcm63xx/reset.c:19
arch/mips/include/asm/mach-bcm63xx/bcm63xx_cpu.h:1016
arch/mips/include/asm/mach-bcm63xx/bcm63xx_cpu.h:551
arch/nios2/kernel/syscall_table.c:25
arch/openrisc/kernel/sys_call_table.c:24
arch/score/kernel/sys_call_table.c:8
arch/tile/kernel/compat.c:90
arch/tile/kernel/sys.c:103
arch/unicore32/kernel/sys.c:33
arch/x86/entry/syscall_32.c:19
arch/x86/entry/syscall_64.c:21
arch/x86/include/asm/intel-mid.h:73
arch/x86/include/asm/paravirt_types.h:374
arch/x86/include/asm/paravirt_types.h:377
arch/x86/include/asm/stackprotector.h:51
arch/x86/include/asm/xen/hypercall.h:88
arch/x86/kernel/asm-offsets_32.c:10
arch/x86/kernel/asm-offsets_64.c:10
arch/x86/kernel/asm-offsets_64.c:17
arch/x86/kernel/asm-offsets_64.c:7
arch/x86/kernel/asm-offsets_64.c:8
arch/x86/kernel/cpu/perf_event_intel_pt.c:56
arch/x86/kernel/cpu/perf_event_p4.c:1127
arch/x86/kernel/cpu/perf_event_p4.c:36
arch/x86/kernel/perf_regs.c:16
arch/x86/kvm/vmx.c:618
arch/x86/kvm/vmx.c:619
arch/x86/kvm/vmx.c:924
arch/x86/tools/relocs.c:140
arch/x86/tools/relocs.c:160
arch/x86/tools/relocs.c:176
arch/x86/tools/relocs.c:193
arch/x86/um/sys_call_table_32.c:32
arch/x86/um/sys_call_table_64.c:45
arch/x86/um/user-offsets.c:12
arch/x86/um/user-offsets.c:17
arch/x86/um/user-offsets.c:18
arch/x86/xen/trace.c:5
arch/xtensa/kernel/syscall.c:35
Documentation/networking/timestamping/hwtstamp_config.c:46
Documentation/networking/timestamping/hwtstamp_config.c:55
drivers/gpu/drm/amd/amdkfd/kfd_chardev.c:871
drivers/gpu/drm/drm_ioctl.c:513
drivers/gpu/drm/drm_modes.c:1020
drivers/gpu/drm/msm/adreno/adreno_gpu.h:30
drivers/gpu/drm/msm/mdp/mdp5/mdp5_kms.h:122
drivers/gpu/drm/radeon/r600_cs.c:86
drivers/gpu/drm/radeon/r600_cs.c:87
drivers/gpu/drm/radeon/r600_cs.c:88
drivers/gpu/drm/radeon/r600_cs.c:89
drivers/gpu/drm/radeon/r600_cs.c:90
drivers/gpu/drm/radeon/r600_cs.c:91
drivers/gpu/drm/radeon/r600_cs.c:92
drivers/gpu/drm/radeon/r600_cs.c:93
drivers/gpu/drm/vmwgfx/vmwgfx_drv.c:140
drivers/gpu/drm/vmwgfx/vmwgfx_execbuf.c:97
drivers/hwmon/pmbus/pmbus.h:393
drivers/hwtracing/intel_th/gth.c:245
drivers/iio/adc/qcom-spmi-vadc.c:607
drivers/input/misc/ims-pcu.c:173
drivers/media/dvb-core/dvb_frontend.c:1079
drivers/media/pci/ivtv/ivtv-mailbox.c:50
drivers/media/v4l2-core/v4l2-ioctl.c:2403
drivers/media/v4l2-core/v4l2-ioctl.c:2412
drivers/mfd/asic3.c:55
drivers/mfd/axp20x.c:248
drivers/mfd/db8500-prcmu.c:279
drivers/mfd/db8500-prcmu.c:333
drivers/mfd/db8500-prcmu.c:467
drivers/mfd/max8997-irq.c:68
drivers/net/ethernet/renesas/sh_eth.c:55
drivers/net/ethernet/sfc/ef10.c:1093
drivers/net/ethernet/sfc/ef10.c:1096
drivers/net/ethernet/sfc/ef10.c:1099
drivers/net/ethernet/sfc/ef10.c:1101
drivers/net/ethernet/sfc/falcon.c:137
drivers/net/ethernet/sfc/falcon.c:143
drivers/net/ethernet/sfc/falcon.c:145
drivers/net/ethernet/sfc/mcdi_mon.c:43
drivers/net/ethernet/sfc/siena.c:431
drivers/net/ethernet/sfc/siena.c:434
drivers/net/ethernet/sfc/siena.c:436
drivers/net/irda/donauboe.c:184
drivers/net/irda/donauboe.c:185
drivers/net/irda/via-ircc.h:160
drivers/net/irda/via-ircc.h:162
drivers/net/irda/via-ircc.h:164
drivers/net/irda/via-ircc.h:174
drivers/net/irda/via-ircc.h:175
drivers/net/phy/bcm7xxx.c:32
drivers/net/usb/sierra_net.c:934
drivers/net/wireless/iwlegacy/3945.c:59
drivers/net/wireless/iwlegacy/4965-rs.c:76
drivers/net/wireless/iwlwifi/dvm/rs.c:76
drivers/net/wireless/iwlwifi/dvm/rx.c:40
drivers/net/wireless/iwlwifi/mvm/coex_legacy.c:75
drivers/net/wireless/iwlwifi/mvm/ops.c:271
drivers/net/wireless/iwlwifi/mvm/rs.c:77
drivers/net/wireless/iwlwifi/mvm/rs.c:86
drivers/net/wireless/iwlwifi/mvm/utils.c:198
drivers/net/wireless/prism54/oid_mgt.c:48
drivers/pinctrl/pinctrl-tz1090.c:693
drivers/pinctrl/pinctrl-tz1090.c:700
drivers/pinctrl/pinctrl-tz1090.c:788
drivers/pinctrl/pinctrl-tz1090-pdc.c:171
drivers/pinctrl/pinctrl-zynq.c:763
drivers/pinctrl/pinctrl-zynq.c:771
drivers/pinctrl/qcom/pinctrl-apq8064.c:220
drivers/pinctrl/qcom/pinctrl-apq8084.c:336
drivers/pinctrl/qcom/pinctrl-ipq8064.c:173
drivers/pinctrl/qcom/pinctrl-msm8660.c:386
drivers/pinctrl/qcom/pinctrl-msm8916.c:297
drivers/pinctrl/qcom/pinctrl-msm8960.c:345
drivers/pinctrl/qcom/pinctrl-msm8x74.c:332
drivers/pinctrl/sh-pfc/sh_pfc.h:288
drivers/pinctrl/sh-pfc/sh_pfc.h:321
drivers/power/bq27xxx_battery.c:428
drivers/regulator/ab8500.c:1798
drivers/regulator/act8865-regulator.c:176
drivers/regulator/as3711-regulator.c:133
drivers/regulator/axp20x-regulator.c:101
drivers/regulator/axp20x-regulator.c:115
drivers/regulator/axp20x-regulator.c:39
drivers/regulator/axp20x-regulator.c:61
drivers/regulator/axp20x-regulator.c:81
drivers/regulator/hi6421-regulator.c:169
drivers/regulator/hi6421-regulator.c:205
drivers/regulator/hi6421-regulator.c:242
drivers/regulator/hi6421-regulator.c:276
drivers/regulator/hi6421-regulator.c:310
drivers/regulator/ltc3589.c:199
drivers/regulator/max8907-regulator.c:186
drivers/regulator/max8907-regulator.c:39
drivers/regulator/max8907-regulator.c:49
drivers/regulator/max8907-regulator.c:66
drivers/regulator/max8907-regulator.c:78
drivers/regulator/max8907-regulator.c:92
drivers/regulator/mc13xxx.h:59
drivers/regulator/mc13xxx.h:77
drivers/regulator/mc13xxx.h:92
drivers/regulator/mt6397-regulator.c:43
drivers/regulator/mt6397-regulator.c:67
drivers/regulator/mt6397-regulator.c:87
drivers/regulator/palmas-regulator.c:318
drivers/regulator/palmas-regulator.c:354
drivers/regulator/pcap-regulator.c:107
drivers/regulator/pcap-regulator.c:222
drivers/regulator/pfuze100-regulator.c:162
drivers/regulator/pfuze100-regulator.c:177
drivers/regulator/pfuze100-regulator.c:195
drivers/regulator/pfuze100-regulator.c:212
drivers/regulator/rn5t618-regulator.c:31
drivers/regulator/tps65218-regulator.c:52
fs/f2fs/f2fs.h:80
fs/f2fs/f2fs.h:82
fs/nls/nls_euc-jp.c:31
fs/nls/nls_euc-jp.c:49
include/drm/drmP.h:265
include/linux/genl_magic_func.h:21
include/linux/genl_magic_func.h:34
include/linux/genl_magic_func.h:39
include/linux/perf/arm_pmu.h:44
include/linux/perf/arm_pmu.h:47
include/linux/regmap.h:797
include/linux/wimax/debug.h:340
include/net/fib_rules.h:83
include/uapi/linux/wireless.h:349
include/xen/hvm.h:10
kernel/cgroup.c:128
kernel/cgroup.c:135
kernel/cgroup.c:150
kernel/cgroup.c:156
kernel/cpu.c:742
kernel/locking/lockdep.c:459
kernel/trace/trace_probe.h:202
mm/slab.h:363
mm/vmalloc.c:1851
mm/vmalloc.c:1853
net/core/neighbour.c:3026
net/mac80211/debugfs.c:95
net/mac80211/rc80211_minstrel_ht.c:129
net/mac80211/rc80211_minstrel_ht.c:54
net/mac80211/rc80211_minstrel_ht.c:82
net/sunrpc/auth_gss/gss_rpc_upcall.c:55
sound/core/oss/mixer_oss.c:1117
sound/core/pcm.c:170
sound/core/pcm.c:236
sound/core/pcm.c:237
sound/core/pcm.c:238
sound/core/pcm.c:239
sound/core/pcm.c:240
sound/core/pcm.c:241
sound/core/pcm.c:242
sound/core/pcm.c:243
sound/core/pcm.c:244
sound/core/pcm_native.c:248
sound/oss/ad1848_mixer.h:93
sound/oss/ad1848_mixer.h:97
sound/pci/ice1712/quartet.c:666
sound/pci/ice1712/quartet.c:671
--
With best wishes,
Vladimir
next prev parent reply other threads:[~2015-11-10 18:01 UTC|newest]
Thread overview: 5+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-10-29 21:36 [PATCH] checkpatch: fix a number of COMPLEX_MACRO false positives Vladimir Zapolskiy
2015-10-29 22:46 ` Joe Perches
2015-10-29 23:52 ` Vladimir Zapolskiy
2015-11-10 18:01 ` Vladimir Zapolskiy [this message]
2015-11-10 18:08 ` Joe Perches
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=56423108.7070903@mleia.com \
--to=vz@mleia.com \
--cc=akpm@linux-foundation.org \
--cc=apw@canonical.com \
--cc=dan.carpenter@oracle.com \
--cc=joe@perches.com \
--cc=linux-kernel@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.