]> err.no Git - linux-2.6/commitdiff
[PATCH] libata-eh: Remove layering violation and duplication when handling absent...
authorAlan Cox <alan@lxorguk.ukuu.org.uk>
Tue, 26 Sep 2006 16:53:38 +0000 (17:53 +0100)
committerJeff Garzik <jeff@garzik.org>
Tue, 26 Sep 2006 17:34:27 +0000 (13:34 -0400)
This removes the layering violation where drivers have to fiddle
directly with EH flags. Instead we now recognize -ENOENT means "no port"
and do the handling in the core code.

This also removes an instance of a call to disable the port, and an
identical printk from each driver doing this. Even better - future rule
changes will be in one place only.

Signed-off-by: Alan Cox <alan@redhat.com>
Signed-off-by: Jeff Garzik <jeff@garzik.org>
17 files changed:
drivers/ata/ata_piix.c
drivers/ata/libata-eh.c
drivers/ata/pata_amd.c
drivers/ata/pata_artop.c
drivers/ata/pata_atiixp.c
drivers/ata/pata_efar.c
drivers/ata/pata_jmicron.c
drivers/ata/pata_mpiix.c
drivers/ata/pata_ns87410.c
drivers/ata/pata_oldpiix.c
drivers/ata/pata_opti.c
drivers/ata/pata_optidma.c
drivers/ata/pata_pdc2027x.c
drivers/ata/pata_sis.c
drivers/ata/pata_sl82c105.c
drivers/ata/pata_triflex.c
drivers/ata/pata_via.c

index ffa111eea9daf0f619e43b09bbac691205066114..5719704eb0ee5a6d5699399cf2edb3b12f174f18 100644 (file)
@@ -643,11 +643,9 @@ static int piix_pata_prereset(struct ata_port *ap)
 {
        struct pci_dev *pdev = to_pci_dev(ap->host->dev);
 
-       if (!pci_test_config_bits(pdev, &piix_enable_bits[ap->port_no])) {
-               ata_port_printk(ap, KERN_INFO, "port disabled. ignoring.\n");
-               ap->eh_context.i.action &= ~ATA_EH_RESET_MASK;
-               return 0;
-       }
+       if (!pci_test_config_bits(pdev, &piix_enable_bits[ap->port_no]))
+               return -ENOENT;
+               
        ap->cbl = ATA_CBL_PATA40;
        return ata_std_prereset(ap);
 }
