]> err.no Git - linux-2.6/blobdiff - drivers/scsi/libata-bmdma.c
[SCSI] aacraid: remove x86_64 IOMMU dependent code
[linux-2.6] / drivers / scsi / libata-bmdma.c
index 4bc05371737ccfc40cc7f39c49c91f63585fbaf8..004e1a0d8b711df18570688eb9f861ae087bac76 100644 (file)
@@ -715,7 +715,6 @@ void ata_bmdma_drive_eh(struct ata_port *ap, ata_prereset_fn_t prereset,
                        ata_reset_fn_t softreset, ata_reset_fn_t hardreset,
                        ata_postreset_fn_t postreset)
 {
-       struct ata_host_set *host_set = ap->host_set;
        struct ata_eh_context *ehc = &ap->eh_context;
        struct ata_queued_cmd *qc;
        unsigned long flags;
@@ -726,7 +725,7 @@ void ata_bmdma_drive_eh(struct ata_port *ap, ata_prereset_fn_t prereset,
                qc = NULL;
 
        /* reset PIO HSM and stop DMA engine */
-       spin_lock_irqsave(&host_set->lock, flags);
+       spin_lock_irqsave(ap->lock, flags);
 
        ap->hsm_task_state = HSM_ST_IDLE;
 
@@ -755,7 +754,7 @@ void ata_bmdma_drive_eh(struct ata_port *ap, ata_prereset_fn_t prereset,
        ata_chk_status(ap);
        ap->ops->irq_clear(ap);
 
-       spin_unlock_irqrestore(&host_set->lock, flags);
+       spin_unlock_irqrestore(ap->lock, flags);
 
        if (thaw)
                ata_eh_thaw_port(ap);
@@ -1076,10 +1075,21 @@ int ata_pci_init_one (struct pci_dev *pdev, struct ata_port_info **port_info,
 
        /* FIXME: check ata_device_add return */
        if (legacy_mode) {
-               if (legacy_mode & (1 << 0))
+               struct device *dev = &pdev->dev;
+               struct ata_host_set *host_set = NULL;
+
+               if (legacy_mode & (1 << 0)) {
                        ata_device_add(probe_ent);
-               if (legacy_mode & (1 << 1))
+                       host_set = dev_get_drvdata(dev);
+               }
+
+               if (legacy_mode & (1 << 1)) {
                        ata_device_add(probe_ent2);
+                       if (host_set) {
+                               host_set->next = dev_get_drvdata(dev);
+                               dev_set_drvdata(dev, host_set);
+                       }
+               }
        } else
                ata_device_add(probe_ent);