7976 lines · 239.6 KB · Perl
RawDownload
my $emitted_corrupt = 0; our $Ident	= qr{			[A-Za-z_][A-Za-z\d_]*			(?:\s*\#\#\s*[A-Za-z_][A-Za-z\d_]*)*		}x;our $Storage	= qr{extern|static|asmlinkage};our $Sparse	= qr{			__user|			__kernel|			__force|			__iomem|			__must_check|			__kprobes|			__ref|			__refconst|			__refdata|			__rcu|			__private		}x;our $InitAttributePrefix = qr{__(?:mem|cpu|dev|net_|)};our $InitAttributeData = qr{$InitAttributePrefix(?:initdata\b)};our $InitAttributeConst = qr{$InitAttributePrefix(?:initconst\b)};our $InitAttributeInit = qr{$InitAttributePrefix(?:init\b)};our $InitAttribute = qr{$InitAttributeData|$InitAttributeConst|$InitAttributeInit}; # Notes to $Attribute:# We need \b after 'init' otherwise 'initconst' will cause a false positive in a checkour $Attribute	= qr{			const|			volatile|			__percpu|			__nocast|			__safe|			__bitwise|			__packed__|			__packed2__|			__naked|			__maybe_unused|			__always_unused|			__noreturn|			__used|			__cold|			__pure|			__noclone|			__deprecated|			__read_mostly|			__ro_after_init|			__kprobes|			$InitAttribute|			__aligned\s*\(.*\)|			____cacheline_aligned|			____cacheline_aligned_in_smp|			____cacheline_internodealigned_in_smp|			__weak|			__alloc_size\s*\(\s*\d+\s*(?:,\s*\d+\s*)?\)		  }x;our $Modifier;our $Inline	= qr{inline|__always_inline|noinline|__inline|__inline__};our $Member	= qr{->$Ident|\.$Ident|\[[^]]*\]};our $Lval	= qr{$Ident(?:$Member)*}; our $Int_type	= qr{(?i)llu|ull|ll|lu|ul|l|u};our $Binary	= qr{(?i)0b[01]+$Int_type?};our $Hex	= qr{(?i)0x[0-9a-f]+$Int_type?};our $Int	= qr{[0-9]+$Int_type?};our $Octal	= qr{0[0-7]+$Int_type?};our $String	= qr{(?:\b[Lu])?"[X\t]*"};our $Float_hex	= qr{(?i)0x[0-9a-f]+p-?[0-9]+[fl]?};our $Float_dec	= qr{(?i)(?:[0-9]+\.[0-9]*|[0-9]*\.[0-9]+)(?:e-?[0-9]+)?[fl]?};our $Float_int	= qr{(?i)[0-9]+e-?[0-9]+[fl]?};our $Float	= qr{$Float_hex|$Float_dec|$Float_int};our $Constant	= qr{$Float|$Binary|$Octal|$Hex|$Int};our $Assignment	= qr{\*\=|/=|%=|\+=|-=|<<=|>>=|&=|\^=|\|=|=};our $Compare    = qr{<=|>=|==|!=|<|(?<!-)>};our $Arithmetic = qr{\+|-|\*|\/|%};our $Operators	= qr{			<=|>=|==|!=|			=>|->|<<|>>|<|>|!|~|			&&|\|\||,|\^|\+\+|--|&|\||$Arithmetic		  }x; our $c90_Keywords = qr{do|for|while|if|else|return|goto|continue|switch|default|case|break}x; our $BasicType;our $NonptrType;our $NonptrTypeMisordered;our $NonptrTypeWithAttr;our $Type;our $TypeMisordered;our $Declare;our $DeclareMisordered; our $NON_ASCII_UTF8	= qr{	[\xC2-\xDF][\x80-\xBF]               # non-overlong 2-byte	|  \xE0[\xA0-\xBF][\x80-\xBF]        # excluding overlongs	| [\xE1-\xEC\xEE\xEF][\x80-\xBF]{2}  # straight 3-byte	|  \xED[\x80-\x9F][\x80-\xBF]        # excluding surrogates	|  \xF0[\x90-\xBF][\x80-\xBF]{2}     # planes 1-3	| [\xF1-\xF3][\x80-\xBF]{3}          # planes 4-15	|  \xF4[\x80-\x8F][\x80-\xBF]{2}     # plane 16}x; our $UTF8	= qr{	[\x09\x0A\x0D\x20-\x7E]              # ASCII	| $NON_ASCII_UTF8}x; our $typeC99Typedefs = qr{(?:__)?(?:[us]_?)?int_?(?:8|16|32|64)_t};our $typeOtherOSTypedefs = qr{(?x:	u_(?:char|short|int|long) |          # bsd	u(?:nchar|short|int|long)            # sysv)};our $typeKernelTypedefs = qr{(?x:	(?:__)?(?:u|s|be|le)(?:8|16|32|64)|	atomic_t)};our $typeStdioTypedefs = qr{(?x:	FILE)};our $typeTypedefs = qr{(?x:	$typeC99Typedefs\b|	$typeOtherOSTypedefs\b|	$typeKernelTypedefs\b|	$typeStdioTypedefs\b)}; our $zero_initializer = qr{(?:(?:0[xX])?0+$Int_type?|NULL|false)\b}; our $logFunctions = qr{(?x:	printk(?:_ratelimited|_once|_deferred_once|_deferred|)|	(?:[a-z0-9]+_){1,2}(?:printk|emerg|alert|crit|err|warning|warn|notice|info|debug|dbg|vdbg|devel|cont|WARN)(?:_ratelimited|_once|)|	TP_printk|	WARN(?:_RATELIMIT|_ONCE|)|	panic|	MODULE_[A-Z_]+|	seq_vprintf|seq_printf|seq_puts)}; our $allocFunctions = qr{(?x:	(?:(?:devm_)?		(?:kv|k|v)[czm]alloc(?:_array)?(?:_node)? |		kstrdup(?:_const)? |		kmemdup(?:_nul)?) |	(?:\w+)?alloc_skb(?:_ip_align)? |				# dev_alloc_skb/netdev_alloc_skb, et al	dma_alloc_coherent)}; our $signature_tags = qr{(?xi:	Signed-off-by:|	Co-developed-by:|	Acked-by:|	Tested-by:|	Reviewed-by:|	Reported-by:|	Suggested-by:|	Assisted-by:|	To:|	Cc:)}; our @link_tags = qw(Link Closes); #Create a search and print patterns for all these strings to be used directly belowour $link_tags_search = "";our $link_tags_print = "";foreach my $entry (@link_tags) {	if ($link_tags_search ne "") {		$link_tags_search .= '|';		$link_tags_print .= ' or ';	}	$entry .= ':';	$link_tags_search .= $entry;	$link_tags_print .= "'$entry'";}$link_tags_search = "(?:${link_tags_search})"; our $tracing_logging_tags = qr{(?xi:	[=-]*> |	<[=-]* |	\[ |	\] |	start |	called |	entered |	entry |	enter |	in |	inside |	here |	begin |	exit |	end |	done |	leave |	completed |	out |	return |	[\.\!:\s]*)}; # Device ID types like found in include/linux/mod_devicetable.h.our $dev_id_types = qr{\b[a-z]\w*_device_id\b}; sub edit_distance_min {	my (@arr) = @_;	my $len = scalar @arr;	if ((scalar @arr) < 1) {		# if underflow, return		return;	}	my $min = $arr[0];	for my $i (0 .. ($len-1)) {		if ($arr[$i] < $min) {			$min = $arr[$i];		}	}	return $min;} sub get_edit_distance {	my ($str1, $str2) = @_;	$str1 = lc($str1);	$str2 = lc($str2);	$str1 =~ s/-//g;	$str2 =~ s/-//g;	my $len1 = length($str1);	my $len2 = length($str2);	# two dimensional array storing minimum edit distance	my @distance;	for my $i (0 .. $len1) {		for my $j (0 .. $len2) {			if ($i == 0) {				$distance[$i][$j] = $j;			} elsif ($j == 0) {				$distance[$i][$j] = $i;			} elsif (substr($str1, $i-1, 1) eq substr($str2, $j-1, 1)) {				$distance[$i][$j] = $distance[$i - 1][$j - 1];			} else {				my $dist1 = $distance[$i][$j - 1]; #insert distance				my $dist2 = $distance[$i - 1][$j]; # remove				my $dist3 = $distance[$i - 1][$j - 1]; #replace				$distance[$i][$j] = 1 + edit_distance_min($dist1, $dist2, $dist3);			}		}	}	return $distance[$len1][$len2];} sub find_standard_signature {	my ($sign_off) = @_;	my @standard_signature_tags = (		'Signed-off-by:', 'Co-developed-by:', 'Acked-by:', 'Tested-by:',		'Reviewed-by:', 'Reported-by:', 'Suggested-by:'	);	foreach my $signature (@standard_signature_tags) {		return $signature if (get_edit_distance($sign_off, $signature) <= 2);	} 	return "";} our $obsolete_archives = qr{(?xi:	\Qfreedesktop.org/archives/dri-devel\E |	\Qlists.infradead.org\E |	\Qlkml.org\E |	\Qmail-archive.com\E |	\Qmailman.alsa-project.org/pipermail\E |	\Qmarc.info\E |	\Qozlabs.org/pipermail\E |	\Qspinics.net\E)}; our @typeListMisordered = (	qr{char\s+(?:un)?signed},	qr{int\s+(?:(?:un)?signed\s+)?short\s},	qr{int\s+short(?:\s+(?:un)?signed)},	qr{short\s+int(?:\s+(?:un)?signed)},	qr{(?:un)?signed\s+int\s+short},	qr{short\s+(?:un)?signed},	qr{long\s+int\s+(?:un)?signed},	qr{int\s+long\s+(?:un)?signed},	qr{long\s+(?:un)?signed\s+int},	qr{int\s+(?:un)?signed\s+long},	qr{int\s+(?:un)?signed},	qr{int\s+long\s+long\s+(?:un)?signed},	qr{long\s+long\s+int\s+(?:un)?signed},	qr{long\s+long\s+(?:un)?signed\s+int},	qr{long\s+long\s+(?:un)?signed},	qr{long\s+(?:un)?signed},); our @typeList = (	qr{void},	qr{(?:(?:un)?signed\s+)?char},	qr{(?:(?:un)?signed\s+)?short\s+int},	qr{(?:(?:un)?signed\s+)?short},	qr{(?:(?:un)?signed\s+)?int},	qr{(?:(?:un)?signed\s+)?long\s+int},	qr{(?:(?:un)?signed\s+)?long\s+long\s+int},	qr{(?:(?:un)?signed\s+)?long\s+long},	qr{(?:(?:un)?signed\s+)?long},	qr{(?:un)?signed},	qr{float},	qr{double},	qr{bool},	qr{struct\s+$Ident},	qr{union\s+$Ident},	qr{enum\s+$Ident},	qr{${Ident}_t},	qr{${Ident}_handler},	qr{${Ident}_handler_fn},	@typeListMisordered,); our $C90_int_types = qr{(?x:	long\s+long\s+int\s+(?:un)?signed|	long\s+long\s+(?:un)?signed\s+int|	long\s+long\s+(?:un)?signed|	(?:(?:un)?signed\s+)?long\s+long\s+int|	(?:(?:un)?signed\s+)?long\s+long|	int\s+long\s+long\s+(?:un)?signed|	int\s+(?:(?:un)?signed\s+)?long\s+long| 	long\s+int\s+(?:un)?signed|	long\s+(?:un)?signed\s+int|	long\s+(?:un)?signed|	(?:(?:un)?signed\s+)?long\s+int|	(?:(?:un)?signed\s+)?long|	int\s+long\s+(?:un)?signed|	int\s+(?:(?:un)?signed\s+)?long| 	int\s+(?:un)?signed|	(?:(?:un)?signed\s+)?int)}; our @typeListFile = ();our @typeListWithAttr = (	@typeList,	qr{struct\s+$InitAttribute\s+$Ident},	qr{union\s+$InitAttribute\s+$Ident},); our @modifierList = (	qr{fastcall},);our @modifierListFile = (); our @mode_permission_funcs = (	["module_param", 3],	["module_param_(?:array|named|string)", 4],	["module_param_array_named", 5],	["debugfs_create_(?:file|u8|u16|u32|u64|x8|x16|x32|x64|size_t|atomic_t|bool|blob|regset32|u32_array)", 2],	["proc_create(?:_data|)", 2],	["(?:CLASS|DEVICE|SENSOR|SENSOR_DEVICE|IIO_DEVICE)_ATTR", 2],	["IIO_DEV_ATTR_[A-Z_]+", 1],	["SENSOR_(?:DEVICE_|)ATTR_2", 2],	["SENSOR_TEMPLATE(?:_2|)", 3],	["__ATTR", 2],); my $word_pattern = '\b[A-Z]?[a-z]{2,}\b'; #Create a search pattern for all these functions to speed up a loop belowour $mode_perms_search = "";foreach my $entry (@mode_permission_funcs) {	$mode_perms_search .= '|' if ($mode_perms_search ne "");	$mode_perms_search .= $entry->[0];}$mode_perms_search = "(?:${mode_perms_search})"; our %deprecated_apis = (	"kmap"					=> "kmap_local_page",	"kunmap"				=> "kunmap_local",	"kmap_atomic"				=> "kmap_local_page",	"kunmap_atomic"				=> "kunmap_local",	#These should be enough to drive away new IDR users	"DEFINE_IDR"				=> "DEFINE_XARRAY",	"idr_init"				=> "xa_init",	"idr_init_base"				=> "xa_init_flags",); #Create a search pattern for all these strings to speed up a loop belowour $deprecated_apis_search = "";foreach my $entry (keys %deprecated_apis) {	$deprecated_apis_search .= '|' if ($deprecated_apis_search ne "");	$deprecated_apis_search .= $entry;}$deprecated_apis_search = "(?:${deprecated_apis_search})"; our $mode_perms_world_writable = qr{	S_IWUGO		|	S_IWOTH		|	S_IRWXUGO	|	S_IALLUGO	|	0[0-7][0-7][2367]}x; our %mode_permission_string_types = (	"S_IRWXU" => 0700,	"S_IRUSR" => 0400,	"S_IWUSR" => 0200,	"S_IXUSR" => 0100,	"S_IRWXG" => 0070,	"S_IRGRP" => 0040,	"S_IWGRP" => 0020,	"S_IXGRP" => 0010,	"S_IRWXO" => 0007,	"S_IROTH" => 0004,	"S_IWOTH" => 0002,	"S_IXOTH" => 0001,	"S_IRWXUGO" => 0777,	"S_IRUGO" => 0444,	"S_IWUGO" => 0222,	"S_IXUGO" => 0111,); #Create a search pattern for all these strings to speed up a loop belowour $mode_perms_string_search = "";foreach my $entry (keys %mode_permission_string_types) {	$mode_perms_string_search .= '|' if ($mode_perms_string_search ne "");	$mode_perms_string_search .= $entry;}our $single_mode_perms_string_search = "(?:${mode_perms_string_search})";our $multi_mode_perms_string_search = qr{	${single_mode_perms_string_search}	(?:\s*\|\s*${single_mode_perms_string_search})*}x; sub perms_to_octal {	my ($string) = @_; 	return trim($string) if ($string =~ /^\s*0[0-7]{3,3}\s*$/); 	my $val = "";	my $oval = "";	my $to = 0;	my $curpos = 0;	my $lastpos = 0;	while ($string =~ /\b(($single_mode_perms_string_search)\b(?:\s*\|\s*)?\s*)/g) {		$curpos = pos($string);		my $match = $2;		my $omatch = $1;		last if ($lastpos > 0 && ($curpos - length($omatch) != $lastpos));		$lastpos = $curpos;		$to |= $mode_permission_string_types{$match};		$val .= '\s*\|\s*' if ($val ne "");		$val .= $match;		$oval .= $omatch;	}	$oval =~ s/^\s*\|\s*//;	$oval =~ s/\s*\|\s*$//;	return sprintf("%04o", $to);} our $allowed_asm_includes = qr{(?x:	irq|	memory|	time|	reboot)};# memory.h: ARM has a custom one # Load common spelling mistakes and build regular expression list.my $misspellings;my %spelling_fix; if (open(my $spelling, '<', $spelling_file)) {	while (<$spelling>) {		my $line = $_; 		$line =~ s/\s*\n?$//g;		$line =~ s/^\s*//g; 		next if ($line =~ m/^\s*#/);		next if ($line =~ m/^\s*$/); 		my ($suspect, $fix) = split(/\|\|/, $line); 		$spelling_fix{$suspect} = $fix;	}	close($spelling);} else {	warn "No typos will be found - file '$spelling_file': $!\n";} if ($codespell) {	if (open(my $spelling, '<', $codespellfile)) {		while (<$spelling>) {			my $line = $_; 			$line =~ s/\s*\n?$//g;			$line =~ s/^\s*//g; 			next if ($line =~ m/^\s*#/);			next if ($line =~ m/^\s*$/);			next if ($line =~ m/, disabled/i); 			$line =~ s/,.*$//;

Lines 501–1000 of 7976. Previous lines