index 3fa80f09f2ae8edf283b36e4553a7c9b119ea1e8..02b2b2787d9b85a33a420fc77b5dc18aac7e29ad 100644 (file)
@@ -1515,7 +1515,11 @@ static int ata_eh_reset(struct ata_port *ap, int classify,
        if (prereset) {
                rc = prereset(ap);
                if (rc) {
-                       ata_port_printk(ap, KERN_ERR,
+                       if (rc == -ENOENT) {
+                               ata_port_printk(ap, KERN_DEBUG, "port disabled. ignoring.\n");
+                               ap->eh_context.i.action &= ~ATA_EH_RESET_MASK;
+                       } else
+                               ata_port_printk(ap, KERN_ERR,
                                        "prereset failed (errno=%d)\n", rc);
                        return rc;
                }
index 3293cf9a7eb53e104c6d433a34b5ce5b7b2c795f..793a5e1cb4cb71120df8853bf40888d32d2ff0c9 100644 (file)
@@ -25,7 +25,7 @@
 #include <linux/libata.h>
 
 #define DRV_NAME "pata_amd"
-#define DRV_VERSION "0.2.3"
+#define DRV_VERSION "0.2.4"
 
 /**
  *     timing_setup            -       shared timing computation and load
@@ -137,11 +137,8 @@ static int amd_pre_reset(struct ata_port *ap)
        struct pci_dev *pdev = to_pci_dev(ap->host->dev);
        u8 ata66;
 
-       if (!pci_test_config_bits(pdev, &amd_enable_bits[ap->port_no])) {
-               ata_port_disable(ap);
-               printk(KERN_INFO "ata%u: port disabled. ignoring.\n", ap->id);
-               return 0;
-       }
+       if (!pci_test_config_bits(pdev, &amd_enable_bits[ap->port_no]))
+               return -ENOENT;
 
        pci_read_config_byte(pdev, 0x42, &ata66);
        if (ata66 & bitmask[ap->port_no])
@@ -167,11 +164,9 @@ static int amd_early_pre_reset(struct ata_port *ap)
                { 0x40, 1, 0x01, 0x01 }
        };
 
-       if (!pci_test_config_bits(pdev, &amd_enable_bits[ap->port_no])) {
-               ata_port_disable(ap);
-               printk(KERN_INFO "ata%u: port disabled. ignoring.\n", ap->id);
-               return 0;
-       }
+       if (!pci_test_config_bits(pdev, &amd_enable_bits[ap->port_no]))
+               return -ENOENT;
+
        /* No host side cable detection */
        ap->cbl = ATA_CBL_PATA80;
        return ata_std_prereset(ap);
@@ -262,12 +257,8 @@ static int nv_pre_reset(struct ata_port *ap) {
        u8 ata66;
        u16 udma;
 
-       if (!pci_test_config_bits(pdev, &nv_enable_bits[ap->port_no])) {
-               ata_port_disable(ap);
-               printk(KERN_INFO "ata%u: port disabled. ignoring.\n", ap->id);
-               return 0;
-       }
-
+       if (!pci_test_config_bits(pdev, &nv_enable_bits[ap->port_no]))
+               return -ENOENT;
 
        pci_read_config_byte(pdev, 0x52, &ata66);
        if (ata66 & bitmask[ap->port_no])
index d6ef3bf1bac7e07b941b4f2dc75bec015d888312..0f3b49176dc198b5b154d0199398a3fe56c82f4d 100644 (file)
@@ -28,7 +28,7 @@
 #include <linux/ata.h>
 
 #define DRV_NAME       "pata_artop"
-#define DRV_VERSION    "0.4.1"
+#define DRV_VERSION    "0.4.2"
 
 /*
  *     The ARTOP has 33 Mhz and "over clocked" timing tables. Until we
@@ -47,11 +47,9 @@ static int artop6210_pre_reset(struct ata_port *ap)
                { 0x4AU, 1U, 0x04UL, 0x04UL },  /* port 1 */
        };
 
-       if (!pci_test_config_bits(pdev, &artop_enable_bits[ap->port_no])) {
-               ata_port_disable(ap);
-               printk(KERN_INFO "ata%u: port disabled. ignoring.\n", ap->id);
-               return 0;
-       }
+       if (!pci_test_config_bits(pdev, &artop_enable_bits[ap->port_no]))
+               return -ENOENT;
+
        ap->cbl = ATA_CBL_PATA40;
        return ata_std_prereset(ap);
 }
@@ -90,11 +88,9 @@ static int artop6260_pre_reset(struct ata_port *ap)
        u8 tmp;
 
        /* Odd numbered device ids are the units with enable bits (the -R cards) */
-       if (pdev->device % 1 && !pci_test_config_bits(pdev, &artop_enable_bits[ap->port_no])) {
-               ata_port_disable(ap);
-               printk(KERN_INFO "ata%u: port disabled. ignoring.\n", ap->id);
-               return 0;
-       }
+       if (pdev->device % 1 && !pci_test_config_bits(pdev, &artop_enable_bits[ap->port_no]))
+               return -ENOENT;
+
        pci_read_config_byte(pdev, 0x49, &tmp);
        if (tmp & (1 >> ap->port_no))
                ap->cbl = ATA_CBL_PATA40;
index 3f78a1e54a75857b036771f9705f0558ce9ba38a..060d019fd30ba8092ef3780f5d2c6dbb61454147 100644 (file)
@@ -22,7 +22,7 @@
 #include <linux/libata.h>
 
 #define DRV_NAME "pata_atiixp"
-#define DRV_VERSION "0.4.2"
+#define DRV_VERSION "0.4.3"
 
 enum {
        ATIIXP_IDE_PIO_TIMING   = 0x40,
@@ -41,11 +41,9 @@ static int atiixp_pre_reset(struct ata_port *ap)
                { 0x48, 1, 0x08, 0x00 }
        };
 
-       if (!pci_test_config_bits(pdev, &atiixp_enable_bits[ap->port_no])) {
-               ata_port_disable(ap);
-               printk(KERN_INFO "ata%u: port disabled. ignoring.\n", ap->id);
-               return 0;
-       }
+       if (!pci_test_config_bits(pdev, &atiixp_enable_bits[ap->port_no]))
+               return -ENOENT;
+
        ap->cbl = ATA_CBL_PATA80;
        return ata_std_prereset(ap);
 }
index c30bc181304f4ac2f5b5366d90a22704a5110ecb..92813827faa724d750d4328f2d5892d345fb4a9f 100644 (file)
@@ -22,7 +22,7 @@
 #include <linux/ata.h>
 
 #define DRV_NAME       "pata_efar"
-#define DRV_VERSION    "0.4.1"
+#define DRV_VERSION    "0.4.2"
 
 /**
  *     efar_pre_reset  -       check for 40/80 pin
@@ -42,11 +42,9 @@ static int efar_pre_reset(struct ata_port *ap)
        struct pci_dev *pdev = to_pci_dev(ap->host->dev);
        u8 tmp;
 
-       if (!pci_test_config_bits(pdev, &efar_enable_bits[ap->port_no])) {
-               ata_port_disable(ap);
-               printk(KERN_INFO "ata%u: port disabled. ignoring.\n", ap->id);
-               return 0;
-       }
+       if (!pci_test_config_bits(pdev, &efar_enable_bits[ap->port_no]))
+               return -ENOENT;
+
        pci_read_config_byte(pdev, 0x47, &tmp);
        if (tmp & (2 >> ap->port_no))
                ap->cbl = ATA_CBL_PATA40;
index 6832a643a9eb770ae88d12c6f89565d918ad601e..3bdb6f2fa5ba66e72f9a09e2e5d12aeacf5a2e7d 100644 (file)
@@ -51,7 +51,7 @@ static int jmicron_pre_reset(struct ata_port *ap)
        /* Check if our port is enabled */
        pci_read_config_dword(pdev, 0x40, &control);
        if ((control & port_mask) == 0)
-               return 0;
+               return -ENOENT;
 
        /* There are two basic mappings. One has the two SATA ports merged
           as master/slave and the secondary as PATA, the other has only the
index 1958c4ed09a8d62acf9808e84dbee694a6802d1d..3c65393c1f01abfa9e7ab93e81c18323e1f6eb63 100644 (file)
@@ -18,7 +18,7 @@
  * The driver conciously keeps this logic internally to avoid pushing quirky
  * PATA history into the clean libata layer.
  *
- * Thinkpad specific note: If you boot an MPIIX using thinkpad with a PCMCIA
+ * Thinkpad specific note: If you boot an MPIIX using thinkpad with a PCMCIA
  * hard disk present this driver will not detect it. This is not a bug. In this
  * configuration the secondary port of the MPIIX is disabled and the addresses
  * are decoded by the PCMCIA bridge and therefore are for a generic IDE driver
@@ -35,7 +35,7 @@
 #include <linux/libata.h>
 
 #define DRV_NAME "pata_mpiix"
-#define DRV_VERSION "0.7.1"
+#define DRV_VERSION "0.7.2"
 
 enum {
        IDETIM = 0x6C,          /* IDE control register */
@@ -54,11 +54,8 @@ static int mpiix_pre_reset(struct ata_port *ap)
                { 0x6F, 1, 0x80, 0x80 }
        };
 
