Re: [arc-linux-dev] Re: UAPI for new arches (was Re: [GIT PULL] User API Disintegrate: Preparatory patches)

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Vineet Gupta <Vineet.Gupta1@xxxxxxxxxxxx> wrote:

> >> Per you email from last week, When I ran the disintergrate-one.pl script
> >> myself I saw a whole bunch of empty UAPI files being generated with
> >> references in orig header.  I'm not sure what I'm doing wrong.
> > Can you give an example of such a header?
> 
> tlb.h - despite having __KERNEL__ guard in orig file. Here's how I did it.
> 
> 1. In my orig tree, I created arch/arc/include/uapi/asm/Kbuild, with
> following 2 lines
> 
> # UAPI Header export list
> include include/uapi/asm-generic/Kbuild.asm
> 
> 2.  ./disintegrate-one.pl arch/arc/include/asm/tlb.h
> arch/arc/include/uapi/asm/tlb.h
> 
> This generates a empty uapi/asm/tlb.h, a reference to it in asm/tlb.h
> and is also exported from Kbuild.asm - all 3 of which are wrong.

Actually, this is the correct operation - it's just that there's nothing in
tlb.h to export.  (Note that Kbuild.asm is not modified, but rather
uapi/asm/Kbuild.  asm/Kbuild would too, but there's no export line there to be
removed.)

However... tlb.h isn't exported in Kbuild.asm - nor is it exported in arc's
asm/Kbuild, so the script shouldn't be run on that.

> But now that I think about it - I was wrong to call this script for
> all/any arch headers. It should be done only for the ones in
> include/uapi/asm-generic/Kbuild.asm or any specific ones that arch wants
> to export (cachectl.h for our case).

Exactly so.  I should probably have mentioned that, but I've had it automated
for so long, that I don't think about it any more.  You should only call it
for arch headers

I've attached a script that I use to work out which files need disintegration
in a directory.  Run as:

	genfilelist.pl arch/arc/include/asm/

I get:

	byteorder.h
	cachectl.h
	page.h
	ptrace.h
	setup.h
	sigcontext.h
	signal.h
	swab.h
	unistd.h

as being all that you need to disintegrate.  Almost everything seems to be
generic.

David

#!/usr/bin/perl -w
#
# Find all the UAPI files in the nominated directory
#

die "Need directory argument\n"
    if ($#ARGV == -1);

my $dir = $ARGV[0];
my $kbuild = $dir . "/Kbuild";

die "$kbuild not present"
    unless (-r "$dir/Kbuild");

#
# We assume that only Kbuild files in include directories are pertinent to
# determining which headers are UAPI headers.
#
my %headers = ();

opendir my $dh, $dir or die;
foreach $_ (readdir($dh)) {
    $headers{$_} = 1
	if ($_ =~ /[.]h$/ || $_ =~ /[.]agh$/ || $_ =~ /[.]inc$/);
}
closedir($dh) or die;

# Read the common arch list
open FD, '<include/uapi/asm-generic/Kbuild.asm' or die "open Kbuild.asm: $!\n";
my @kbuild_asm = <FD>;
close FD or die;

my %uapihdrs = ();

open FD, '<', $kbuild or die "open $kbuild: $!\n";
my @lines = <FD>;
close FD or die;

for (my $l = 0; $l <= $#lines; $l++) {
    my $line = $lines[$l];

    # parse out the blocks
    # - this may be split over multiple lines using backslashes
    my $block = $line;
  restart:
    $block =~ s@#.*$@@;
    $block =~ s@\s+$@@g;
    $block =~ s@\s+@ @g;

    if ($block =~ /^(.*)[\\]$/) {
	$l++;
	$block = $1 . $lines[$l];
	goto restart;
    }

    $block =~ s@\s+$@@g;
    $block =~ s@\s\s+@ @g;

    if ($block =~ m@^include include/asm-generic/Kbuild.asm@) {
	push @lines, @kbuild_asm;
    }

    if ($block =~ m@^header-y\s*[+:]?=\s*(.*)@ ||
	$block =~ m@^opt-header\s*[+:]?=\s*(.*)@ ||
	$block =~ m@^asm-headers\s*[+:]?=\s*(.*)@
	) {
	my $files = $1;
	next if ($block =~ m@[$][(]foreach@);
	foreach $h (grep m@[^/]$@, split /\s+/, $files) {
	    if (exists $headers{"$h"}) {
		$uapihdrs{"$h"} = 1;
	    }
	}
    }
}

print map { $_ . "\n"; } sort keys %uapihdrs;

[Index of Archives]     [Linux Kernel]     [Kernel Newbies]     [x86 Platform Driver]     [Netdev]     [Linux Wireless]     [Netfilter]     [Bugtraq]     [Linux Filesystems]     [Yosemite Discussion]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Samba]     [Device Mapper]

  Powered by Linux