Commit f75a8df3bd6466e29a4e40b86b2cfc96fe06d328

Authored by Bobby Powers
Committed by Michal Marek
1 parent 875de98623

headers_check: recursively search for linux/types.h inclusion

headers_check.pl currently emits some spurious warnings, especially for
the drm headers, about using __[us]{8,16,32,64} types without including
linux/types.h.  Recursively search for types.h inclusion, avoiding
circular references.

Signed-off-by: Bobby Powers <bobbypowers@gmail.com>
Cc: Sam Ravnborg <sam@ravnborg.org>
Cc: Dave Airlie <airlied@linux.ie>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Michal Marek <mmarek@suse.cz>

Showing 1 changed file with 37 additions and 1 deletions Side-by-side Diff

scripts/headers_check.pl
... ... @@ -19,6 +19,7 @@
19 19 # 3) Check for leaked CONFIG_ symbols
20 20  
21 21 use strict;
  22 +use File::Basename;
22 23  
23 24 my ($dir, $arch, @files) = @ARGV;
24 25  
... ... @@ -99,6 +100,39 @@
99 100 }
100 101  
101 102 my $linux_types;
  103 +my %import_stack = ();
  104 +sub check_include_typesh
  105 +{
  106 + my $path = $_[0];
  107 + my $import_path;
  108 +
  109 + my $fh;
  110 + my @file_paths = ($path, $dir . "/" . $path, dirname($filename) . "/" . $path);
  111 + for my $possible ( @file_paths ) {
  112 + if (not $import_stack{$possible} and open($fh, '<', $possible)) {
  113 + $import_path = $possible;
  114 + $import_stack{$import_path} = 1;
  115 + last;
  116 + }
  117 + }
  118 + if (eof $fh) {
  119 + return;
  120 + }
  121 +
  122 + my $line;
  123 + while ($line = <$fh>) {
  124 + if ($line =~ m/^\s*#\s*include\s+<linux\/types.h>/) {
  125 + $linux_types = 1;
  126 + last;
  127 + }
  128 + if (my $included = ($line =~ /^\s*#\s*include\s+[<"](\S+)[>"]/)[0]) {
  129 + check_include_typesh($included);
  130 + }
  131 + }
  132 + close $fh;
  133 + delete $import_stack{$import_path};
  134 +}
  135 +
102 136 sub check_sizetypes
103 137 {
104 138 if ($filename =~ /types.h|int-l64.h|int-ll64.h/o) {
... ... @@ -112,6 +146,9 @@
112 146 if ($line =~ m/^\s*#\s*include\s+<linux\/types.h>/) {
113 147 $linux_types = 1;
114 148 return;
  149 + }
  150 + if (my $included = ($line =~ /^\s*#\s*include\s+[<"](\S+)[>"]/)[0]) {
  151 + check_include_typesh($included);
115 152 }
116 153 if ($line =~ m/__[us](8|16|32|64)\b/) {
117 154 printf STDERR "$filename:$lineno: " .