-       if (!pci_test_config_bits(pdev, &mpiix_enable_bits[ap->port_no])) {
-               ata_port_disable(ap);
-               printk(KERN_INFO "ata%u: port disabled. ignoring.\n", ap->id);
-               return 0;
-       }
+       if (!pci_test_config_bits(pdev, &mpiix_enable_bits[ap->port_no]))
+               return -ENOENT;
        ap->cbl = ATA_CBL_PATA40;
        return ata_std_prereset(ap);
 }
index 93d6646d295414ae72601fa83b5ed4e18ae517bd..f529fe4c29b79f1875b4b72ccac2a3224bc93808 100644 (file)
@@ -45,11 +45,8 @@ static int ns87410_pre_reset(struct ata_port *ap)
                { 0x47, 1, 0x08, 0x08 }
        };
 
-       if (!pci_test_config_bits(pdev, &ns87410_enable_bits[ap->port_no])) {
-               ata_port_disable(ap);
-               printk(KERN_INFO "ata%u: port disabled. ignoring.\n", ap->id);
-               return 0;
-       }
+       if (!pci_test_config_bits(pdev, &ns87410_enable_bits[ap->port_no]))
+               return -ENOENT;
        ap->cbl = ATA_CBL_PATA40;
        return ata_std_prereset(ap);
 }
index 04c618a2664b9be5788cf09f3629c0a8613ab159..31a285ca88dceb0e0292a17859b54ed279647424 100644 (file)
@@ -25,7 +25,7 @@
 #include <linux/ata.h>
 
 #define DRV_NAME       "pata_oldpiix"
-#define DRV_VERSION    "0.5.1"
+#define DRV_VERSION    "0.5.2"
 
 /**
  *     oldpiix_pre_reset               -       probe begin
@@ -42,11 +42,8 @@ static int oldpiix_pre_reset(struct ata_port *ap)
                { 0x43U, 1U, 0x80UL, 0x80UL },  /* port 1 */
        };
 
