diff options
author | Ingo Molnar <mingo@elte.hu> | 2009-01-11 13:03:08 +0100 |
---|---|---|
committer | Ingo Molnar <mingo@elte.hu> | 2009-01-11 13:03:08 +0100 |
commit | df051434f1dfc93ec2e1c1d186bb87cb3db9dcdf (patch) | |
tree | 801d70ebcbabf9f4febfa0d4064227a0feb07c21 | |
parent | 805194c35b91999b139e4d6b6145f4f84fd4c814 (diff) | |
parent | c59765042f53a79a7a65585042ff463b69cb248c (diff) |
Merge commit 'v2.6.29-rc1' into sched/urgent
-rw-r--r-- | Makefile | 4 | ||||
-rw-r--r-- | drivers/ata/ahci.c | 3 | ||||
-rw-r--r-- | drivers/ata/libata-core.c | 11 | ||||
-rw-r--r-- | include/linux/libata.h | 1 | ||||
-rw-r--r-- | scripts/bootgraph.pl | 46 |
5 files changed, 59 insertions, 6 deletions
@@ -1,7 +1,7 @@ VERSION = 2 PATCHLEVEL = 6 -SUBLEVEL = 28 -EXTRAVERSION = +SUBLEVEL = 29 +EXTRAVERSION = -rc1 NAME = Erotic Pickled Herring # *DOCUMENTATION* diff --git a/drivers/ata/ahci.c b/drivers/ata/ahci.c index 7f701cbe14a..96039671e3b 100644 --- a/drivers/ata/ahci.c +++ b/drivers/ata/ahci.c @@ -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->private_data = hpriv; + if (!(hpriv->cap & HOST_CAP_SSS)) + host->flags |= ATA_HOST_PARALLEL_SCAN; + if (pi.flags & ATA_FLAG_EM) ahci_reset_em(host); diff --git a/drivers/ata/libata-core.c b/drivers/ata/libata-core.c index c507a9ac78f..71218d76d75 100644 --- a/drivers/ata/libata-core.c +++ b/drivers/ata/libata-core.c @@ -5920,6 +5920,17 @@ static void async_port_probe(void *data, async_cookie_t cookie) { int rc; 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 */ if (ap->ops->error_handler) { struct ata_eh_info *ehi = &ap->link.eh_info; diff --git a/include/linux/libata.h b/include/linux/libata.h index 4f7c8fb4d3f..b6b8a7f3ec6 100644 --- a/include/linux/libata.h +++ b/include/linux/libata.h @@ -239,6 +239,7 @@ enum { /* host set flags */ ATA_HOST_SIMPLEX = (1 << 0), /* Host is simplex, one DMA channel per host only */ 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 */ diff --git a/scripts/bootgraph.pl b/scripts/bootgraph.pl index 0a498e33b30..b0246307aac 100644 --- a/scripts/bootgraph.pl +++ b/scripts/bootgraph.pl @@ -41,11 +41,13 @@ use strict; my %start; my %end; +my %type; my $done = 0; my $maxtime = 0; my $firsttime = 100; my $count = 0; my %pids; +my %pidctr; while (<>) { my $line = $_; @@ -53,6 +55,7 @@ while (<>) { my $func = $2; if ($done == 0) { $start{$func} = $1; + $type{$func} = 0; if ($1 < $firsttime) { $firsttime = $1; } @@ -63,12 +66,40 @@ while (<>) { $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 ($done == 0) { $end{$2} = $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/) { $done = 1; } @@ -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[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 $threshold2 = ($maxtime - $firsttime) / 120.0; my $threshold = $threshold2/10; @@ -139,11 +172,16 @@ foreach my $key (@initcalls) { $stylecounter = 0; }; - print "<rect x=\"$s\" width=\"$w\" y=\"$y\" height=\"145\" style=\"$style\"/>\n"; - if ($duration >= $threshold2) { - print "<text transform=\"translate($s2,$y2) rotate(90)\">$key</text>\n"; + if ($type{$key} == 1) { + $y = $y + 15; + print "<rect x=\"$s\" width=\"$w\" y=\"$y\" height=\"115\" style=\"$style_wait\"/>\n"; } else { - print "<text transform=\"translate($s3,$y2) rotate(90)\" font-size=\"3pt\">$key</text>\n"; + print "<rect x=\"$s\" width=\"$w\" y=\"$y\" height=\"145\" style=\"$style\"/>\n"; + if ($duration >= $threshold2) { + print "<text transform=\"translate($s2,$y2) rotate(90)\">$key</text>\n"; + } else { + print "<text transform=\"translate($s3,$y2) rotate(90)\" font-size=\"3pt\">$key</text>\n"; + } } } } |