diff options
Diffstat (limited to 'drivers/ata/libata-core.c')
-rw-r--r-- | drivers/ata/libata-core.c | 36 |
1 files changed, 20 insertions, 16 deletions
diff --git a/drivers/ata/libata-core.c b/drivers/ata/libata-core.c index 11c9aea4f4f..e0bda9ff89c 100644 --- a/drivers/ata/libata-core.c +++ b/drivers/ata/libata-core.c | |||
@@ -4125,6 +4125,8 @@ static const struct ata_blacklist_entry ata_device_blacklist [] = { | |||
4125 | * device and controller are SATA. | 4125 | * device and controller are SATA. |
4126 | */ | 4126 | */ |
4127 | { "PIONEER DVD-RW DVRTD08", NULL, ATA_HORKAGE_NOSETXFER }, | 4127 | { "PIONEER DVD-RW DVRTD08", NULL, ATA_HORKAGE_NOSETXFER }, |
4128 | { "PIONEER DVD-RW DVRTD08A", NULL, ATA_HORKAGE_NOSETXFER }, | ||
4129 | { "PIONEER DVD-RW DVR-215", NULL, ATA_HORKAGE_NOSETXFER }, | ||
4128 | { "PIONEER DVD-RW DVR-212D", NULL, ATA_HORKAGE_NOSETXFER }, | 4130 | { "PIONEER DVD-RW DVR-212D", NULL, ATA_HORKAGE_NOSETXFER }, |
4129 | { "PIONEER DVD-RW DVR-216D", NULL, ATA_HORKAGE_NOSETXFER }, | 4131 | { "PIONEER DVD-RW DVR-216D", NULL, ATA_HORKAGE_NOSETXFER }, |
4130 | 4132 | ||
@@ -5934,29 +5936,31 @@ void ata_host_init(struct ata_host *host, struct device *dev, | |||
5934 | host->ops = ops; | 5936 | host->ops = ops; |
5935 | } | 5937 | } |
5936 | 5938 | ||
5937 | int ata_port_probe(struct ata_port *ap) | 5939 | void __ata_port_probe(struct ata_port *ap) |
5938 | { | 5940 | { |
5939 | int rc = 0; | 5941 | struct ata_eh_info *ehi = &ap->link.eh_info; |
5942 | unsigned long flags; | ||
5940 | 5943 | ||
5941 | /* probe */ | 5944 | /* kick EH for boot probing */ |
5942 | if (ap->ops->error_handler) { | 5945 | spin_lock_irqsave(ap->lock, flags); |
5943 | struct ata_eh_info *ehi = &ap->link.eh_info; | ||
5944 | unsigned long flags; | ||
5945 | 5946 | ||
5946 | /* kick EH for boot probing */ | 5947 | ehi->probe_mask |= ATA_ALL_DEVICES; |
5947 | spin_lock_irqsave(ap->lock, flags); | 5948 | ehi->action |= ATA_EH_RESET; |
5949 | ehi->flags |= ATA_EHI_NO_AUTOPSY | ATA_EHI_QUIET; | ||
5948 | 5950 | ||
5949 | ehi->probe_mask |= ATA_ALL_DEVICES; | 5951 | ap->pflags &= ~ATA_PFLAG_INITIALIZING; |
5950 | ehi->action |= ATA_EH_RESET; | 5952 | ap->pflags |= ATA_PFLAG_LOADING; |
5951 | ehi->flags |= ATA_EHI_NO_AUTOPSY | ATA_EHI_QUIET; | 5953 | ata_port_schedule_eh(ap); |
5952 | 5954 | ||
5953 | ap->pflags &= ~ATA_PFLAG_INITIALIZING; | 5955 | spin_unlock_irqrestore(ap->lock, flags); |
5954 | ap->pflags |= ATA_PFLAG_LOADING; | 5956 | } |
5955 | ata_port_schedule_eh(ap); | ||
5956 | 5957 | ||
5957 | spin_unlock_irqrestore(ap->lock, flags); | 5958 | int ata_port_probe(struct ata_port *ap) |
5959 | { | ||
5960 | int rc = 0; | ||
5958 | 5961 | ||
5959 | /* wait for EH to finish */ | 5962 | if (ap->ops->error_handler) { |
5963 | __ata_port_probe(ap); | ||
5960 | ata_port_wait_eh(ap); | 5964 | ata_port_wait_eh(ap); |
5961 | } else { | 5965 | } else { |
5962 | DPRINTK("ata%u: bus probe begin\n", ap->print_id); | 5966 | DPRINTK("ata%u: bus probe begin\n", ap->print_id); |