Commit df051434 authored by Ingo Molnar's avatar Ingo Molnar

Merge commit 'v2.6.29-rc1' into sched/urgent

parents 805194c3 c5976504
VERSION = 2 VERSION = 2
PATCHLEVEL = 6 PATCHLEVEL = 6
SUBLEVEL = 28 SUBLEVEL = 29
EXTRAVERSION = EXTRAVERSION = -rc1
NAME = Erotic Pickled Herring NAME = Erotic Pickled Herring
# *DOCUMENTATION* # *DOCUMENTATION*
......
...@@ -2660,6 +2660,9 @@ static int ahci_init_one(struct pci_dev *pdev, const struct pci_device_id *ent) ...@@ -2660,6 +2660,9 @@ static int ahci_init_one(struct pci_dev *pdev, const struct pci_device_id *ent)
host->iomap = pcim_iomap_table(pdev); host->iomap = pcim_iomap_table(pdev);
host->private_data = hpriv; host->private_data = hpriv;
if (!(hpriv->cap & HOST_CAP_SSS))
host->flags |= ATA_HOST_PARALLEL_SCAN;
if (pi.flags & ATA_FLAG_EM) if (pi.flags & ATA_FLAG_EM)
ahci_reset_em(host); ahci_reset_em(host);
......
...@@ -5920,6 +5920,17 @@ static void async_port_probe(void *data, async_cookie_t cookie) ...@@ -5920,6 +5920,17 @@ static void async_port_probe(void *data, async_cookie_t cookie)
{ {
int rc; int rc;
struct ata_port *ap = data; struct ata_port *ap = data;
/*
* If we're not allowed to scan this host in parallel,
* we need to wait until all previous scans have completed
* before going further.
* Jeff Garzik says this is only within a controller, so we
* don't need to wait for port 0, only for later ports.
*/
if (!(ap->host->flags & ATA_HOST_PARALLEL_SCAN) && ap->port_no != 0)
async_synchronize_cookie(cookie);
/* probe */ /* probe */
if (ap->ops->error_handler) { if (ap->ops->error_handler) {
struct ata_eh_info *ehi = &ap->link.eh_info; struct ata_eh_info *ehi = &ap->link.eh_info;
......
...@@ -239,6 +239,7 @@ enum { ...@@ -239,6 +239,7 @@ enum {
/* host set flags */ /* host set flags */
ATA_HOST_SIMPLEX = (1 << 0), /* Host is simplex, one DMA channel per host only */ ATA_HOST_SIMPLEX = (1 << 0), /* Host is simplex, one DMA channel per host only */
ATA_HOST_STARTED = (1 << 1), /* Host started */ ATA_HOST_STARTED = (1 << 1), /* Host started */
ATA_HOST_PARALLEL_SCAN = (1 << 2), /* Ports on this host can be scanned in parallel */
/* bits 24:31 of host->flags are reserved for LLD specific flags */ /* bits 24:31 of host->flags are reserved for LLD specific flags */
......
...@@ -41,11 +41,13 @@ use strict; ...@@ -41,11 +41,13 @@ use strict;
my %start; my %start;
my %end; my %end;
my %type;
my $done = 0; my $done = 0;
my $maxtime = 0; my $maxtime = 0;
my $firsttime = 100; my $firsttime = 100;
my $count = 0; my $count = 0;
my %pids; my %pids;
my %pidctr;
while (<>) { while (<>) {
my $line = $_; my $line = $_;
...@@ -53,6 +55,7 @@ while (<>) { ...@@ -53,6 +55,7 @@ while (<>) {
my $func = $2; my $func = $2;
if ($done == 0) { if ($done == 0) {
$start{$func} = $1; $start{$func} = $1;
$type{$func} = 0;
if ($1 < $firsttime) { if ($1 < $firsttime) {
$firsttime = $1; $firsttime = $1;
} }
...@@ -63,12 +66,40 @@ while (<>) { ...@@ -63,12 +66,40 @@ while (<>) {
$count = $count + 1; $count = $count + 1;
} }
if ($line =~ /([0-9\.]+)\] async_waiting @ ([0-9]+)/) {
my $pid = $2;
my $func;
if (!defined($pidctr{$pid})) {
$func = "wait_" . $pid . "_1";
$pidctr{$pid} = 1;
} else {
$pidctr{$pid} = $pidctr{$pid} + 1;
$func = "wait_" . $pid . "_" . $pidctr{$pid};
}
if ($done == 0) {
$start{$func} = $1;
$type{$func} = 1;
if ($1 < $firsttime) {
$firsttime = $1;
}
}
$pids{$func} = $pid;
$count = $count + 1;
}
if ($line =~ /([0-9\.]+)\] initcall ([a-zA-Z0-9\_]+)\+.*returned/) { if ($line =~ /([0-9\.]+)\] initcall ([a-zA-Z0-9\_]+)\+.*returned/) {
if ($done == 0) { if ($done == 0) {
$end{$2} = $1; $end{$2} = $1;
$maxtime = $1; $maxtime = $1;
} }
} }
if ($line =~ /([0-9\.]+)\] async_continuing @ ([0-9]+)/) {
my $pid = $2;
my $func = "wait_" . $pid . "_" . $pidctr{$pid};
$end{$func} = $1;
$maxtime = $1;
}
if ($line =~ /Write protecting the/) { if ($line =~ /Write protecting the/) {
$done = 1; $done = 1;
} }
...@@ -105,6 +136,8 @@ $styles[9] = "fill:rgb(255,255,128);fill-opacity:0.5;stroke-width:1;stroke:rgb(0 ...@@ -105,6 +136,8 @@ $styles[9] = "fill:rgb(255,255,128);fill-opacity:0.5;stroke-width:1;stroke:rgb(0
$styles[10] = "fill:rgb(255,128,255);fill-opacity:0.5;stroke-width:1;stroke:rgb(0,0,0)"; $styles[10] = "fill:rgb(255,128,255);fill-opacity:0.5;stroke-width:1;stroke:rgb(0,0,0)";
$styles[11] = "fill:rgb(128,255,255);fill-opacity:0.5;stroke-width:1;stroke:rgb(0,0,0)"; $styles[11] = "fill:rgb(128,255,255);fill-opacity:0.5;stroke-width:1;stroke:rgb(0,0,0)";
my $style_wait = "fill:rgb(128,128,128);fill-opacity:0.5;stroke-width:0;stroke:rgb(0,0,0)";
my $mult = 1950.0 / ($maxtime - $firsttime); my $mult = 1950.0 / ($maxtime - $firsttime);
my $threshold2 = ($maxtime - $firsttime) / 120.0; my $threshold2 = ($maxtime - $firsttime) / 120.0;
my $threshold = $threshold2/10; my $threshold = $threshold2/10;
...@@ -139,6 +172,10 @@ foreach my $key (@initcalls) { ...@@ -139,6 +172,10 @@ foreach my $key (@initcalls) {
$stylecounter = 0; $stylecounter = 0;
}; };
if ($type{$key} == 1) {
$y = $y + 15;
print "<rect x=\"$s\" width=\"$w\" y=\"$y\" height=\"115\" style=\"$style_wait\"/>\n";
} else {
print "<rect x=\"$s\" width=\"$w\" y=\"$y\" height=\"145\" style=\"$style\"/>\n"; print "<rect x=\"$s\" width=\"$w\" y=\"$y\" height=\"145\" style=\"$style\"/>\n";
if ($duration >= $threshold2) { if ($duration >= $threshold2) {
print "<text transform=\"translate($s2,$y2) rotate(90)\">$key</text>\n"; print "<text transform=\"translate($s2,$y2) rotate(90)\">$key</text>\n";
...@@ -146,6 +183,7 @@ foreach my $key (@initcalls) { ...@@ -146,6 +183,7 @@ foreach my $key (@initcalls) {
print "<text transform=\"translate($s3,$y2) rotate(90)\" font-size=\"3pt\">$key</text>\n"; print "<text transform=\"translate($s3,$y2) rotate(90)\" font-size=\"3pt\">$key</text>\n";
} }
} }
}
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment