diff options
author | Ingo Molnar <mingo@elte.hu> | 2009-01-12 11:22:30 +0100 |
---|---|---|
committer | Ingo Molnar <mingo@elte.hu> | 2009-01-12 11:22:30 +0100 |
commit | 7cbdadf7b6b18d85204921de2639de230809e564 (patch) | |
tree | 729622159a65cc229d65a0db4bf167ffd5c21e60 /drivers | |
parent | 52811d8c9beb67da6bc4b770de3c4134376788a1 (diff) | |
parent | c59765042f53a79a7a65585042ff463b69cb248c (diff) | |
download | linux-7cbdadf7b6b18d85204921de2639de230809e564.tar.gz linux-7cbdadf7b6b18d85204921de2639de230809e564.tar.bz2 linux-7cbdadf7b6b18d85204921de2639de230809e564.zip |
Merge commit 'v2.6.29-rc1' into x86/cleanups
Diffstat (limited to 'drivers')
-rw-r--r-- | drivers/ata/ahci.c | 3 | ||||
-rw-r--r-- | drivers/ata/libata-core.c | 11 |
2 files changed, 14 insertions, 0 deletions
diff --git a/drivers/ata/ahci.c b/drivers/ata/ahci.c index 7f701cbe14ab..96039671e3b9 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 c507a9ac78f4..71218d76d75e 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; |