-       if (!pci_test_config_bits(pdev, &oldpiix_enable_bits[ap->port_no])) {
-               ata_port_disable(ap);
-               printk(KERN_INFO "ata%u: port disabled. ignoring.\n", ap->id);
-               return 0;
-       }
+       if (!pci_test_config_bits(pdev, &oldpiix_enable_bits[ap->port_no]))
+               return -ENOENT;
        ap->cbl = ATA_CBL_PATA40;
        return ata_std_prereset(ap);
 }
index c3d01325e0e202a3a26a977c0079229770a02062..136d7a65feb3477262af4feabb6cb597fa490a62 100644 (file)
@@ -34,7 +34,7 @@
 #include <linux/libata.h>
 
 #define DRV_NAME "pata_opti"
-#define DRV_VERSION "0.2.4"
+#define DRV_VERSION "0.2.5"
 
 enum {
        READ_REG        = 0,    /* index of Read cycle timing register */
@@ -59,11 +59,9 @@ static int opti_pre_reset(struct ata_port *ap)
                { 0x40, 1, 0x08, 0x00 }
        };
 
-       if (!pci_test_config_bits(pdev, &opti_enable_bits[ap->port_no])) {
-               ata_port_disable(ap);
-               printk(KERN_INFO "ata%u: port disabled. ignoring.\n", ap->id);
-               return 0;
-       }
+       if (!pci_test_config_bits(pdev, &opti_enable_bits[ap->port_no]))
+               return -ENOENT;
+
        ap->cbl = ATA_CBL_PATA40;
        return ata_std_prereset(ap);
 }
index 177a455f4251a96624515d6884b9c3d81677c036..18ec8e72bbb67ded61652487490e65fc2629452d 100644 (file)
@@ -33,7 +33,7 @@
 #include <linux/libata.h>
 
 #define DRV_NAME "pata_optidma"
-#define DRV_VERSION "0.2.1"
+#define DRV_VERSION "0.2.2"
 
 enum {
        READ_REG        = 0,    /* index of Read cycle timing register */
@@ -59,11 +59,9 @@ static int optidma_pre_reset(struct ata_port *ap)
                0x40, 1, 0x08, 0x00
        };
 
-       if (ap->port_no && !pci_test_config_bits(pdev, &optidma_enable_bits)) {
-               ata_port_disable(ap);
-               printk(KERN_INFO "ata%u: port disabled. ignoring.\n", ap->id);
-               return 0;
-       }
+       if (ap->port_no && !pci_test_config_bits(pdev, &optidma_enable_bits))
+               return -ENOENT;
+
        ap->cbl = ATA_CBL_PATA40;
        return ata_std_prereset(ap);
 }
index 31ab9c886209e8e870a340a27fc2522764f752c9..bd4ed6734edc504ca094dbcfb5d2ee6609182662 100644 (file)
@@ -36,7 +36,7 @@
 #include <asm/io.h>
 
 #define DRV_NAME       "pata_pdc2027x"
-#define DRV_VERSION    "0.74-ac3"
+#define DRV_VERSION    "0.74-ac5"
 #undef PDC_DEBUG
 
 #ifdef PDC_DEBUG
@@ -311,10 +311,8 @@ static inline int pdc2027x_port_enabled(struct ata_port *ap)
 static int pdc2027x_prereset(struct ata_port *ap)
 {
        /* Check whether port enabled */
-       if (!pdc2027x_port_enabled(ap)) {
-               printk(KERN_INFO "ata%u: port disabled. ignoring.\n", ap->id);
-               return 0;
-       }
+       if (!pdc2027x_port_enabled(ap))
+               return -ENOENT;
        pdc2027x_cbl_detect(ap);
        return ata_std_prereset(ap);
 }
index 2e555168b431cdd59312db1edc63594bf0183269..fce74d9b2e67f8e1db3c5ed7a8556cd312020121 100644 (file)
@@ -34,7 +34,7 @@
 #include <linux/ata.h>
 
 #define DRV_NAME       "pata_sis"
