Merge branch 'akpm'

* akpm: (182 commits)
  fbdev: bf54x-lq043fb: use kzalloc over kmalloc/memset
  fbdev: *bfin*: fix __dev{init,exit} markings
  fbdev: *bfin*: drop unnecessary calls to memset
  fbdev: bfin-t350mcqb-fb: drop unused local variables
  fbdev: blackfin has __raw I/O accessors, so use them in fb.h
  fbdev: s1d13xxxfb: add accelerated bitblt functions
  tcx: use standard fields for framebuffer physical address and length
  fbdev: add support for handoff from firmware to hw framebuffers
  intelfb: fix a bug when changing video timing
  fbdev: use framebuffer_release() for freeing fb_info structures
  radeon: P2G2CLK_ALWAYS_ONb tested twice, should 2nd be P2G2CLK_DAC_ALWAYS_ONb?
  s3c-fb: CPUFREQ frequency scaling support
  s3c-fb: fix resource releasing on error during probing
  carminefb: fix possible access beyond end of carmine_modedb[]
  acornfb: remove fb_mmap function
  mb862xxfb: use CONFIG_OF instead of CONFIG_PPC_OF
  mb862xxfb: restrict compliation of platform driver to PPC
  Samsung SoC Framebuffer driver: add Alpha Channel support
  atmel-lcdc: fix pixclock upper bound detection
  offb: use framebuffer_alloc() to allocate fb_info struct
  ...

