diff options
| -rw-r--r-- | drivers/ata/ahci.c | 3 | ||||
| -rw-r--r-- | drivers/ata/libata-core.c | 9 | ||||
| -rw-r--r-- | include/linux/libata.h | 1 |
3 files changed, 13 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) | |||
| 2660 | host->iomap = pcim_iomap_table(pdev); | 2660 | host->iomap = pcim_iomap_table(pdev); |
| 2661 | host->private_data = hpriv; | 2661 | host->private_data = hpriv; |
| 2662 | 2662 | ||
| 2663 | if (!(hpriv->cap & HOST_CAP_SSS)) | ||
| 2664 | host->flags |= ATA_HOST_PARALLEL_SCAN; | ||
| 2665 | |||
| 2663 | if (pi.flags & ATA_FLAG_EM) | 2666 | if (pi.flags & ATA_FLAG_EM) |
| 2664 | ahci_reset_em(host); | 2667 | ahci_reset_em(host); |
| 2665 | 2668 | ||
diff --git a/drivers/ata/libata-core.c b/drivers/ata/libata-core.c index c507a9ac78f4..f810078fafcc 100644 --- a/drivers/ata/libata-core.c +++ b/drivers/ata/libata-core.c | |||
| @@ -5920,6 +5920,15 @@ static void async_port_probe(void *data, async_cookie_t cookie) | |||
| 5920 | { | 5920 | { |
| 5921 | int rc; | 5921 | int rc; |
| 5922 | struct ata_port *ap = data; | 5922 | struct ata_port *ap = data; |
| 5923 | |||
| 5924 | /* | ||
| 5925 | * If we're not allowed to scan this host in parallel, | ||
| 5926 | * we need to wait until all previous scans have completed | ||
| 5927 | * before going further. | ||
| 5928 | */ | ||
| 5929 | if (!(ap->host->flags & ATA_HOST_PARALLEL_SCAN)) | ||
| 5930 | async_synchronize_cookie(cookie); | ||
| 5931 | |||
| 5923 | /* probe */ | 5932 | /* probe */ |
| 5924 | if (ap->ops->error_handler) { | 5933 | if (ap->ops->error_handler) { |
| 5925 | struct ata_eh_info *ehi = &ap->link.eh_info; | 5934 | struct ata_eh_info *ehi = &ap->link.eh_info; |
diff --git a/include/linux/libata.h b/include/linux/libata.h index 4f7c8fb4d3fe..b6b8a7f3ec66 100644 --- a/include/linux/libata.h +++ b/include/linux/libata.h | |||
| @@ -239,6 +239,7 @@ enum { | |||
| 239 | /* host set flags */ | 239 | /* host set flags */ |
| 240 | ATA_HOST_SIMPLEX = (1 << 0), /* Host is simplex, one DMA channel per host only */ | 240 | ATA_HOST_SIMPLEX = (1 << 0), /* Host is simplex, one DMA channel per host only */ |
| 241 | ATA_HOST_STARTED = (1 << 1), /* Host started */ | 241 | ATA_HOST_STARTED = (1 << 1), /* Host started */ |
| 242 | ATA_HOST_PARALLEL_SCAN = (1 << 2), /* Ports on this host can be scanned in parallel */ | ||
| 242 | 243 | ||
| 243 | /* bits 24:31 of host->flags are reserved for LLD specific flags */ | 244 | /* bits 24:31 of host->flags are reserved for LLD specific flags */ |
| 244 | 245 | ||
