checkpatch: Improve const struct tests
Joe Perches
maintainercover checkpatch: Improve const struct tests
Joe Perches (2):
checkpatch: Externalize the structs that should be const const_structs.checkpatch: Add frequently defined from Julia Lawall's list
scripts/checkpatch.pl | 64 +++++++++++++++------------------------- scripts/const_structs.checkpatch | 64 ++++++++++++++++++++++++++++++++++++++++ 2 files changed, 88 insertions(+), 40 deletions(-) create mode 100644 scripts/const_structs.checkpatch
Signature · 1 line
2.10.0.rc2.1.gb2aa91d
Joe Perches
maintainerPATCH 1/2 checkpatch: Externalize the structs that should be const
Make it easier to add new structs that should be const.
--- scripts/checkpatch.pl | 64 +++++++++++++++------------------------- scripts/const_structs.checkpatch | 39 ++++++++++++++++++++++++ 2 files changed, 63 insertions(+), 40 deletions(-) create mode 100644 scripts/const_structs.checkpatch
scripts/checkpatch.pl +24 -40
@@ -54,6 +54,7 @@ my $min_conf_desc_length = 4; my $spelling_file = "$D/spelling.txt"; my $codespell = 0; my $codespellfile = "/usr/share/codespell/dictionary.txt"; +my $conststructsfile = "$D/const_structs.checkpatch"; my $color = 1; my $allow_c99_comments = 1;
@@ -624,6 +625,29 @@ if ($codespell) { $misspellings = join("|", sort keys %spelling_fix) if keys %spelling_fix; +my $const_structs = ""; +if (open(my $conststructs, '<', $conststructsfile)) { + while (<$conststructs>) { + my $line = $_; + + $line =~ s/\s*\n?$//g; + $line =~ s/^\s*//g; + + next if ($line =~ m/^\s*#/); + next if ($line =~ m/^\s*$/); + if ($line =~ /\s/) { + print("$conststructsfile: '$line' invalid - ignored\n"); + next; + } + + $const_structs .= '|' if ($const_structs ne ""); + $const_structs .= $line; + } + close($conststructsfile); +} else { + warn "No structs that should be const will be found - file '$conststructsfile': $!\n"; +} + sub build_types { my $mods = "(?x: \n" . join("|\n ", (@modifierList, @modifierListFile)) . "\n)"; my $all = "(?x: \n" . join("|\n ", (@typeList, @typeListFile)) . "\n)";
@@ -5902,46 +5926,6 @@ sub process { } # check for various structs that are normally const (ops, kgdb, device_tree) - my $const_structs = qr{ - acpi_dock_ops| - address_space_operations| - backlight_ops| - block_device_operations| - dentry_operations| - dev_pm_ops| - dma_map_ops| - extent_io_ops| - file_lock_operations| - file_operations| - hv_ops| - ide_dma_ops| - intel_dvo_dev_ops| - item_operations| - iwl_ops| - kgdb_arch| - kgdb_io| - kset_uevent_ops| - lock_manager_operations| - microcode_ops| - mtrr_ops| - neigh_ops| - nlmsvc_binding| - of_device_id| - pci_raw_ops| - pipe_buf_operations| - platform_hibernation_ops| - platform_suspend_ops| - proto_ops| - rpc_pipe_ops| - seq_operations| - snd_ac97_build_ops| - soc_pcmcia_socket_ops| - stacktrace_ops| - sysfs_ops| - tty_operations| - uart_ops| - usb_mon_operations| - wd_ops}x; if ($line !~ /\bconst\b/ && $line =~ /\bstruct\s+($const_structs)\b/) { WARN("CONST_STRUCT",
scripts/const_structs.checkpatch new file +39 -0
@@ -0,0 +1,39 @@ +acpi_dock_ops +address_space_operations +backlight_ops +block_device_operations +dentry_operations +dev_pm_ops +dma_map_ops +extent_io_ops +file_lock_operations +file_operations +hv_ops +ide_dma_ops +intel_dvo_dev_ops +item_operations +iwl_ops +kgdb_arch +kgdb_io +kset_uevent_ops +lock_manager_operations +microcode_ops +mtrr_ops +neigh_ops +nlmsvc_binding +of_device_id +pci_raw_ops +pipe_buf_operations +platform_hibernation_ops +platform_suspend_ops +proto_ops +rpc_pipe_ops +seq_operations +snd_ac97_build_ops +soc_pcmcia_socket_ops +stacktrace_ops +sysfs_ops +tty_operations +uart_ops +usb_mon_operations +wd_ops
Signature · 1 line
2.10.0.rc2.1.gb2aa91d
Joe Perches
maintainerPATCH 2/2 const_structs.checkpatch: Add frequently used from Julia Lawall's list
In reply to Joe PerchesUsing const is generally a good idea.
Julia Lawall has created a list of always const and almost always const structs in the kernel sources.
Add the most frequently used (> 50 cases) that are almost always or always const.
--- scripts/const_structs.checkpatch | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+)
scripts/const_structs.checkpatch +25 -0
@@ -2,38 +2,63 @@ acpi_dock_ops address_space_operations backlight_ops block_device_operations +clk_ops +comedi_lrange +component_ops dentry_operations dev_pm_ops dma_map_ops +driver_info +drm_connector_funcs +drm_encoder_funcs +drm_encoder_helper_funcs +ethtool_ops extent_io_ops file_lock_operations file_operations hv_ops ide_dma_ops +ide_port_ops +inode_operations intel_dvo_dev_ops +irq_domain_ops item_operations +iwl_cfg iwl_ops kgdb_arch kgdb_io kset_uevent_ops lock_manager_operations +machine_desc microcode_ops +mlxsw_reg_info mtrr_ops neigh_ops +net_device_ops nlmsvc_binding +nvkm_device_chip of_device_id pci_raw_ops pipe_buf_operations platform_hibernation_ops platform_suspend_ops proto_ops +regmap_access_table rpc_pipe_ops +rtc_class_ops +sd_desc seq_operations +sirfsoc_padmux snd_ac97_build_ops +snd_soc_component_driver soc_pcmcia_socket_ops stacktrace_ops sysfs_ops tty_operations uart_ops usb_mon_operations +v4l2_ctrl_ops +v4l2_ioctl_ops +vm_operations_struct +wacom_features wd_ops
Signature · 1 line
2.10.0.rc2.1.gb2aa91d
Re: [PATCH 2/2] const_structs.checkpatch: Add frequently used from Julia Lawall's list
Quoted 5 lines · Joe Perches
Using const is generally a good idea.
Julia Lawall has created a list of always const and almost always const structs in the kernel sources.
Quoted 8 lines
Add the most frequently used (> 50 cases) that are almost always or always const.
Signed-off-by Joe Perches <[email protected]>cc Julia Lawall <[email protected]>cc Kees Cook <[email protected]>
Signature · 2 lines
Kees Cook Nexus Security