Manually fix up conflicts due to kmemcheck in mm/slab.c
This commit is contained in:
Linus Torvalds
2009-06-16 19:50:13 -07:00
247 changed files with 5676 additions and 2693 deletions
+189 -45
View File
@@ -13,7 +13,7 @@
use strict;
my $P = $0;
my $V = '0.15';
my $V = '0.16';
use Getopt::Long qw(:config no_auto_abbrev);
@@ -55,6 +55,10 @@ foreach my $chief (@penguin_chief) {
}
my $penguin_chiefs = "\(" . join("|",@penguin_chief_names) . "\)";
# rfc822 email address - preloaded methods go here.
my $rfc822_lwsp = "(?:(?:\\r\\n)?[ \\t])";
my $rfc822_char = '[\\000-\\377]';
if (!GetOptions(
'email!' => \$email,
'git!' => \$email_git,
@@ -161,7 +165,7 @@ foreach my $file (@ARGV) {
}
close(PATCH);
if ($file_cnt == @files) {
die "$P: file '${file}' doesn't appear to be a patch. "
warn "$P: file '${file}' doesn't appear to be a patch. "
. "Add -f to options?\n";
}
@files = sort_and_uniq(@files);
@@ -169,6 +173,7 @@ foreach my $file (@ARGV) {
}
my @email_to = ();
my @list_to = ();
my @scm = ();
my @web = ();
my @subsystem = ();
@@ -182,7 +187,7 @@ foreach my $file (@files) {
my $exclude = 0;
foreach my $line (@typevalue) {
if ($line =~ m/^(\C):(.*)/) {
if ($line =~ m/^(\C):\s*(.*)/) {
my $type = $1;
my $value = $2;
if ($type eq 'X') {
@@ -196,7 +201,7 @@ foreach my $file (@files) {
if (!$exclude) {
my $tvi = 0;
foreach my $line (@typevalue) {
if ($line =~ m/^(\C):(.*)/) {
if ($line =~ m/^(\C):\s*(.*)/) {
my $type = $1;
my $value = $2;
if ($type eq 'F') {
@@ -215,29 +220,33 @@ foreach my $file (@files) {
}
if ($email_git_penguin_chiefs) {
if ($email) {
foreach my $chief (@penguin_chief) {
if ($chief =~ m/^(.*):(.*)/) {
my $chief_name = $1;
my $chief_addr = $2;
my $email_address;
if ($email_usename) {
push(@email_to, format_email($chief_name, $chief_addr));
$email_address = format_email($1, $2);
} else {
push(@email_to, $chief_addr);
$email_address = $2;
}
if ($email_git_penguin_chiefs) {
push(@email_to, $email_address);
} else {
@email_to = grep(!/${email_address}/, @email_to);
}
}
}
}
if ($email) {
my $address_cnt = @email_to;
if ($address_cnt == 0 && $email_list) {
push(@email_to, "linux-kernel\@vger.kernel.org");
if ($email || $email_list) {
my @to = ();
if ($email) {
@to = (@to, @email_to);
}
#Don't sort email address list, but do remove duplicates
@email_to = uniq(@email_to);
output(@email_to);
if ($email_list) {
@to = (@to, @list_to);
}
output(uniq(@to));
}
if ($scm) {
@@ -307,10 +316,10 @@ Output type options:
--multiline => print 1 entry per line
Default options:
[--email --git --m --l --multiline]
[--email --git --m --n --l --multiline]
Other options:
--version -> show version
--version => show version
--help => show this help information
EOT
@@ -347,6 +356,7 @@ sub format_email {
my ($name, $email) = @_;
$name =~ s/^\s+|\s+$//g;
$name =~ s/^\"|\"$//g;
$email =~ s/^\s+|\s+$//g;
my $formatted_email = "";
@@ -366,36 +376,41 @@ sub add_categories {
$index = $index - 1;
while ($index >= 0) {
my $tv = $typevalue[$index];
if ($tv =~ m/^(\C):(.*)/) {
if ($tv =~ m/^(\C):\s*(.*)/) {
my $ptype = $1;
my $pvalue = $2;
if ($ptype eq "L") {
my $subscr = $pvalue;
if ($subscr =~ m/\s*\(subscribers-only\)/) {
my $list_address = $pvalue;
my $list_additional = "";
if ($list_address =~ m/([^\s]+)\s+(.*)$/) {
$list_address = $1;
$list_additional = $2;
}
if ($list_additional =~ m/subscribers-only/) {
if ($email_subscriber_list) {
$subscr =~ s/\s*\(subscribers-only\)//g;
push(@email_to, $subscr);
push(@list_to, $list_address);
}
} else {
if ($email_list) {
push(@email_to, $pvalue);
push(@list_to, $list_address);
}
}
} elsif ($ptype eq "M") {
if ($email_maintainer) {
if ($index >= 0) {
my $tv = $typevalue[$index - 1];
if ($tv =~ m/^(\C):(.*)/) {
if ($1 eq "P" && $email_usename) {
push(@email_to, format_email($2, $pvalue));
} else {
push(@email_to, $pvalue);
my $p_used = 0;
if ($index >= 0) {
my $tv = $typevalue[$index - 1];
if ($tv =~ m/^(\C):\s*(.*)/) {
if ($1 eq "P") {
if ($email_usename) {
push_email_address(format_email($2, $pvalue));
$p_used = 1;
}
}
} else {
push(@email_to, $pvalue);
}
}
if (!$p_used) {
push_email_addresses($pvalue);
}
} elsif ($ptype eq "T") {
push(@scm, $pvalue);
} elsif ($ptype eq "W") {
@@ -412,10 +427,45 @@ sub add_categories {
}
}
sub push_email_address {
my ($email_address) = @_;
my $email_name = "";
if ($email_address =~ m/([^<]+)<(.*\@.*)>$/) {
$email_name = $1;
$email_address = $2;
}
if ($email_maintainer) {
if ($email_usename && $email_name) {
push(@email_to, format_email($email_name, $email_address));
} else {
push(@email_to, $email_address);
}
}
}
sub push_email_addresses {
my ($address) = @_;
my @address_list = ();
if (rfc822_valid($address)) {
push_email_address($address);
} elsif (@address_list = rfc822_validlist($address)) {
my $array_count = shift(@address_list);
while (my $entry = shift(@address_list)) {
push_email_address($entry);
}
} else {
warn("Invalid MAINTAINERS address: '" . $address . "'\n");
}
}
sub which {
my ($bin) = @_;
foreach my $path (split /:/, $ENV{PATH}) {
foreach my $path (split(/:/, $ENV{PATH})) {
if (-e "$path/$bin") {
return "$path/$bin";
}
@@ -434,16 +484,21 @@ sub recent_git_signoffs {
my @lines = ();
if (which("git") eq "") {
die("$P: git not found. Add --nogit to options?\n");
warn("$P: git not found. Add --nogit to options?\n");
return;
}
if (!(-d ".git")) {
warn("$P: .git directory not found. Use a git repository for better results.\n");
warn("$P: perhaps 'git clone git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux-2.6.git'\n");
return;
}
$cmd = "git log --since=${email_git_since} -- ${file}";
$cmd .= " | grep -Pi \"^[-_ a-z]+by:.*\\\@\"";
$cmd .= " | grep -Ei \"^[-_ a-z]+by:.*\\\@.*\$\"";
if (!$email_git_penguin_chiefs) {
$cmd .= " | grep -Pv \"${penguin_chiefs}\"";
$cmd .= " | grep -Ev \"${penguin_chiefs}\"";
}
$cmd .= " | cut -f2- -d\":\"";
$cmd .= " | sed -e \"s/^\\s+//g\"";
$cmd .= " | sort | uniq -c | sort -rn";
$output = `${cmd}`;
@@ -465,10 +520,6 @@ sub recent_git_signoffs {
if ($line =~ m/(.+)<(.+)>/) {
my $git_name = $1;
my $git_addr = $2;
$git_name =~ tr/^\"//;
$git_name =~ tr/^\\s*//;
$git_name =~ tr/\"$//;
$git_name =~ tr/\\s*$//;
if ($email_usename) {
push(@email_to, format_email($git_name, $git_addr));
} else {
@@ -481,7 +532,6 @@ sub recent_git_signoffs {
push(@email_to, $line);
}
}
return $output;
}
sub uniq {
@@ -513,3 +563,97 @@ sub output {
print("\n");
}
}
my $rfc822re;
sub make_rfc822re {
# Basic lexical tokens are specials, domain_literal, quoted_string, atom, and
# comment. We must allow for rfc822_lwsp (or comments) after each of these.
# This regexp will only work on addresses which have had comments stripped
# and replaced with rfc822_lwsp.
my $specials = '()<>@,;:\\\\".\\[\\]';
my $controls = '\\000-\\037\\177';
my $dtext = "[^\\[\\]\\r\\\\]";
my $domain_literal = "\\[(?:$dtext|\\\\.)*\\]$rfc822_lwsp*";
my $quoted_string = "\"(?:[^\\\"\\r\\\\]|\\\\.|$rfc822_lwsp)*\"$rfc822_lwsp*";
# Use zero-width assertion to spot the limit of an atom. A simple
# $rfc822_lwsp* causes the regexp engine to hang occasionally.
my $atom = "[^$specials $controls]+(?:$rfc822_lwsp+|\\Z|(?=[\\[\"$specials]))";
my $word = "(?:$atom|$quoted_string)";
my $localpart = "$word(?:\\.$rfc822_lwsp*$word)*";
my $sub_domain = "(?:$atom|$domain_literal)";
my $domain = "$sub_domain(?:\\.$rfc822_lwsp*$sub_domain)*";
my $addr_spec = "$localpart\@$rfc822_lwsp*$domain";
my $phrase = "$word*";
my $route = "(?:\@$domain(?:,\@$rfc822_lwsp*$domain)*:$rfc822_lwsp*)";
my $route_addr = "\\<$rfc822_lwsp*$route?$addr_spec\\>$rfc822_lwsp*";
my $mailbox = "(?:$addr_spec|$phrase$route_addr)";
my $group = "$phrase:$rfc822_lwsp*(?:$mailbox(?:,\\s*$mailbox)*)?;\\s*";
my $address = "(?:$mailbox|$group)";
return "$rfc822_lwsp*$address";
}
sub rfc822_strip_comments {
my $s = shift;
# Recursively remove comments, and replace with a single space. The simpler
# regexps in the Email Addressing FAQ are imperfect - they will miss escaped
# chars in atoms, for example.
while ($s =~ s/^((?:[^"\\]|\\.)*
(?:"(?:[^"\\]|\\.)*"(?:[^"\\]|\\.)*)*)
\((?:[^()\\]|\\.)*\)/$1 /osx) {}
return $s;
}
# valid: returns true if the parameter is an RFC822 valid address
#
sub rfc822_valid ($) {
my $s = rfc822_strip_comments(shift);
if (!$rfc822re) {
$rfc822re = make_rfc822re();
}
return $s =~ m/^$rfc822re$/so && $s =~ m/^$rfc822_char*$/;
}
# validlist: In scalar context, returns true if the parameter is an RFC822
# valid list of addresses.
#
# In list context, returns an empty list on failure (an invalid
# address was found); otherwise a list whose first element is the
# number of addresses found and whose remaining elements are the
# addresses. This is needed to disambiguate failure (invalid)
# from success with no addresses found, because an empty string is
# a valid list.
sub rfc822_validlist ($) {
my $s = rfc822_strip_comments(shift);
if (!$rfc822re) {
$rfc822re = make_rfc822re();
}
# * null list items are valid according to the RFC
# * the '1' business is to aid in distinguishing failure from no results
my @r;
if ($s =~ m/^(?:$rfc822re)?(?:,(?:$rfc822re)?)*$/so &&
$s =~ m/^$rfc822_char*$/) {
while ($s =~ m/(?:^|,$rfc822_lwsp*)($rfc822re)/gos) {
push @r, $1;
}
return wantarray ? (scalar(@r), @r) : 1;
}
else {
return wantarray ? () : 0;
}
}
+81
View File
@@ -0,0 +1,81 @@
#!/bin/bash
# Translate the bits making up a GFP mask
# (c) 2009, Mel Gorman <mel@csn.ul.ie>
# Licensed under the terms of the GNU GPL License version 2
SOURCE=
GFPMASK=none
# Helper function to report failures and exit
die() {
echo ERROR: $@
if [ "$TMPFILE" != "" ]; then
rm -f $TMPFILE
fi
exit -1
}
usage() {
echo "usage: gfp-translate [-h] [ --source DIRECTORY ] gfpmask"
exit 0
}
# Parse command-line arguements
while [ $# -gt 0 ]; do
case $1 in
--source)
SOURCE=$2
shift 2
;;
-h)
usage
;;
--help)
usage
;;
*)
GFPMASK=$1
shift
;;
esac
done
# Guess the kernel source directory if it's not set. Preference is in order of
# o current directory
# o /usr/src/linux
if [ "$SOURCE" = "" ]; then
if [ -r "/usr/src/linux/Makefile" ]; then
SOURCE=/usr/src/linux
fi
if [ -r "`pwd`/Makefile" ]; then
SOURCE=`pwd`
fi
fi
# Confirm that a source directory exists
if [ ! -r "$SOURCE/Makefile" ]; then
die "Could not locate kernel source directory or it is invalid"
fi
# Confirm that a GFP mask has been specified
if [ "$GFPMASK" = "none" ]; then
usage
fi
# Extract GFP flags from the kernel source
TMPFILE=`mktemp -t gfptranslate-XXXXXX` || exit 1
grep "^#define __GFP" $SOURCE/include/linux/gfp.h | sed -e 's/(__force gfp_t)//' | sed -e 's/u)/)/' | grep -v GFP_BITS | sed -e 's/)\//) \//' > $TMPFILE
# Parse the flags
IFS="
"
echo Source: $SOURCE
echo Parsing: $GFPMASK
for LINE in `cat $TMPFILE`; do
MASK=`echo $LINE | awk '{print $3}'`
if [ $(($GFPMASK&$MASK)) -ne 0 ]; then
echo $LINE
fi
done
rm -f $TMPFILE
exit 0
+9 -9
View File
@@ -237,22 +237,22 @@ static void write_header(void)
fprintf(out, " * Linux logo %s\n", logoname);
fputs(" */\n\n", out);
fputs("#include <linux/linux_logo.h>\n\n", out);
fprintf(out, "static unsigned char %s_data[] __initdata = {\n",
fprintf(out, "static const unsigned char %s_data[] __initconst = {\n",
logoname);
}
static void write_footer(void)
{
fputs("\n};\n\n", out);
fprintf(out, "struct linux_logo %s __initdata = {\n", logoname);
fprintf(out, " .type\t= %s,\n", logo_types[logo_type]);
fprintf(out, " .width\t= %d,\n", logo_width);
fprintf(out, " .height\t= %d,\n", logo_height);
fprintf(out, "const struct linux_logo %s __initconst = {\n", logoname);
fprintf(out, "\t.type\t\t= %s,\n", logo_types[logo_type]);
fprintf(out, "\t.width\t\t= %d,\n", logo_width);
fprintf(out, "\t.height\t\t= %d,\n", logo_height);
if (logo_type == LINUX_LOGO_CLUT224) {
fprintf(out, " .clutsize\t= %d,\n", logo_clutsize);
fprintf(out, " .clut\t= %s_clut,\n", logoname);
fprintf(out, "\t.clutsize\t= %d,\n", logo_clutsize);
fprintf(out, "\t.clut\t\t= %s_clut,\n", logoname);
}
fprintf(out, " .data\t= %s_data\n", logoname);
fprintf(out, "\t.data\t\t= %s_data\n", logoname);
fputs("};\n\n", out);
/* close logo file */
@@ -374,7 +374,7 @@ static void write_logo_clut224(void)
fputs("\n};\n\n", out);
/* write logo clut */
fprintf(out, "static unsigned char %s_clut[] __initdata = {\n",
fprintf(out, "static const unsigned char %s_clut[] __initconst = {\n",
logoname);
write_hex_cnt = 0;
for (i = 0; i < logo_clutsize; i++) {