-#define DRV_VERSION    "0.4.3"
+#define DRV_VERSION    "0.4.4"
 
 struct sis_chipset {
        u16 device;                     /* PCI host ID */
@@ -74,11 +74,9 @@ static int sis_133_pre_reset(struct ata_port *ap)
        struct pci_dev *pdev = to_pci_dev(ap->host->dev);
        u16 tmp;
 
-       if (!pci_test_config_bits(pdev, &sis_enable_bits[ap->port_no])) {
-               ata_port_disable(ap);
-               printk(KERN_INFO "ata%u: port disabled. ignoring.\n", ap->id);
-               return 0;
-       }
+       if (!pci_test_config_bits(pdev, &sis_enable_bits[ap->port_no]))
+               return -ENOENT;
+
        /* The top bit of this register is the cable detect bit */
        pci_read_config_word(pdev, 0x50 + 2 * ap->port_no, &tmp);
        if (tmp & 0x8000)
index f8499786917ae6cd53f60cd609dbc805d9e806a1..b3bc607f029364207ca6f9678deb994960374d0f 100644 (file)
@@ -19,7 +19,7 @@
 #include <linux/libata.h>
 
 #define DRV_NAME "pata_sl82c105"
-#define DRV_VERSION "0.2.2"
+#define DRV_VERSION "0.2.3"
 
 enum {
        /*
@@ -49,11 +49,8 @@ static int sl82c105_pre_reset(struct ata_port *ap)
        };
        struct pci_dev *pdev = to_pci_dev(ap->host->dev);
 
-       if (ap->port_no && !pci_test_config_bits(pdev, &sl82c105_enable_bits[ap->port_no])) {
-               ata_port_disable(ap);
-               dev_printk(KERN_INFO, &pdev->dev, "port disabled. ignoring.\n");
-               return 0;
-       }
+       if (ap->port_no && !pci_test_config_bits(pdev, &sl82c105_enable_bits[ap->port_no]))
+               return -ENOENT;
        ap->cbl = ATA_CBL_PATA40;
        return ata_std_prereset(ap);
 }
index 36f788728f3f8ab7e4ffb054ffea76fb89f82a55..95adf92901fcbe6c901957184ebda3f8a1f2df42 100644 (file)
 #define DRV_VERSION "0.2.5"
 
 /**
- *     triflex_probe_init              -       probe begin
+ *     triflex_prereset                -       probe begin
  *     @ap: ATA port
  *
  *     Set up cable type and use generic probe init
  */
 
-static int triflex_probe_init(struct ata_port *ap)
+static int triflex_prereset(struct ata_port *ap)
 {
        static const struct pci_bits triflex_enable_bits[] = {
                { 0x80, 1, 0x01, 0x01 },
@@ -61,11 +61,8 @@ static int triflex_probe_init(struct ata_port *ap)
 
        struct pci_dev *pdev = to_pci_dev(ap->host->dev);
 
-       if (!pci_test_config_bits(pdev, &triflex_enable_bits[ap->port_no])) {
-               ata_port_disable(ap);
-               printk(KERN_INFO "ata%u: port disabled. ignoring.\n", ap->id);
-               return 0;
-       }
+       if (!pci_test_config_bits(pdev, &triflex_enable_bits[ap->port_no]))
+               return -ENOENT;
        ap->cbl = ATA_CBL_PATA40;
        return ata_std_prereset(ap);
 }
@@ -74,7 +71,7 @@ static int triflex_probe_init(struct ata_port *ap)
 
 static void triflex_error_handler(struct ata_port *ap)
 {
-       ata_bmdma_drive_eh(ap, triflex_probe_init, ata_std_softreset, NULL, ata_std_postreset);
+       ata_bmdma_drive_eh(ap, triflex_prereset, ata_std_softreset, NULL, ata_std_postreset);
 }
 
 /**
index 1b2ff133b163302992b33ef967478fdc68673110..0e8b1303acd6e94c29be812f4262af1a62f74242 100644 (file)
@@ -60,7 +60,7 @@
 #include <linux/libata.h>
 
 #define DRV_NAME "pata_via"
-#define DRV_VERSION "0.1.13"
+#define DRV_VERSION "0.1.14"
 
 /*
  *     The following comes directly from Vojtech Pavlik's ide/pci/via82cxxx
@@ -155,11 +155,8 @@ static int via_pre_reset(struct ata_port *ap)
 
                struct pci_dev *pdev = to_pci_dev(ap->host->dev);
 
-               if (!pci_test_config_bits(pdev, &via_enable_bits[ap->port_no])) {
-                       ata_port_disable(ap);
-                       printk(KERN_INFO "ata%u: port disabled. ignoring.\n", ap->id);
-                       return 0;
-               }
+               if (!pci_test_config_bits(pdev, &via_enable_bits[ap->port_no]))
+                       return -ENOENT;
        }
 
        if ((config->flags & VIA_UDMA) >= VIA_UDMA_66)