aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/ata
diff options
context:
space:
mode:
authorTejun Heo <htejun@gmail.com>2007-01-20 02:00:28 -0500
committerJeff Garzik <jeff@garzik.org>2007-02-09 17:39:37 -0500
commit24dc5f33ea4b504cfbd23fa159a4cacba8e4d800 (patch)
treed76de456157f555c9a65b83f426fd805fee1e846 /drivers/ata
parentf0d36efdc624beb3d9e29b9ab9e9537bf0f25d5b (diff)
libata: update libata LLDs to use devres
Update libata LLDs to use devres. Core layer is already converted to support managed LLDs. This patch simplifies initialization and fixes many resource related bugs in init failure and detach path. For example, all converted drivers now handle ata_device_add() failure gracefully without excessive resource rollback code. As most resources are released automatically on driver detach, many drivers don't need or can do with much simpler ->{port|host}_stop(). In general, stop callbacks are need iff port or host needs to be given commands to shut it down. Note that freezing is enough in many cases and ports are automatically frozen before being detached. Signed-off-by: Tejun Heo <htejun@gmail.com> Signed-off-by: Jeff Garzik <jeff@garzik.org>
Diffstat (limited to 'drivers/ata')
-rw-r--r--drivers/ata/ahci.c125
-rw-r--r--drivers/ata/ata_generic.c2
-rw-r--r--drivers/ata/ata_piix.c19
-rw-r--r--drivers/ata/pata_ali.c8
-rw-r--r--drivers/ata/pata_amd.c12
-rw-r--r--drivers/ata/pata_artop.c4
-rw-r--r--drivers/ata/pata_atiixp.c2
-rw-r--r--drivers/ata/pata_cmd64x.c6
-rw-r--r--drivers/ata/pata_cs5520.c4
-rw-r--r--drivers/ata/pata_cs5530.c2
-rw-r--r--drivers/ata/pata_cs5535.c2
-rw-r--r--drivers/ata/pata_cypress.c2
-rw-r--r--drivers/ata/pata_efar.c2
-rw-r--r--drivers/ata/pata_hpt366.c2
-rw-r--r--drivers/ata/pata_hpt37x.c8
-rw-r--r--drivers/ata/pata_hpt3x2n.c2
-rw-r--r--drivers/ata/pata_hpt3x3.c2
-rw-r--r--drivers/ata/pata_isapnp.c4
-rw-r--r--drivers/ata/pata_it8213.c2
-rw-r--r--drivers/ata/pata_it821x.c28
-rw-r--r--drivers/ata/pata_ixp4xx_cf.c16
-rw-r--r--drivers/ata/pata_jmicron.c2
-rw-r--r--drivers/ata/pata_legacy.c51
-rw-r--r--drivers/ata/pata_marvell.c2
-rw-r--r--drivers/ata/pata_mpc52xx.c49
-rw-r--r--drivers/ata/pata_mpiix.c22
-rw-r--r--drivers/ata/pata_netcell.c2
-rw-r--r--drivers/ata/pata_ns87410.c2
-rw-r--r--drivers/ata/pata_oldpiix.c2
-rw-r--r--drivers/ata/pata_opti.c2
-rw-r--r--drivers/ata/pata_optidma.c4
-rw-r--r--drivers/ata/pata_pcmcia.c4
-rw-r--r--drivers/ata/pata_pdc2027x.c61
-rw-r--r--drivers/ata/pata_pdc202xx_old.c4
-rw-r--r--drivers/ata/pata_qdi.c6
-rw-r--r--drivers/ata/pata_radisys.c2
-rw-r--r--drivers/ata/pata_rz1000.c2
-rw-r--r--drivers/ata/pata_sc1200.c2
-rw-r--r--drivers/ata/pata_serverworks.c4
-rw-r--r--drivers/ata/pata_sil680.c2
-rw-r--r--drivers/ata/pata_sis.c10
-rw-r--r--drivers/ata/pata_sl82c105.c2
-rw-r--r--drivers/ata/pata_triflex.c2
-rw-r--r--drivers/ata/pata_via.c4
-rw-r--r--drivers/ata/pata_winbond.c4
-rw-r--r--drivers/ata/pdc_adma.c79
-rw-r--r--drivers/ata/sata_inic162x.c52
-rw-r--r--drivers/ata/sata_mv.c142
-rw-r--r--drivers/ata/sata_nv.c86
-rw-r--r--drivers/ata/sata_promise.c106
-rw-r--r--drivers/ata/sata_qstor.c90
-rw-r--r--drivers/ata/sata_sil.c47
-rw-r--r--drivers/ata/sata_sil24.c112
-rw-r--r--drivers/ata/sata_sis.c33
-rw-r--r--drivers/ata/sata_svw.c48
-rw-r--r--drivers/ata/sata_sx4.c131
-rw-r--r--drivers/ata/sata_uli.c43
-rw-r--r--drivers/ata/sata_via.c42
-rw-r--r--drivers/ata/sata_vsc.c88
59 files changed, 355 insertions, 1245 deletions
diff --git a/drivers/ata/ahci.c b/drivers/ata/ahci.c
index d72568392e6c..20ab3ffce559 100644
--- a/drivers/ata/ahci.c
+++ b/drivers/ata/ahci.c
@@ -45,7 +45,6 @@
45#include <scsi/scsi_host.h> 45#include <scsi/scsi_host.h>
46#include <scsi/scsi_cmnd.h> 46#include <scsi/scsi_cmnd.h>
47#include <linux/libata.h> 47#include <linux/libata.h>
48#include <asm/io.h>
49 48
50#define DRV_NAME "ahci" 49#define DRV_NAME "ahci"
51#define DRV_VERSION "2.0" 50#define DRV_VERSION "2.0"
@@ -166,9 +165,6 @@ enum {
166 PORT_CMD_ICC_PARTIAL = (0x2 << 28), /* Put i/f in partial state */ 165 PORT_CMD_ICC_PARTIAL = (0x2 << 28), /* Put i/f in partial state */
167 PORT_CMD_ICC_SLUMBER = (0x6 << 28), /* Put i/f in slumber state */ 166 PORT_CMD_ICC_SLUMBER = (0x6 << 28), /* Put i/f in slumber state */
168 167
169 /* hpriv->flags bits */
170 AHCI_FLAG_MSI = (1 << 0),
171
172 /* ap->flags bits */ 168 /* ap->flags bits */
173 AHCI_FLAG_NO_NCQ = (1 << 24), 169 AHCI_FLAG_NO_NCQ = (1 << 24),
174 AHCI_FLAG_IGN_IRQ_IF_ERR = (1 << 25), /* ignore IRQ_IF_ERR */ 170 AHCI_FLAG_IGN_IRQ_IF_ERR = (1 << 25), /* ignore IRQ_IF_ERR */
@@ -191,7 +187,6 @@ struct ahci_sg {
191}; 187};
192 188
193struct ahci_host_priv { 189struct ahci_host_priv {
194 unsigned long flags;
195 u32 cap; /* cache of HOST_CAP register */ 190 u32 cap; /* cache of HOST_CAP register */
196 u32 port_map; /* cache of HOST_PORTS_IMPL reg */ 191 u32 port_map; /* cache of HOST_PORTS_IMPL reg */
197}; 192};
@@ -229,7 +224,6 @@ static int ahci_port_suspend(struct ata_port *ap, pm_message_t mesg);
229static int ahci_port_resume(struct ata_port *ap); 224static int ahci_port_resume(struct ata_port *ap);
230static int ahci_pci_device_suspend(struct pci_dev *pdev, pm_message_t mesg); 225static int ahci_pci_device_suspend(struct pci_dev *pdev, pm_message_t mesg);
231static int ahci_pci_device_resume(struct pci_dev *pdev); 226static int ahci_pci_device_resume(struct pci_dev *pdev);
232static void ahci_remove_one (struct pci_dev *pdev);
233 227
234static struct scsi_host_template ahci_sht = { 228static struct scsi_host_template ahci_sht = {
235 .module = THIS_MODULE, 229 .module = THIS_MODULE,
@@ -441,9 +435,9 @@ static struct pci_driver ahci_pci_driver = {
441 .name = DRV_NAME, 435 .name = DRV_NAME,
442 .id_table = ahci_pci_tbl, 436 .id_table = ahci_pci_tbl,
443 .probe = ahci_init_one, 437 .probe = ahci_init_one,
438 .remove = ata_pci_remove_one,
444 .suspend = ahci_pci_device_suspend, 439 .suspend = ahci_pci_device_suspend,
445 .resume = ahci_pci_device_resume, 440 .resume = ahci_pci_device_resume,
446 .remove = ahci_remove_one,
447}; 441};
448 442
449 443
@@ -1426,23 +1420,18 @@ static int ahci_port_start(struct ata_port *ap)
1426 dma_addr_t mem_dma; 1420 dma_addr_t mem_dma;
1427 int rc; 1421 int rc;
1428 1422
1429 pp = kmalloc(sizeof(*pp), GFP_KERNEL); 1423 pp = devm_kzalloc(dev, sizeof(*pp), GFP_KERNEL);
1430 if (!pp) 1424 if (!pp)
1431 return -ENOMEM; 1425 return -ENOMEM;
1432 memset(pp, 0, sizeof(*pp));
1433 1426
1434 rc = ata_pad_alloc(ap, dev); 1427 rc = ata_pad_alloc(ap, dev);
1435 if (rc) { 1428 if (rc)
1436 kfree(pp);
1437 return rc; 1429 return rc;
1438 }
1439 1430
1440 mem = dma_alloc_coherent(dev, AHCI_PORT_PRIV_DMA_SZ, &mem_dma, GFP_KERNEL); 1431 mem = dmam_alloc_coherent(dev, AHCI_PORT_PRIV_DMA_SZ, &mem_dma,
1441 if (!mem) { 1432 GFP_KERNEL);
1442 ata_pad_free(ap, dev); 1433 if (!mem)
1443 kfree(pp);
1444 return -ENOMEM; 1434 return -ENOMEM;
1445 }
1446 memset(mem, 0, AHCI_PORT_PRIV_DMA_SZ); 1435 memset(mem, 0, AHCI_PORT_PRIV_DMA_SZ);
1447 1436
1448 /* 1437 /*
@@ -1484,9 +1473,7 @@ static int ahci_port_start(struct ata_port *ap)
1484 1473
1485static void ahci_port_stop(struct ata_port *ap) 1474static void ahci_port_stop(struct ata_port *ap)
1486{ 1475{
1487 struct device *dev = ap->host->dev;
1488 struct ahci_host_priv *hpriv = ap->host->private_data; 1476 struct ahci_host_priv *hpriv = ap->host->private_data;
1489 struct ahci_port_priv *pp = ap->private_data;
1490 void __iomem *mmio = ap->host->mmio_base; 1477 void __iomem *mmio = ap->host->mmio_base;
1491 void __iomem *port_mmio = ahci_port_base(mmio, ap->port_no); 1478 void __iomem *port_mmio = ahci_port_base(mmio, ap->port_no);
1492 const char *emsg = NULL; 1479 const char *emsg = NULL;
@@ -1496,12 +1483,6 @@ static void ahci_port_stop(struct ata_port *ap)
1496 rc = ahci_deinit_port(port_mmio, hpriv->cap, &emsg); 1483 rc = ahci_deinit_port(port_mmio, hpriv->cap, &emsg);
1497 if (rc) 1484 if (rc)
1498 ata_port_printk(ap, KERN_WARNING, "%s (%d)\n", emsg, rc); 1485 ata_port_printk(ap, KERN_WARNING, "%s (%d)\n", emsg, rc);
1499
1500 ap->private_data = NULL;
1501 dma_free_coherent(dev, AHCI_PORT_PRIV_DMA_SZ,
1502 pp->cmd_slot, pp->cmd_slot_dma);
1503 ata_pad_free(ap, dev);
1504 kfree(pp);
1505} 1486}
1506 1487
1507static void ahci_setup_port(struct ata_ioports *port, unsigned long base, 1488static void ahci_setup_port(struct ata_ioports *port, unsigned long base,
@@ -1669,15 +1650,15 @@ static void ahci_print_info(struct ata_probe_ent *probe_ent)
1669 ); 1650 );
1670} 1651}
1671 1652
1672static int ahci_init_one (struct pci_dev *pdev, const struct pci_device_id *ent) 1653static int ahci_init_one(struct pci_dev *pdev, const struct pci_device_id *ent)
1673{ 1654{
1674 static int printed_version; 1655 static int printed_version;
1675 struct ata_probe_ent *probe_ent = NULL; 1656 unsigned int board_idx = (unsigned int) ent->driver_data;
1657 struct device *dev = &pdev->dev;
1658 struct ata_probe_ent *probe_ent;
1676 struct ahci_host_priv *hpriv; 1659 struct ahci_host_priv *hpriv;
1677 unsigned long base; 1660 unsigned long base;
1678 void __iomem *mmio_base; 1661 void __iomem *mmio_base;
1679 unsigned int board_idx = (unsigned int) ent->driver_data;
1680 int have_msi, pci_dev_busy = 0;
1681 int rc; 1662 int rc;
1682 1663
1683 VPRINTK("ENTER\n"); 1664 VPRINTK("ENTER\n");
@@ -1694,46 +1675,34 @@ static int ahci_init_one (struct pci_dev *pdev, const struct pci_device_id *ent)
1694 return -ENODEV; 1675 return -ENODEV;
1695 } 1676 }
1696 1677
1697 rc = pci_enable_device(pdev); 1678 rc = pcim_enable_device(pdev);
1698 if (rc) 1679 if (rc)
1699 return rc; 1680 return rc;
1700 1681
1701 rc = pci_request_regions(pdev, DRV_NAME); 1682 rc = pci_request_regions(pdev, DRV_NAME);
1702 if (rc) { 1683 if (rc) {
1703 pci_dev_busy = 1; 1684 pcim_pin_device(pdev);
1704 goto err_out; 1685 return rc;
1705 } 1686 }
1706 1687
1707 if (pci_enable_msi(pdev) == 0) 1688 if (pci_enable_msi(pdev))
1708 have_msi = 1;
1709 else {
1710 pci_intx(pdev, 1); 1689 pci_intx(pdev, 1);
1711 have_msi = 0;
1712 }
1713 1690
1714 probe_ent = kmalloc(sizeof(*probe_ent), GFP_KERNEL); 1691 probe_ent = devm_kzalloc(dev, sizeof(*probe_ent), GFP_KERNEL);
1715 if (probe_ent == NULL) { 1692 if (probe_ent == NULL)
1716 rc = -ENOMEM; 1693 return -ENOMEM;
1717 goto err_out_msi;
1718 }
1719 1694
1720 memset(probe_ent, 0, sizeof(*probe_ent));
1721 probe_ent->dev = pci_dev_to_dev(pdev); 1695 probe_ent->dev = pci_dev_to_dev(pdev);
1722 INIT_LIST_HEAD(&probe_ent->node); 1696 INIT_LIST_HEAD(&probe_ent->node);
1723 1697
1724 mmio_base = pci_iomap(pdev, AHCI_PCI_BAR, 0); 1698 mmio_base = pcim_iomap(pdev, AHCI_PCI_BAR, 0);
1725 if (mmio_base == NULL) { 1699 if (mmio_base == NULL)
1726 rc = -ENOMEM; 1700 return -ENOMEM;
1727 goto err_out_free_ent;
1728 }
1729 base = (unsigned long) mmio_base; 1701 base = (unsigned long) mmio_base;
1730 1702
1731 hpriv = kmalloc(sizeof(*hpriv), GFP_KERNEL); 1703 hpriv = devm_kzalloc(dev, sizeof(*hpriv), GFP_KERNEL);
1732 if (!hpriv) { 1704 if (!hpriv)
1733 rc = -ENOMEM; 1705 return -ENOMEM;
1734 goto err_out_iounmap;
1735 }
1736 memset(hpriv, 0, sizeof(*hpriv));
1737 1706
1738 probe_ent->sht = ahci_port_info[board_idx].sht; 1707 probe_ent->sht = ahci_port_info[board_idx].sht;
1739 probe_ent->port_flags = ahci_port_info[board_idx].flags; 1708 probe_ent->port_flags = ahci_port_info[board_idx].flags;
@@ -1746,13 +1715,10 @@ static int ahci_init_one (struct pci_dev *pdev, const struct pci_device_id *ent)
1746 probe_ent->mmio_base = mmio_base; 1715 probe_ent->mmio_base = mmio_base;
1747 probe_ent->private_data = hpriv; 1716 probe_ent->private_data = hpriv;
1748 1717
1749 if (have_msi)
1750 hpriv->flags |= AHCI_FLAG_MSI;
1751
1752 /* initialize adapter */ 1718 /* initialize adapter */
1753 rc = ahci_host_init(probe_ent); 1719 rc = ahci_host_init(probe_ent);
1754 if (rc) 1720 if (rc)
1755 goto err_out_hpriv; 1721 return rc;
1756 1722
1757 if (!(probe_ent->port_flags & AHCI_FLAG_NO_NCQ) && 1723 if (!(probe_ent->port_flags & AHCI_FLAG_NO_NCQ) &&
1758 (hpriv->cap & HOST_CAP_NCQ)) 1724 (hpriv->cap & HOST_CAP_NCQ))
@@ -1760,48 +1726,11 @@ static int ahci_init_one (struct pci_dev *pdev, const struct pci_device_id *ent)
1760 1726
1761 ahci_print_info(probe_ent); 1727 ahci_print_info(probe_ent);
1762 1728
1763 /* FIXME: check ata_device_add return value */ 1729 if (!ata_device_add(probe_ent))
1764 ata_device_add(probe_ent); 1730 return -ENODEV;
1765 kfree(probe_ent);
1766 1731
1732 devm_kfree(dev, probe_ent);
1767 return 0; 1733 return 0;
1768
1769err_out_hpriv:
1770 kfree(hpriv);
1771err_out_iounmap:
1772 pci_iounmap(pdev, mmio_base);
1773err_out_free_ent:
1774 kfree(probe_ent);
1775err_out_msi:
1776 if (have_msi)
1777 pci_disable_msi(pdev);
1778 else
1779 pci_intx(pdev, 0);
1780 pci_release_regions(pdev);
1781err_out:
1782 if (!pci_dev_busy)
1783 pci_disable_device(pdev);
1784 return rc;
1785}
1786
1787static void ahci_remove_one(struct pci_dev *pdev)
1788{
1789 struct device *dev = pci_dev_to_dev(pdev);
1790 struct ata_host *host = dev_get_drvdata(dev);
1791 struct ahci_host_priv *hpriv = host->private_data;
1792
1793 ata_host_remove(host);
1794
1795 pci_iounmap(pdev, host->mmio_base);
1796
1797 if (hpriv->flags & AHCI_FLAG_MSI)
1798 pci_disable_msi(pdev);
1799 else
1800 pci_intx(pdev, 0);
1801 pci_release_regions(pdev);
1802 pci_disable_device(pdev);
1803 dev_set_drvdata(dev, NULL);
1804 kfree(hpriv);
1805} 1734}
1806 1735
1807static int __init ahci_init(void) 1736static int __init ahci_init(void)
diff --git a/drivers/ata/ata_generic.c b/drivers/ata/ata_generic.c
index 24af56081b5d..a25cbd653b0c 100644
--- a/drivers/ata/ata_generic.c
+++ b/drivers/ata/ata_generic.c
@@ -152,8 +152,6 @@ static struct ata_port_operations generic_port_ops = {
152 .irq_clear = ata_bmdma_irq_clear, 152 .irq_clear = ata_bmdma_irq_clear,
153 153
154 .port_start = ata_port_start, 154 .port_start = ata_port_start,
155 .port_stop = ata_port_stop,
156 .host_stop = ata_host_stop
157}; 155};
158 156
159static int all_generic_ide; /* Set to claim all devices */ 157static int all_generic_ide; /* Set to claim all devices */
diff --git a/drivers/ata/ata_piix.c b/drivers/ata/ata_piix.c
index f15ef88ba00c..c6bf1a338d1a 100644
--- a/drivers/ata/ata_piix.c
+++ b/drivers/ata/ata_piix.c
@@ -154,7 +154,6 @@ struct piix_host_priv {
154 154
155static int piix_init_one (struct pci_dev *pdev, 155static int piix_init_one (struct pci_dev *pdev,
156 const struct pci_device_id *ent); 156 const struct pci_device_id *ent);
157static void piix_host_stop(struct ata_host *host);
158static void piix_pata_error_handler(struct ata_port *ap); 157static void piix_pata_error_handler(struct ata_port *ap);
159static void ich_pata_error_handler(struct ata_port *ap); 158static void ich_pata_error_handler(struct ata_port *ap);
160static void piix_sata_error_handler(struct ata_port *ap); 159static void piix_sata_error_handler(struct ata_port *ap);
@@ -311,8 +310,6 @@ static const struct ata_port_operations piix_pata_ops = {
311 .irq_clear = ata_bmdma_irq_clear, 310 .irq_clear = ata_bmdma_irq_clear,
312 311
313 .port_start = ata_port_start, 312 .port_start = ata_port_start,
314 .port_stop = ata_port_stop,
315 .host_stop = piix_host_stop,
316}; 313};
317 314
318static const struct ata_port_operations ich_pata_ops = { 315static const struct ata_port_operations ich_pata_ops = {
@@ -344,8 +341,6 @@ static const struct ata_port_operations ich_pata_ops = {
344 .irq_clear = ata_bmdma_irq_clear, 341 .irq_clear = ata_bmdma_irq_clear,
345 342
346 .port_start = ata_port_start, 343 .port_start = ata_port_start,
347 .port_stop = ata_port_stop,
348 .host_stop = piix_host_stop,
349}; 344};
350 345
351static const struct ata_port_operations piix_sata_ops = { 346static const struct ata_port_operations piix_sata_ops = {
@@ -374,8 +369,6 @@ static const struct ata_port_operations piix_sata_ops = {
374 .irq_clear = ata_bmdma_irq_clear, 369 .irq_clear = ata_bmdma_irq_clear,
375 370
376 .port_start = ata_port_start, 371 .port_start = ata_port_start,
377 .port_stop = ata_port_stop,
378 .host_stop = piix_host_stop,
379}; 372};
380 373
381static const struct piix_map_db ich5_map_db = { 374static const struct piix_map_db ich5_map_db = {
@@ -1072,6 +1065,7 @@ static void __devinit piix_init_sata_map(struct pci_dev *pdev,
1072static int piix_init_one (struct pci_dev *pdev, const struct pci_device_id *ent) 1065static int piix_init_one (struct pci_dev *pdev, const struct pci_device_id *ent)
1073{ 1066{
1074 static int printed_version; 1067 static int printed_version;
1068 struct device *dev = &pdev->dev;
1075 struct ata_port_info port_info[2]; 1069 struct ata_port_info port_info[2];
1076 struct ata_port_info *ppinfo[2] = { &port_info[0], &port_info[1] }; 1070 struct ata_port_info *ppinfo[2] = { &port_info[0], &port_info[1] };
1077 struct piix_host_priv *hpriv; 1071 struct piix_host_priv *hpriv;
@@ -1085,7 +1079,7 @@ static int piix_init_one (struct pci_dev *pdev, const struct pci_device_id *ent)
1085 if (!in_module_init) 1079 if (!in_module_init)
1086 return -ENODEV; 1080 return -ENODEV;
1087 1081
1088 hpriv = kzalloc(sizeof(*hpriv), GFP_KERNEL); 1082 hpriv = devm_kzalloc(dev, sizeof(*hpriv), GFP_KERNEL);
1089 if (!hpriv) 1083 if (!hpriv)
1090 return -ENOMEM; 1084 return -ENOMEM;
1091 1085
@@ -1135,15 +1129,6 @@ static int piix_init_one (struct pci_dev *pdev, const struct pci_device_id *ent)
1135 return ata_pci_init_one(pdev, ppinfo, 2); 1129 return ata_pci_init_one(pdev, ppinfo, 2);
1136} 1130}
1137 1131
1138static void piix_host_stop(struct ata_host *host)
1139{
1140 struct piix_host_priv *hpriv = host->private_data;
1141
1142 ata_host_stop(host);
1143
1144 kfree(hpriv);
1145}
1146
1147static int __init piix_init(void) 1132static int __init piix_init(void)
1148{ 1133{
1149 int rc; 1134 int rc;
diff --git a/drivers/ata/pata_ali.c b/drivers/ata/pata_ali.c
index fde5ce9f7eae..f4fdb10211e3 100644
--- a/drivers/ata/pata_ali.c
+++ b/drivers/ata/pata_ali.c
@@ -376,8 +376,6 @@ static struct ata_port_operations ali_early_port_ops = {
376 .irq_clear = ata_bmdma_irq_clear, 376 .irq_clear = ata_bmdma_irq_clear,
377 377
378 .port_start = ata_port_start, 378 .port_start = ata_port_start,
379 .port_stop = ata_port_stop,
380 .host_stop = ata_host_stop
381}; 379};
382 380
383/* 381/*
@@ -417,8 +415,6 @@ static struct ata_port_operations ali_20_port_ops = {
417 .irq_clear = ata_bmdma_irq_clear, 415 .irq_clear = ata_bmdma_irq_clear,
418 416
419 .port_start = ata_port_start, 417 .port_start = ata_port_start,
420 .port_stop = ata_port_stop,
421 .host_stop = ata_host_stop
422}; 418};
423 419
424/* 420/*
@@ -455,8 +451,6 @@ static struct ata_port_operations ali_c2_port_ops = {
455 .irq_clear = ata_bmdma_irq_clear, 451 .irq_clear = ata_bmdma_irq_clear,
456 452
457 .port_start = ata_port_start, 453 .port_start = ata_port_start,
458 .port_stop = ata_port_stop,
459 .host_stop = ata_host_stop
460}; 454};
461 455
462/* 456/*
@@ -492,8 +486,6 @@ static struct ata_port_operations ali_c5_port_ops = {
492 .irq_clear = ata_bmdma_irq_clear, 486 .irq_clear = ata_bmdma_irq_clear,
493 487
494 .port_start = ata_port_start, 488 .port_start = ata_port_start,
495 .port_stop = ata_port_stop,
496 .host_stop = ata_host_stop
497}; 489};
498 490
499 491
diff --git a/drivers/ata/pata_amd.c b/drivers/ata/pata_amd.c
index a6b330089f22..7ee0c83c657a 100644
--- a/drivers/ata/pata_amd.c
+++ b/drivers/ata/pata_amd.c
@@ -368,8 +368,6 @@ static struct ata_port_operations amd33_port_ops = {
368 .irq_clear = ata_bmdma_irq_clear, 368 .irq_clear = ata_bmdma_irq_clear,
369 369
370 .port_start = ata_port_start, 370 .port_start = ata_port_start,
371 .port_stop = ata_port_stop,
372 .host_stop = ata_host_stop
373}; 371};
374 372
375static struct ata_port_operations amd66_port_ops = { 373static struct ata_port_operations amd66_port_ops = {
@@ -402,8 +400,6 @@ static struct ata_port_operations amd66_port_ops = {
402 .irq_clear = ata_bmdma_irq_clear, 400 .irq_clear = ata_bmdma_irq_clear,
403 401
404 .port_start = ata_port_start, 402 .port_start = ata_port_start,
405 .port_stop = ata_port_stop,
406 .host_stop = ata_host_stop
407}; 403};
408 404
409static struct ata_port_operations amd100_port_ops = { 405static struct ata_port_operations amd100_port_ops = {
@@ -436,8 +432,6 @@ static struct ata_port_operations amd100_port_ops = {
436 .irq_clear = ata_bmdma_irq_clear, 432 .irq_clear = ata_bmdma_irq_clear,
437 433
438 .port_start = ata_port_start, 434 .port_start = ata_port_start,
439 .port_stop = ata_port_stop,
440 .host_stop = ata_host_stop
441}; 435};
442 436
443static struct ata_port_operations amd133_port_ops = { 437static struct ata_port_operations amd133_port_ops = {
@@ -470,8 +464,6 @@ static struct ata_port_operations amd133_port_ops = {
470 .irq_clear = ata_bmdma_irq_clear, 464 .irq_clear = ata_bmdma_irq_clear,
471 465
472 .port_start = ata_port_start, 466 .port_start = ata_port_start,
473 .port_stop = ata_port_stop,
474 .host_stop = ata_host_stop
475}; 467};
476 468
477static struct ata_port_operations nv100_port_ops = { 469static struct ata_port_operations nv100_port_ops = {
@@ -504,8 +496,6 @@ static struct ata_port_operations nv100_port_ops = {
504 .irq_clear = ata_bmdma_irq_clear, 496 .irq_clear = ata_bmdma_irq_clear,
505 497
506 .port_start = ata_port_start, 498 .port_start = ata_port_start,
507 .port_stop = ata_port_stop,
508 .host_stop = ata_host_stop
509}; 499};
510 500
511static struct ata_port_operations nv133_port_ops = { 501static struct ata_port_operations nv133_port_ops = {
@@ -538,8 +528,6 @@ static struct ata_port_operations nv133_port_ops = {
538 .irq_clear = ata_bmdma_irq_clear, 528 .irq_clear = ata_bmdma_irq_clear,
539 529
540 .port_start = ata_port_start, 530 .port_start = ata_port_start,
541 .port_stop = ata_port_stop,
542 .host_stop = ata_host_stop
543}; 531};
544 532
545static int amd_init_one(struct pci_dev *pdev, const struct pci_device_id *id) 533static int amd_init_one(struct pci_dev *pdev, const struct pci_device_id *id)
diff --git a/drivers/ata/pata_artop.c b/drivers/ata/pata_artop.c
index 37bc1323bda7..5baea1222227 100644
--- a/drivers/ata/pata_artop.c
+++ b/drivers/ata/pata_artop.c
@@ -347,8 +347,6 @@ static const struct ata_port_operations artop6210_ops = {
347 .irq_clear = ata_bmdma_irq_clear, 347 .irq_clear = ata_bmdma_irq_clear,
348 348
349 .port_start = ata_port_start, 349 .port_start = ata_port_start,
350 .port_stop = ata_port_stop,
351 .host_stop = ata_host_stop,
352}; 350};
353 351
354static const struct ata_port_operations artop6260_ops = { 352static const struct ata_port_operations artop6260_ops = {
@@ -379,8 +377,6 @@ static const struct ata_port_operations artop6260_ops = {
379 .irq_clear = ata_bmdma_irq_clear, 377 .irq_clear = ata_bmdma_irq_clear,
380 378
381 .port_start = ata_port_start, 379 .port_start = ata_port_start,
382 .port_stop = ata_port_stop,
383 .host_stop = ata_host_stop,
384}; 380};
385 381
386 382
diff --git a/drivers/ata/pata_atiixp.c b/drivers/ata/pata_atiixp.c
index 504e1dbfffd7..2bfb99493a72 100644
--- a/drivers/ata/pata_atiixp.c
+++ b/drivers/ata/pata_atiixp.c
@@ -258,8 +258,6 @@ static struct ata_port_operations atiixp_port_ops = {
258 .irq_clear = ata_bmdma_irq_clear, 258 .irq_clear = ata_bmdma_irq_clear,
259 259
260 .port_start = ata_port_start, 260 .port_start = ata_port_start,
261 .port_stop = ata_port_stop,
262 .host_stop = ata_host_stop
263}; 261};
264 262
265static int atiixp_init_one(struct pci_dev *dev, const struct pci_device_id *id) 263static int atiixp_init_one(struct pci_dev *dev, const struct pci_device_id *id)
diff --git a/drivers/ata/pata_cmd64x.c b/drivers/ata/pata_cmd64x.c
index 449162cbf93e..d97aa9bb0500 100644
--- a/drivers/ata/pata_cmd64x.c
+++ b/drivers/ata/pata_cmd64x.c
@@ -319,8 +319,6 @@ static struct ata_port_operations cmd64x_port_ops = {
319 .irq_clear = ata_bmdma_irq_clear, 319 .irq_clear = ata_bmdma_irq_clear,
320 320
321 .port_start = ata_port_start, 321 .port_start = ata_port_start,
322 .port_stop = ata_port_stop,
323 .host_stop = ata_host_stop
324}; 322};
325 323
326static struct ata_port_operations cmd646r1_port_ops = { 324static struct ata_port_operations cmd646r1_port_ops = {
@@ -353,8 +351,6 @@ static struct ata_port_operations cmd646r1_port_ops = {
353 .irq_clear = ata_bmdma_irq_clear, 351 .irq_clear = ata_bmdma_irq_clear,
354 352
355 .port_start = ata_port_start, 353 .port_start = ata_port_start,
356 .port_stop = ata_port_stop,
357 .host_stop = ata_host_stop
358}; 354};
359 355
360static struct ata_port_operations cmd648_port_ops = { 356static struct ata_port_operations cmd648_port_ops = {
@@ -387,8 +383,6 @@ static struct ata_port_operations cmd648_port_ops = {
387 .irq_clear = ata_bmdma_irq_clear, 383 .irq_clear = ata_bmdma_irq_clear,
388 384
389 .port_start = ata_port_start, 385 .port_start = ata_port_start,
390 .port_stop = ata_port_stop,
391 .host_stop = ata_host_stop
392}; 386};
393 387
394static int cmd64x_init_one(struct pci_dev *pdev, const struct pci_device_id *id) 388static int cmd64x_init_one(struct pci_dev *pdev, const struct pci_device_id *id)
diff --git a/drivers/ata/pata_cs5520.c b/drivers/ata/pata_cs5520.c
index 476b87963f5d..63bdcbe45583 100644
--- a/drivers/ata/pata_cs5520.c
+++ b/drivers/ata/pata_cs5520.c
@@ -199,8 +199,6 @@ static struct ata_port_operations cs5520_port_ops = {
199 .irq_clear = ata_bmdma_irq_clear, 199 .irq_clear = ata_bmdma_irq_clear,
200 200
201 .port_start = ata_port_start, 201 .port_start = ata_port_start,
202 .port_stop = ata_port_stop,
203 .host_stop = ata_host_stop,
204}; 202};
205 203
206static int __devinit cs5520_init_one(struct pci_dev *dev, const struct pci_device_id *id) 204static int __devinit cs5520_init_one(struct pci_dev *dev, const struct pci_device_id *id)
@@ -294,7 +292,7 @@ static void __devexit cs5520_remove_one(struct pci_dev *pdev)
294 struct device *dev = pci_dev_to_dev(pdev); 292 struct device *dev = pci_dev_to_dev(pdev);
295 struct ata_host *host = dev_get_drvdata(dev); 293 struct ata_host *host = dev_get_drvdata(dev);
296 294
297 ata_host_remove(host); 295 ata_host_detach(host);
298 dev_set_drvdata(dev, NULL); 296 dev_set_drvdata(dev, NULL);
299} 297}
300 298
diff --git a/drivers/ata/pata_cs5530.c b/drivers/ata/pata_cs5530.c
index 611d90f0d3bc..29d459be19be 100644
--- a/drivers/ata/pata_cs5530.c
+++ b/drivers/ata/pata_cs5530.c
@@ -216,8 +216,6 @@ static struct ata_port_operations cs5530_port_ops = {
216 .irq_clear = ata_bmdma_irq_clear, 216 .irq_clear = ata_bmdma_irq_clear,
217 217
218 .port_start = ata_port_start, 218 .port_start = ata_port_start,
219 .port_stop = ata_port_stop,
220 .host_stop = ata_host_stop
221}; 219};
222 220
223static struct dmi_system_id palmax_dmi_table[] = { 221static struct dmi_system_id palmax_dmi_table[] = {
diff --git a/drivers/ata/pata_cs5535.c b/drivers/ata/pata_cs5535.c
index e3efec4ffc79..dd3958d2cff9 100644
--- a/drivers/ata/pata_cs5535.c
+++ b/drivers/ata/pata_cs5535.c
@@ -220,8 +220,6 @@ static struct ata_port_operations cs5535_port_ops = {
220 .irq_clear = ata_bmdma_irq_clear, 220 .irq_clear = ata_bmdma_irq_clear,
221 221
222 .port_start = ata_port_start, 222 .port_start = ata_port_start,
223 .port_stop = ata_port_stop,
224 .host_stop = ata_host_stop
225}; 223};
226 224
227/** 225/**
diff --git a/drivers/ata/pata_cypress.c b/drivers/ata/pata_cypress.c
index e2a95699bae7..8479186a2373 100644
--- a/drivers/ata/pata_cypress.c
+++ b/drivers/ata/pata_cypress.c
@@ -171,8 +171,6 @@ static struct ata_port_operations cy82c693_port_ops = {
171 .irq_clear = ata_bmdma_irq_clear, 171 .irq_clear = ata_bmdma_irq_clear,
172 172
173 .port_start = ata_port_start, 173 .port_start = ata_port_start,
174 .port_stop = ata_port_stop,
175 .host_stop = ata_host_stop
176}; 174};
177 175
178static int cy82c693_init_one(struct pci_dev *pdev, const struct pci_device_id *id) 176static int cy82c693_init_one(struct pci_dev *pdev, const struct pci_device_id *id)
diff --git a/drivers/ata/pata_efar.c b/drivers/ata/pata_efar.c
index edf8a63f50af..66814ee64d05 100644
--- a/drivers/ata/pata_efar.c
+++ b/drivers/ata/pata_efar.c
@@ -267,8 +267,6 @@ static const struct ata_port_operations efar_ops = {
267 .irq_clear = ata_bmdma_irq_clear, 267 .irq_clear = ata_bmdma_irq_clear,
268 268
269 .port_start = ata_port_start, 269 .port_start = ata_port_start,
270 .port_stop = ata_port_stop,
271 .host_stop = ata_host_stop,
272}; 270};
273 271
274 272
diff --git a/drivers/ata/pata_hpt366.c b/drivers/ata/pata_hpt366.c
index 2202c7ec16e3..8b826102dbd9 100644
--- a/drivers/ata/pata_hpt366.c
+++ b/drivers/ata/pata_hpt366.c
@@ -367,8 +367,6 @@ static struct ata_port_operations hpt366_port_ops = {
367 .irq_clear = ata_bmdma_irq_clear, 367 .irq_clear = ata_bmdma_irq_clear,
368 368
369 .port_start = ata_port_start, 369 .port_start = ata_port_start,
370 .port_stop = ata_port_stop,
371 .host_stop = ata_host_stop
372}; 370};
373 371
374/** 372/**
diff --git a/drivers/ata/pata_hpt37x.c b/drivers/ata/pata_hpt37x.c
index 9e1eb473c0a1..09e8be56ba36 100644
--- a/drivers/ata/pata_hpt37x.c
+++ b/drivers/ata/pata_hpt37x.c
@@ -802,8 +802,6 @@ static struct ata_port_operations hpt370_port_ops = {
802 .irq_clear = ata_bmdma_irq_clear, 802 .irq_clear = ata_bmdma_irq_clear,
803 803
804 .port_start = ata_port_start, 804 .port_start = ata_port_start,
805 .port_stop = ata_port_stop,
806 .host_stop = ata_host_stop
807}; 805};
808 806
809/* 807/*
@@ -841,8 +839,6 @@ static struct ata_port_operations hpt370a_port_ops = {
841 .irq_clear = ata_bmdma_irq_clear, 839 .irq_clear = ata_bmdma_irq_clear,
842 840
843 .port_start = ata_port_start, 841 .port_start = ata_port_start,
844 .port_stop = ata_port_stop,
845 .host_stop = ata_host_stop
846}; 842};
847 843
848/* 844/*
@@ -881,8 +877,6 @@ static struct ata_port_operations hpt372_port_ops = {
881 .irq_clear = ata_bmdma_irq_clear, 877 .irq_clear = ata_bmdma_irq_clear,
882 878
883 .port_start = ata_port_start, 879 .port_start = ata_port_start,
884 .port_stop = ata_port_stop,
885 .host_stop = ata_host_stop
886}; 880};
887 881
888/* 882/*
@@ -921,8 +915,6 @@ static struct ata_port_operations hpt374_port_ops = {
921 .irq_clear = ata_bmdma_irq_clear, 915 .irq_clear = ata_bmdma_irq_clear,
922 916
923 .port_start = ata_port_start, 917 .port_start = ata_port_start,
924 .port_stop = ata_port_stop,
925 .host_stop = ata_host_stop
926}; 918};
927 919
928/** 920/**
diff --git a/drivers/ata/pata_hpt3x2n.c b/drivers/ata/pata_hpt3x2n.c
index 886fab9aa62c..9f8ec576317c 100644
--- a/drivers/ata/pata_hpt3x2n.c
+++ b/drivers/ata/pata_hpt3x2n.c
@@ -379,8 +379,6 @@ static struct ata_port_operations hpt3x2n_port_ops = {
379 .irq_clear = ata_bmdma_irq_clear, 379 .irq_clear = ata_bmdma_irq_clear,
380 380
381 .port_start = ata_port_start, 381 .port_start = ata_port_start,
382 .port_stop = ata_port_stop,
383 .host_stop = ata_host_stop
384}; 382};
385 383
386/** 384/**
diff --git a/drivers/ata/pata_hpt3x3.c b/drivers/ata/pata_hpt3x3.c
index 5caf167e26de..faa2db44ba7f 100644
--- a/drivers/ata/pata_hpt3x3.c
+++ b/drivers/ata/pata_hpt3x3.c
@@ -154,8 +154,6 @@ static struct ata_port_operations hpt3x3_port_ops = {
154 .irq_clear = ata_bmdma_irq_clear, 154 .irq_clear = ata_bmdma_irq_clear,
155 155
156 .port_start = ata_port_start, 156 .port_start = ata_port_start,
157 .port_stop = ata_port_stop,
158 .host_stop = ata_host_stop
159}; 157};
160 158
161/** 159/**
diff --git a/drivers/ata/pata_isapnp.c b/drivers/ata/pata_isapnp.c
index a97d55ae95c9..38a42eae598e 100644
--- a/drivers/ata/pata_isapnp.c
+++ b/drivers/ata/pata_isapnp.c
@@ -59,8 +59,6 @@ static struct ata_port_operations isapnp_port_ops = {
59 .irq_clear = ata_bmdma_irq_clear, 59 .irq_clear = ata_bmdma_irq_clear,
60 60
61 .port_start = ata_port_start, 61 .port_start = ata_port_start,
62 .port_stop = ata_port_stop,
63 .host_stop = ata_host_stop
64}; 62};
65 63
66/** 64/**
@@ -120,7 +118,7 @@ static void isapnp_remove_one(struct pnp_dev *idev)
120 struct device *dev = &idev->dev; 118 struct device *dev = &idev->dev;
121 struct ata_host *host = dev_get_drvdata(dev); 119 struct ata_host *host = dev_get_drvdata(dev);
122 120
123 ata_host_remove(host); 121 ata_host_detach(host);
124 dev_set_drvdata(dev, NULL); 122 dev_set_drvdata(dev, NULL);
125} 123}
126 124
diff --git a/drivers/ata/pata_it8213.c b/drivers/ata/pata_it8213.c
index 7e9a41630e59..383a611b662e 100644
--- a/drivers/ata/pata_it8213.c
+++ b/drivers/ata/pata_it8213.c
@@ -279,8 +279,6 @@ static const struct ata_port_operations it8213_ops = {
279 .irq_clear = ata_bmdma_irq_clear, 279 .irq_clear = ata_bmdma_irq_clear,
280 280
281 .port_start = ata_port_start, 281 .port_start = ata_port_start,
282 .port_stop = ata_port_stop,
283 .host_stop = ata_host_stop,
284}; 282};
285 283
286 284
diff --git a/drivers/ata/pata_it821x.c b/drivers/ata/pata_it821x.c
index 171fbd206bd5..f23365b92c0f 100644
--- a/drivers/ata/pata_it821x.c
+++ b/drivers/ata/pata_it821x.c
@@ -594,14 +594,10 @@ static int it821x_port_start(struct ata_port *ap)
594 if (ret < 0) 594 if (ret < 0)
595 return ret; 595 return ret;
596 596
597 ap->private_data = kmalloc(sizeof(struct it821x_dev), GFP_KERNEL); 597 itdev = devm_kzalloc(&pdev->dev, sizeof(struct it821x_dev), GFP_KERNEL);
598 if (ap->private_data == NULL) { 598 if (itdev == NULL)
599 ata_port_stop(ap);
600 return -ENOMEM; 599 return -ENOMEM;
601 } 600 ap->private_data = itdev;
602
603 itdev = ap->private_data;
604 memset(itdev, 0, sizeof(struct it821x_dev));
605 601
606 pci_read_config_byte(pdev, 0x50, &conf); 602 pci_read_config_byte(pdev, 0x50, &conf);
607 603
@@ -632,20 +628,6 @@ static int it821x_port_start(struct ata_port *ap)
632 return 0; 628 return 0;
633} 629}
634 630
635/**
636 * it821x_port_stop - port shutdown
637 * @ap: ATA port being removed
638 *
639 * Release the private objects we added in it821x_port_start
640 */
641
642static void it821x_port_stop(struct ata_port *ap) {
643 kfree(ap->private_data);
644 ap->private_data = NULL; /* We want an OOPS if we reuse this
645 too late! */
646 ata_port_stop(ap);
647}
648
649static struct scsi_host_template it821x_sht = { 631static struct scsi_host_template it821x_sht = {
650 .module = THIS_MODULE, 632 .module = THIS_MODULE,
651 .name = DRV_NAME, 633 .name = DRV_NAME,
@@ -698,8 +680,6 @@ static struct ata_port_operations it821x_smart_port_ops = {
698 .irq_clear = ata_bmdma_irq_clear, 680 .irq_clear = ata_bmdma_irq_clear,
699 681
700 .port_start = it821x_port_start, 682 .port_start = it821x_port_start,
701 .port_stop = it821x_port_stop,
702 .host_stop = ata_host_stop
703}; 683};
704 684
705static struct ata_port_operations it821x_passthru_port_ops = { 685static struct ata_port_operations it821x_passthru_port_ops = {
@@ -734,8 +714,6 @@ static struct ata_port_operations it821x_passthru_port_ops = {
734 .irq_handler = ata_interrupt, 714 .irq_handler = ata_interrupt,
735 715
736 .port_start = it821x_port_start, 716 .port_start = it821x_port_start,
737 .port_stop = it821x_port_stop,
738 .host_stop = ata_host_stop
739}; 717};
740 718
741static void __devinit it821x_disable_raid(struct pci_dev *pdev) 719static void __devinit it821x_disable_raid(struct pci_dev *pdev)
diff --git a/drivers/ata/pata_ixp4xx_cf.c b/drivers/ata/pata_ixp4xx_cf.c
index 23b8aab3ebd8..230067d281e3 100644
--- a/drivers/ata/pata_ixp4xx_cf.c
+++ b/drivers/ata/pata_ixp4xx_cf.c
@@ -95,14 +95,6 @@ static void ixp4xx_irq_clear(struct ata_port *ap)
95{ 95{
96} 96}
97 97
98static void ixp4xx_host_stop (struct ata_host *host)
99{
100 struct ixp4xx_pata_data *data = host->dev->platform_data;
101
102 iounmap(data->cs0);
103 iounmap(data->cs1);
104}
105
106static struct scsi_host_template ixp4xx_sht = { 98static struct scsi_host_template ixp4xx_sht = {
107 .module = THIS_MODULE, 99 .module = THIS_MODULE,
108 .name = DRV_NAME, 100 .name = DRV_NAME,
@@ -141,8 +133,6 @@ static struct ata_port_operations ixp4xx_port_ops = {
141 .irq_clear = ixp4xx_irq_clear, 133 .irq_clear = ixp4xx_irq_clear,
142 134
143 .port_start = ata_port_start, 135 .port_start = ata_port_start,
144 .port_stop = ata_port_stop,
145 .host_stop = ixp4xx_host_stop,
146 136
147 .phy_reset = ixp4xx_phy_reset, 137 .phy_reset = ixp4xx_phy_reset,
148}; 138};
@@ -195,8 +185,8 @@ static __devinit int ixp4xx_pata_probe(struct platform_device *pdev)
195 185
196 pdev->dev.coherent_dma_mask = DMA_32BIT_MASK; 186 pdev->dev.coherent_dma_mask = DMA_32BIT_MASK;
197 187
198 data->cs0 = ioremap(cs0->start, 0x1000); 188 data->cs0 = devm_ioremap(&pdev->dev, cs0->start, 0x1000);
199 data->cs1 = ioremap(cs1->start, 0x1000); 189 data->cs1 = devm_ioremap(&pdev->dev, cs1->start, 0x1000);
200 190
201 irq = platform_get_irq(pdev, 0); 191 irq = platform_get_irq(pdev, 0);
202 if (irq) 192 if (irq)
@@ -238,7 +228,7 @@ static __devexit int ixp4xx_pata_remove(struct platform_device *dev)
238{ 228{
239 struct ata_host *host = platform_get_drvdata(dev); 229 struct ata_host *host = platform_get_drvdata(dev);
240 230
241 ata_host_remove(host); 231 ata_host_detach(host);
242 platform_set_drvdata(dev, NULL); 232 platform_set_drvdata(dev, NULL);
243 233
244 return 0; 234 return 0;
diff --git a/drivers/ata/pata_jmicron.c b/drivers/ata/pata_jmicron.c
index aaf6787f5342..128a30958210 100644
--- a/drivers/ata/pata_jmicron.c
+++ b/drivers/ata/pata_jmicron.c
@@ -169,8 +169,6 @@ static const struct ata_port_operations jmicron_ops = {
169 169
170 /* Generic PATA PCI ATA helpers */ 170 /* Generic PATA PCI ATA helpers */
171 .port_start = ata_port_start, 171 .port_start = ata_port_start,
172 .port_stop = ata_port_stop,
173 .host_stop = ata_host_stop,
174}; 172};
175 173
176 174
diff --git a/drivers/ata/pata_legacy.c b/drivers/ata/pata_legacy.c
index 581cb33c6f45..9532b9bb6d2f 100644
--- a/drivers/ata/pata_legacy.c
+++ b/drivers/ata/pata_legacy.c
@@ -170,8 +170,6 @@ static struct ata_port_operations simple_port_ops = {
170 .irq_clear = ata_bmdma_irq_clear, 170 .irq_clear = ata_bmdma_irq_clear,
171 171
172 .port_start = ata_port_start, 172 .port_start = ata_port_start,
173 .port_stop = ata_port_stop,
174 .host_stop = ata_host_stop
175}; 173};
176 174
177static struct ata_port_operations legacy_port_ops = { 175static struct ata_port_operations legacy_port_ops = {
@@ -195,8 +193,6 @@ static struct ata_port_operations legacy_port_ops = {
195 .irq_clear = ata_bmdma_irq_clear, 193 .irq_clear = ata_bmdma_irq_clear,
196 194
197 .port_start = ata_port_start, 195 .port_start = ata_port_start,
198 .port_stop = ata_port_stop,
199 .host_stop = ata_host_stop
200}; 196};
201 197
202/* 198/*
@@ -305,8 +301,6 @@ static struct ata_port_operations pdc20230_port_ops = {
305 .irq_clear = ata_bmdma_irq_clear, 301 .irq_clear = ata_bmdma_irq_clear,
306 302
307 .port_start = ata_port_start, 303 .port_start = ata_port_start,
308 .port_stop = ata_port_stop,
309 .host_stop = ata_host_stop
310}; 304};
311 305
312/* 306/*
@@ -357,8 +351,6 @@ static struct ata_port_operations ht6560a_port_ops = {
357 .irq_clear = ata_bmdma_irq_clear, 351 .irq_clear = ata_bmdma_irq_clear,
358 352
359 .port_start = ata_port_start, 353 .port_start = ata_port_start,
360 .port_stop = ata_port_stop,
361 .host_stop = ata_host_stop
362}; 354};
363 355
364/* 356/*
@@ -420,8 +412,6 @@ static struct ata_port_operations ht6560b_port_ops = {
420 .irq_clear = ata_bmdma_irq_clear, 412 .irq_clear = ata_bmdma_irq_clear,
421 413
422 .port_start = ata_port_start, 414 .port_start = ata_port_start,
423 .port_stop = ata_port_stop,
424 .host_stop = ata_host_stop
425}; 415};
426 416
427/* 417/*
@@ -538,8 +528,6 @@ static struct ata_port_operations opti82c611a_port_ops = {
538 .irq_clear = ata_bmdma_irq_clear, 528 .irq_clear = ata_bmdma_irq_clear,
539 529
540 .port_start = ata_port_start, 530 .port_start = ata_port_start,
541 .port_stop = ata_port_stop,
542 .host_stop = ata_host_stop
543}; 531};
544 532
545/* 533/*
@@ -668,8 +656,6 @@ static struct ata_port_operations opti82c46x_port_ops = {
668 .irq_clear = ata_bmdma_irq_clear, 656 .irq_clear = ata_bmdma_irq_clear,
669 657
670 .port_start = ata_port_start, 658 .port_start = ata_port_start,
671 .port_stop = ata_port_stop,
672 .host_stop = ata_host_stop
673}; 659};
674 660
675 661
@@ -689,21 +675,19 @@ static __init int legacy_init_one(int port, unsigned long io, unsigned long ctrl
689 struct legacy_data *ld = &legacy_data[nr_legacy_host]; 675 struct legacy_data *ld = &legacy_data[nr_legacy_host];
690 struct ata_probe_ent ae; 676 struct ata_probe_ent ae;
691 struct platform_device *pdev; 677 struct platform_device *pdev;
692 int ret = -EBUSY;
693 struct ata_port_operations *ops = &legacy_port_ops; 678 struct ata_port_operations *ops = &legacy_port_ops;
694 int pio_modes = pio_mask; 679 int pio_modes = pio_mask;
695 u32 mask = (1 << port); 680 u32 mask = (1 << port);
696 681 int ret;
697 if (request_region(io, 8, "pata_legacy") == NULL)
698 return -EBUSY;
699 if (request_region(ctrl, 1, "pata_legacy") == NULL)
700 goto fail_io;
701 682
702 pdev = platform_device_register_simple(DRV_NAME, nr_legacy_host, NULL, 0); 683 pdev = platform_device_register_simple(DRV_NAME, nr_legacy_host, NULL, 0);
703 if (IS_ERR(pdev)) { 684 if (IS_ERR(pdev))
704 ret = PTR_ERR(pdev); 685 return PTR_ERR(pdev);
705 goto fail_dev; 686
706 } 687 ret = -EBUSY;
688 if (devm_request_region(&pdev->dev, io, 8, "pata_legacy") == NULL ||
689 devm_request_region(&pdev->dev, ctrl, 1, "pata_legacy") == NULL)
690 goto fail;
707 691
708 if (ht6560a & mask) { 692 if (ht6560a & mask) {
709 ops = &ht6560a_port_ops; 693 ops = &ht6560a_port_ops;
@@ -776,21 +760,16 @@ static __init int legacy_init_one(int port, unsigned long io, unsigned long ctrl
776 ata_std_ports(&ae.port[0]); 760 ata_std_ports(&ae.port[0]);
777 ae.private_data = ld; 761 ae.private_data = ld;
778 762
779 ret = ata_device_add(&ae); 763 ret = -ENODEV;
780 if (ret == 0) { 764 if (!ata_device_add(&ae))
781 ret = -ENODEV;
782 goto fail; 765 goto fail;
783 } 766
784 legacy_host[nr_legacy_host++] = dev_get_drvdata(&pdev->dev); 767 legacy_host[nr_legacy_host++] = dev_get_drvdata(&pdev->dev);
785 ld->platform_dev = pdev; 768 ld->platform_dev = pdev;
786 return 0; 769 return 0;
787 770
788fail: 771fail:
789 platform_device_unregister(pdev); 772 platform_device_unregister(pdev);
790fail_dev:
791 release_region(ctrl, 1);
792fail_io:
793 release_region(io, 8);
794 return ret; 773 return ret;
795} 774}
796 775
@@ -923,15 +902,11 @@ static __exit void legacy_exit(void)
923 902
924 for (i = 0; i < nr_legacy_host; i++) { 903 for (i = 0; i < nr_legacy_host; i++) {
925 struct legacy_data *ld = &legacy_data[i]; 904 struct legacy_data *ld = &legacy_data[i];
926 struct ata_port *ap =legacy_host[i]->ports[0]; 905
927 unsigned long io = ap->ioaddr.cmd_addr; 906 ata_host_detach(legacy_host[i]);
928 unsigned long ctrl = ap->ioaddr.ctl_addr;
929 ata_host_remove(legacy_host[i]);
930 platform_device_unregister(ld->platform_dev); 907 platform_device_unregister(ld->platform_dev);
931 if (ld->timing) 908 if (ld->timing)
932 release_region(ld->timing, 2); 909 release_region(ld->timing, 2);
933 release_region(io, 8);
934 release_region(ctrl, 1);
935 } 910 }
936} 911}
937 912
diff --git a/drivers/ata/pata_marvell.c b/drivers/ata/pata_marvell.c
index af93533551ac..0a4409546a02 100644
--- a/drivers/ata/pata_marvell.c
+++ b/drivers/ata/pata_marvell.c
@@ -137,8 +137,6 @@ static const struct ata_port_operations marvell_ops = {
137 137
138 /* Generic PATA PCI ATA helpers */ 138 /* Generic PATA PCI ATA helpers */
139 .port_start = ata_port_start, 139 .port_start = ata_port_start,
140 .port_stop = ata_port_stop,
141 .host_stop = ata_host_stop,
142}; 140};
143 141
144 142
diff --git a/drivers/ata/pata_mpc52xx.c b/drivers/ata/pata_mpc52xx.c
index 8b7019a2f190..5320ea854365 100644
--- a/drivers/ata/pata_mpc52xx.c
+++ b/drivers/ata/pata_mpc52xx.c
@@ -17,7 +17,6 @@
17#include <linux/delay.h> 17#include <linux/delay.h>
18#include <linux/libata.h> 18#include <linux/libata.h>
19 19
20#include <asm/io.h>
21#include <asm/types.h> 20#include <asm/types.h>
22#include <asm/prom.h> 21#include <asm/prom.h>
23#include <asm/of_platform.h> 22#include <asm/of_platform.h>
@@ -300,8 +299,6 @@ static struct ata_port_operations mpc52xx_ata_port_ops = {
300 .irq_handler = ata_interrupt, 299 .irq_handler = ata_interrupt,
301 .irq_clear = ata_bmdma_irq_clear, 300 .irq_clear = ata_bmdma_irq_clear,
302 .port_start = ata_port_start, 301 .port_start = ata_port_start,
303 .port_stop = ata_port_stop,
304 .host_stop = ata_host_stop,
305}; 302};
306 303
307static struct ata_probe_ent mpc52xx_ata_probe_ent = { 304static struct ata_probe_ent mpc52xx_ata_probe_ent = {
@@ -353,7 +350,7 @@ mpc52xx_ata_remove_one(struct device *dev)
353 struct ata_host *host = dev_get_drvdata(dev); 350 struct ata_host *host = dev_get_drvdata(dev);
354 struct mpc52xx_ata_priv *priv = host->private_data; 351 struct mpc52xx_ata_priv *priv = host->private_data;
355 352
356 ata_host_remove(host); 353 ata_host_detach(host);
357 354
358 return priv; 355 return priv;
359} 356}
@@ -369,8 +366,8 @@ mpc52xx_ata_probe(struct of_device *op, const struct of_device_id *match)
369 unsigned int ipb_freq; 366 unsigned int ipb_freq;
370 struct resource res_mem; 367 struct resource res_mem;
371 int ata_irq = NO_IRQ; 368 int ata_irq = NO_IRQ;
372 struct mpc52xx_ata __iomem *ata_regs = NULL; 369 struct mpc52xx_ata __iomem *ata_regs;
373 struct mpc52xx_ata_priv *priv = NULL; 370 struct mpc52xx_ata_priv *priv;
374 int rv; 371 int rv;
375 372
376 /* Get ipb frequency */ 373 /* Get ipb frequency */
@@ -397,16 +394,17 @@ mpc52xx_ata_probe(struct of_device *op, const struct of_device_id *match)
397 } 394 }
398 395
399 /* Request mem region */ 396 /* Request mem region */
400 if (!request_mem_region(res_mem.start, 397 if (!devm_request_mem_region(&op->dev, res_mem.start,
401 sizeof(struct mpc52xx_ata), DRV_NAME)) { 398 sizeof(struct mpc52xx_ata), DRV_NAME)) {
402 printk(KERN_ERR DRV_NAME ": " 399 printk(KERN_ERR DRV_NAME ": "
403 "Error while requesting mem region\n"); 400 "Error while requesting mem region\n");
404 irq_dispose_mapping(ata_irq); 401 rv = -EBUSY;
405 return -EBUSY; 402 goto err;
406 } 403 }
407 404
408 /* Remap registers */ 405 /* Remap registers */
409 ata_regs = ioremap(res_mem.start, sizeof(struct mpc52xx_ata)); 406 ata_regs = devm_ioremap(&op->dev, res_mem.start,
407 sizeof(struct mpc52xx_ata));
410 if (!ata_regs) { 408 if (!ata_regs) {
411 printk(KERN_ERR DRV_NAME ": " 409 printk(KERN_ERR DRV_NAME ": "
412 "Error while mapping register set\n"); 410 "Error while mapping register set\n");
@@ -415,7 +413,8 @@ mpc52xx_ata_probe(struct of_device *op, const struct of_device_id *match)
415 } 413 }
416 414
417 /* Prepare our private structure */ 415 /* Prepare our private structure */
418 priv = kmalloc(sizeof(struct mpc52xx_ata_priv), GFP_ATOMIC); 416 priv = devm_kzalloc(&op->dev, sizeof(struct mpc52xx_ata_priv),
417 GFP_ATOMIC);
419 if (!priv) { 418 if (!priv) {
420 printk(KERN_ERR DRV_NAME ": " 419 printk(KERN_ERR DRV_NAME ": "
421 "Error while allocating private structure\n"); 420 "Error while allocating private structure\n");
@@ -448,15 +447,7 @@ mpc52xx_ata_probe(struct of_device *op, const struct of_device_id *match)
448 447
449 /* Error path */ 448 /* Error path */
450err: 449err:
451 kfree(priv);
452
453 if (ata_regs)
454 iounmap(ata_regs);
455
456 release_mem_region(res_mem.start, sizeof(struct mpc52xx_ata));
457
458 irq_dispose_mapping(ata_irq); 450 irq_dispose_mapping(ata_irq);
459
460 return rv; 451 return rv;
461} 452}
462 453
@@ -464,28 +455,10 @@ static int
464mpc52xx_ata_remove(struct of_device *op) 455mpc52xx_ata_remove(struct of_device *op)
465{ 456{
466 struct mpc52xx_ata_priv *priv; 457 struct mpc52xx_ata_priv *priv;
467 struct resource res_mem;
468 int rv;
469 458
470 /* Unregister */
471 priv = mpc52xx_ata_remove_one(&op->dev); 459 priv = mpc52xx_ata_remove_one(&op->dev);
472
473 /* Free everything */
474 iounmap(priv->ata_regs);
475
476 rv = of_address_to_resource(op->node, 0, &res_mem);
477 if (rv) {
478 printk(KERN_ERR DRV_NAME ": "
479 "Error while parsing device node resource\n");
480 printk(KERN_ERR DRV_NAME ": "
481 "Zone may not be properly released\n");
482 } else
483 release_mem_region(res_mem.start, sizeof(struct mpc52xx_ata));
484
485 irq_dispose_mapping(priv->ata_irq); 460 irq_dispose_mapping(priv->ata_irq);
486 461
487 kfree(priv);
488
489 return 0; 462 return 0;
490} 463}
491 464
diff --git a/drivers/ata/pata_mpiix.c b/drivers/ata/pata_mpiix.c
index 4ccca938675e..c4a1b10f3bca 100644
--- a/drivers/ata/pata_mpiix.c
+++ b/drivers/ata/pata_mpiix.c
@@ -194,8 +194,6 @@ static struct ata_port_operations mpiix_port_ops = {
194 .irq_clear = ata_bmdma_irq_clear, 194 .irq_clear = ata_bmdma_irq_clear,
195 195
196 .port_start = ata_port_start, 196 .port_start = ata_port_start,
197 .port_stop = ata_port_stop,
198 .host_stop = ata_host_stop
199}; 197};
200 198
201static int mpiix_init_one(struct pci_dev *dev, const struct pci_device_id *id) 199static int mpiix_init_one(struct pci_dev *dev, const struct pci_device_id *id)
@@ -258,24 +256,6 @@ static int mpiix_init_one(struct pci_dev *dev, const struct pci_device_id *id)
258 return -ENODEV; 256 return -ENODEV;
259} 257}
260 258
261/**
262 * mpiix_remove_one - device unload
263 * @pdev: PCI device being removed
264 *
265 * Handle an unplug/unload event for a PCI device. Unload the
266 * PCI driver but do not use the default handler as we *MUST NOT*
267 * disable the device as it has other functions.
268 */
269
270static void __devexit mpiix_remove_one(struct pci_dev *pdev)
271{
272 struct device *dev = pci_dev_to_dev(pdev);
273 struct ata_host *host = dev_get_drvdata(dev);
274
275 ata_host_remove(host);
276 dev_set_drvdata(dev, NULL);
277}
278
279static const struct pci_device_id mpiix[] = { 259static const struct pci_device_id mpiix[] = {
280 { PCI_VDEVICE(INTEL, PCI_DEVICE_ID_INTEL_82371MX), }, 260 { PCI_VDEVICE(INTEL, PCI_DEVICE_ID_INTEL_82371MX), },
281 261
@@ -286,7 +266,7 @@ static struct pci_driver mpiix_pci_driver = {
286 .name = DRV_NAME, 266 .name = DRV_NAME,
287 .id_table = mpiix, 267 .id_table = mpiix,
288 .probe = mpiix_init_one, 268 .probe = mpiix_init_one,
289 .remove = mpiix_remove_one, 269 .remove = ata_pci_remove_one,
290 .suspend = ata_pci_device_suspend, 270 .suspend = ata_pci_device_suspend,
291 .resume = ata_pci_device_resume, 271 .resume = ata_pci_device_resume,
292}; 272};
diff --git a/drivers/ata/pata_netcell.c b/drivers/ata/pata_netcell.c
index cf7fe037471c..2a2f8df70582 100644
--- a/drivers/ata/pata_netcell.c
+++ b/drivers/ata/pata_netcell.c
@@ -97,8 +97,6 @@ static const struct ata_port_operations netcell_ops = {
97 97
98 /* Generic PATA PCI ATA helpers */ 98 /* Generic PATA PCI ATA helpers */
99 .port_start = ata_port_start, 99 .port_start = ata_port_start,
100 .port_stop = ata_port_stop,
101 .host_stop = ata_host_stop,
102}; 100};
103 101
104 102
diff --git a/drivers/ata/pata_ns87410.c b/drivers/ata/pata_ns87410.c
index c3032eb9010d..fdafd92c92a9 100644
--- a/drivers/ata/pata_ns87410.c
+++ b/drivers/ata/pata_ns87410.c
@@ -185,8 +185,6 @@ static struct ata_port_operations ns87410_port_ops = {
185 .irq_clear = ata_bmdma_irq_clear, 185 .irq_clear = ata_bmdma_irq_clear,
186 186
187 .port_start = ata_port_start, 187 .port_start = ata_port_start,
188 .port_stop = ata_port_stop,
189 .host_stop = ata_host_stop
190}; 188};
191 189
192static int ns87410_init_one(struct pci_dev *dev, const struct pci_device_id *id) 190static int ns87410_init_one(struct pci_dev *dev, const struct pci_device_id *id)
diff --git a/drivers/ata/pata_oldpiix.c b/drivers/ata/pata_oldpiix.c
index 10ac3cc10181..df9f7fd4b4e5 100644
--- a/drivers/ata/pata_oldpiix.c
+++ b/drivers/ata/pata_oldpiix.c
@@ -265,8 +265,6 @@ static const struct ata_port_operations oldpiix_pata_ops = {
265 .irq_clear = ata_bmdma_irq_clear, 265 .irq_clear = ata_bmdma_irq_clear,
266 266
267 .port_start = ata_port_start, 267 .port_start = ata_port_start,
268 .port_stop = ata_port_stop,
269 .host_stop = ata_host_stop,
270}; 268};
271 269
272 270
diff --git a/drivers/ata/pata_opti.c b/drivers/ata/pata_opti.c
index c2988b0aa8ea..58951ccd1e4d 100644
--- a/drivers/ata/pata_opti.c
+++ b/drivers/ata/pata_opti.c
@@ -211,8 +211,6 @@ static struct ata_port_operations opti_port_ops = {
211 .irq_clear = ata_bmdma_irq_clear, 211 .irq_clear = ata_bmdma_irq_clear,
212 212
213 .port_start = ata_port_start, 213 .port_start = ata_port_start,
214 .port_stop = ata_port_stop,
215 .host_stop = ata_host_stop
216}; 214};
217 215
218static int opti_init_one(struct pci_dev *dev, const struct pci_device_id *id) 216static int opti_init_one(struct pci_dev *dev, const struct pci_device_id *id)
diff --git a/drivers/ata/pata_optidma.c b/drivers/ata/pata_optidma.c
index 80d111c569dc..74d2e7a28da0 100644
--- a/drivers/ata/pata_optidma.c
+++ b/drivers/ata/pata_optidma.c
@@ -395,8 +395,6 @@ static struct ata_port_operations optidma_port_ops = {
395 .irq_clear = ata_bmdma_irq_clear, 395 .irq_clear = ata_bmdma_irq_clear,
396 396
397 .port_start = ata_port_start, 397 .port_start = ata_port_start,
398 .port_stop = ata_port_stop,
399 .host_stop = ata_host_stop
400}; 398};
401 399
402static struct ata_port_operations optiplus_port_ops = { 400static struct ata_port_operations optiplus_port_ops = {
@@ -430,8 +428,6 @@ static struct ata_port_operations optiplus_port_ops = {
430 .irq_clear = ata_bmdma_irq_clear, 428 .irq_clear = ata_bmdma_irq_clear,
431 429
432 .port_start = ata_port_start, 430 .port_start = ata_port_start,
433 .port_stop = ata_port_stop,
434 .host_stop = ata_host_stop
435}; 431};
436 432
437/** 433/**
diff --git a/drivers/ata/pata_pcmcia.c b/drivers/ata/pata_pcmcia.c
index 9ed7f58424a3..5a9b24950f99 100644
--- a/drivers/ata/pata_pcmcia.c
+++ b/drivers/ata/pata_pcmcia.c
@@ -94,8 +94,6 @@ static struct ata_port_operations pcmcia_port_ops = {
94 .irq_clear = ata_bmdma_irq_clear, 94 .irq_clear = ata_bmdma_irq_clear,
95 95
96 .port_start = ata_port_start, 96 .port_start = ata_port_start,
97 .port_stop = ata_port_stop,
98 .host_stop = ata_host_stop
99}; 97};
100 98
101#define CS_CHECK(fn, ret) \ 99#define CS_CHECK(fn, ret) \
@@ -298,7 +296,7 @@ static void pcmcia_remove_one(struct pcmcia_device *pdev)
298 /* If we have attached the device to the ATA layer, detach it */ 296 /* If we have attached the device to the ATA layer, detach it */
299 if (info->ndev) { 297 if (info->ndev) {
300 struct ata_host *host = dev_get_drvdata(dev); 298 struct ata_host *host = dev_get_drvdata(dev);
301 ata_host_remove(host); 299 ata_host_detach(host);
302 dev_set_drvdata(dev, NULL); 300 dev_set_drvdata(dev, NULL);
303 } 301 }
304 info->ndev = 0; 302 info->ndev = 0;
diff --git a/drivers/ata/pata_pdc2027x.c b/drivers/ata/pata_pdc2027x.c
index 76dd1c935dbd..1c106b866c79 100644
--- a/drivers/ata/pata_pdc2027x.c
+++ b/drivers/ata/pata_pdc2027x.c
@@ -33,7 +33,6 @@
33#include <scsi/scsi_host.h> 33#include <scsi/scsi_host.h>
34#include <scsi/scsi_cmnd.h> 34#include <scsi/scsi_cmnd.h>
35#include <linux/libata.h> 35#include <linux/libata.h>
36#include <asm/io.h>
37 36
38#define DRV_NAME "pata_pdc2027x" 37#define DRV_NAME "pata_pdc2027x"
39#define DRV_VERSION "0.74-ac5" 38#define DRV_VERSION "0.74-ac5"
@@ -62,7 +61,6 @@ enum {
62}; 61};
63 62
64static int pdc2027x_init_one(struct pci_dev *pdev, const struct pci_device_id *ent); 63static int pdc2027x_init_one(struct pci_dev *pdev, const struct pci_device_id *ent);
65static void pdc2027x_remove_one(struct pci_dev *pdev);
66static void pdc2027x_error_handler(struct ata_port *ap); 64static void pdc2027x_error_handler(struct ata_port *ap);
67static void pdc2027x_set_piomode(struct ata_port *ap, struct ata_device *adev); 65static void pdc2027x_set_piomode(struct ata_port *ap, struct ata_device *adev);
68static void pdc2027x_set_dmamode(struct ata_port *ap, struct ata_device *adev); 66static void pdc2027x_set_dmamode(struct ata_port *ap, struct ata_device *adev);
@@ -123,7 +121,7 @@ static struct pci_driver pdc2027x_pci_driver = {
123 .name = DRV_NAME, 121 .name = DRV_NAME,
124 .id_table = pdc2027x_pci_tbl, 122 .id_table = pdc2027x_pci_tbl,
125 .probe = pdc2027x_init_one, 123 .probe = pdc2027x_init_one,
126 .remove = __devexit_p(pdc2027x_remove_one), 124 .remove = ata_pci_remove_one,
127}; 125};
128 126
129static struct scsi_host_template pdc2027x_sht = { 127static struct scsi_host_template pdc2027x_sht = {
@@ -171,8 +169,6 @@ static struct ata_port_operations pdc2027x_pata100_ops = {
171 .irq_clear = ata_bmdma_irq_clear, 169 .irq_clear = ata_bmdma_irq_clear,
172 170
173 .port_start = ata_port_start, 171 .port_start = ata_port_start,
174 .port_stop = ata_port_stop,
175 .host_stop = ata_pci_host_stop,
176}; 172};
177 173
178static struct ata_port_operations pdc2027x_pata133_ops = { 174static struct ata_port_operations pdc2027x_pata133_ops = {
@@ -205,8 +201,6 @@ static struct ata_port_operations pdc2027x_pata133_ops = {
205 .irq_clear = ata_bmdma_irq_clear, 201 .irq_clear = ata_bmdma_irq_clear,
206 202
207 .port_start = ata_port_start, 203 .port_start = ata_port_start,
208 .port_stop = ata_port_stop,
209 .host_stop = ata_pci_host_stop,
210}; 204};
211 205
212static struct ata_port_info pdc2027x_port_info[] = { 206static struct ata_port_info pdc2027x_port_info[] = {
@@ -755,7 +749,7 @@ static int __devinit pdc2027x_init_one(struct pci_dev *pdev, const struct pci_de
755 static int printed_version; 749 static int printed_version;
756 unsigned int board_idx = (unsigned int) ent->driver_data; 750 unsigned int board_idx = (unsigned int) ent->driver_data;
757 751
758 struct ata_probe_ent *probe_ent = NULL; 752 struct ata_probe_ent *probe_ent;
759 unsigned long base; 753 unsigned long base;
760 void __iomem *mmio_base; 754 void __iomem *mmio_base;
761 int rc; 755 int rc;
@@ -763,37 +757,33 @@ static int __devinit pdc2027x_init_one(struct pci_dev *pdev, const struct pci_de
763 if (!printed_version++) 757 if (!printed_version++)
764 dev_printk(KERN_DEBUG, &pdev->dev, "version " DRV_VERSION "\n"); 758 dev_printk(KERN_DEBUG, &pdev->dev, "version " DRV_VERSION "\n");
765 759
766 rc = pci_enable_device(pdev); 760 rc = pcim_enable_device(pdev);
767 if (rc) 761 if (rc)
768 return rc; 762 return rc;
769 763
770 rc = pci_request_regions(pdev, DRV_NAME); 764 rc = pci_request_regions(pdev, DRV_NAME);
771 if (rc) 765 if (rc)
772 goto err_out; 766 return rc;
773 767
774 rc = pci_set_dma_mask(pdev, ATA_DMA_MASK); 768 rc = pci_set_dma_mask(pdev, ATA_DMA_MASK);
775 if (rc) 769 if (rc)
776 goto err_out_regions; 770 return rc;
777 771
778 rc = pci_set_consistent_dma_mask(pdev, ATA_DMA_MASK); 772 rc = pci_set_consistent_dma_mask(pdev, ATA_DMA_MASK);
779 if (rc) 773 if (rc)
780 goto err_out_regions; 774 return rc;
781 775
782 /* Prepare the probe entry */ 776 /* Prepare the probe entry */
783 probe_ent = kzalloc(sizeof(*probe_ent), GFP_KERNEL); 777 probe_ent = devm_kzalloc(&pdev->dev, sizeof(*probe_ent), GFP_KERNEL);
784 if (probe_ent == NULL) { 778 if (probe_ent == NULL)
785 rc = -ENOMEM; 779 return -ENOMEM;
786 goto err_out_regions;
787 }
788 780
789 probe_ent->dev = pci_dev_to_dev(pdev); 781 probe_ent->dev = pci_dev_to_dev(pdev);
790 INIT_LIST_HEAD(&probe_ent->node); 782 INIT_LIST_HEAD(&probe_ent->node);
791 783
792 mmio_base = pci_iomap(pdev, 5, 0); 784 mmio_base = pcim_iomap(pdev, 5, 0);
793 if (!mmio_base) { 785 if (!mmio_base)
794 rc = -ENOMEM; 786 return -ENOMEM;
795 goto err_out_free_ent;
796 }
797 787
798 base = (unsigned long) mmio_base; 788 base = (unsigned long) mmio_base;
799 789
@@ -820,32 +810,13 @@ static int __devinit pdc2027x_init_one(struct pci_dev *pdev, const struct pci_de
820 810
821 /* initialize adapter */ 811 /* initialize adapter */
822 if (pdc_hardware_init(pdev, probe_ent, board_idx) != 0) 812 if (pdc_hardware_init(pdev, probe_ent, board_idx) != 0)
823 goto err_out_free_ent; 813 return -EIO;
824 814
825 ata_device_add(probe_ent); 815 if (!ata_device_add(probe_ent))
826 kfree(probe_ent); 816 return -ENODEV;
827 817
818 devm_kfree(&pdev->dev, probe_ent);
828 return 0; 819 return 0;
829
830err_out_free_ent:
831 kfree(probe_ent);
832err_out_regions:
833 pci_release_regions(pdev);
834err_out:
835 pci_disable_device(pdev);
836 return rc;
837}
838
839/**
840 * pdc2027x_remove_one - Called to remove a single instance of the
841 * adapter.
842 *
843 * @dev: The PCI device to remove.
844 * FIXME: module load/unload not working yet
845 */
846static void __devexit pdc2027x_remove_one(struct pci_dev *pdev)
847{
848 ata_pci_remove_one(pdev);
849} 820}
850 821
851/** 822/**
diff --git a/drivers/ata/pata_pdc202xx_old.c b/drivers/ata/pata_pdc202xx_old.c
index ba982ba68ad5..c52e1e8aa2d2 100644
--- a/drivers/ata/pata_pdc202xx_old.c
+++ b/drivers/ata/pata_pdc202xx_old.c
@@ -300,8 +300,6 @@ static struct ata_port_operations pdc2024x_port_ops = {
300 .irq_clear = ata_bmdma_irq_clear, 300 .irq_clear = ata_bmdma_irq_clear,
301 301
302 .port_start = ata_port_start, 302 .port_start = ata_port_start,
303 .port_stop = ata_port_stop,
304 .host_stop = ata_host_stop
305}; 303};
306 304
307static struct ata_port_operations pdc2026x_port_ops = { 305static struct ata_port_operations pdc2026x_port_ops = {
@@ -334,8 +332,6 @@ static struct ata_port_operations pdc2026x_port_ops = {
334 .irq_clear = ata_bmdma_irq_clear, 332 .irq_clear = ata_bmdma_irq_clear,
335 333
336 .port_start = ata_port_start, 334 .port_start = ata_port_start,
337 .port_stop = ata_port_stop,
338 .host_stop = ata_host_stop
339}; 335};
340 336
341static int pdc202xx_init_one(struct pci_dev *dev, const struct pci_device_id *id) 337static int pdc202xx_init_one(struct pci_dev *dev, const struct pci_device_id *id)
diff --git a/drivers/ata/pata_qdi.c b/drivers/ata/pata_qdi.c
index afc0d990e7d6..4413960042a9 100644
--- a/drivers/ata/pata_qdi.c
+++ b/drivers/ata/pata_qdi.c
@@ -191,8 +191,6 @@ static struct ata_port_operations qdi6500_port_ops = {
191 .irq_clear = ata_bmdma_irq_clear, 191 .irq_clear = ata_bmdma_irq_clear,
192 192
193 .port_start = ata_port_start, 193 .port_start = ata_port_start,
194 .port_stop = ata_port_stop,
195 .host_stop = ata_host_stop
196}; 194};
197 195
198static struct ata_port_operations qdi6580_port_ops = { 196static struct ata_port_operations qdi6580_port_ops = {
@@ -219,8 +217,6 @@ static struct ata_port_operations qdi6580_port_ops = {
219 .irq_clear = ata_bmdma_irq_clear, 217 .irq_clear = ata_bmdma_irq_clear,
220 218
221 .port_start = ata_port_start, 219 .port_start = ata_port_start,
222 .port_stop = ata_port_stop,
223 .host_stop = ata_host_stop
224}; 220};
225 221
226/** 222/**
@@ -382,7 +378,7 @@ static __exit void qdi_exit(void)
382 int i; 378 int i;
383 379
384 for (i = 0; i < nr_qdi_host; i++) { 380 for (i = 0; i < nr_qdi_host; i++) {
385 ata_host_remove(qdi_host[i]); 381 ata_host_detach(qdi_host[i]);
386 /* Free the control resource. The 6580 dual channel has the resources 382 /* Free the control resource. The 6580 dual channel has the resources
387 * claimed as a pair of 2 byte resources so we need no special cases... 383 * claimed as a pair of 2 byte resources so we need no special cases...
388 */ 384 */
diff --git a/drivers/ata/pata_radisys.c b/drivers/ata/pata_radisys.c
index 065541d034ad..ca9c97056c1b 100644
--- a/drivers/ata/pata_radisys.c
+++ b/drivers/ata/pata_radisys.c
@@ -261,8 +261,6 @@ static const struct ata_port_operations radisys_pata_ops = {
261 .irq_clear = ata_bmdma_irq_clear, 261 .irq_clear = ata_bmdma_irq_clear,
262 262
263 .port_start = ata_port_start, 263 .port_start = ata_port_start,
264 .port_stop = ata_port_stop,
265 .host_stop = ata_host_stop,
266}; 264};
267 265
268 266
diff --git a/drivers/ata/pata_rz1000.c b/drivers/ata/pata_rz1000.c
index cec0729225e1..c99331bbbdd9 100644
--- a/drivers/ata/pata_rz1000.c
+++ b/drivers/ata/pata_rz1000.c
@@ -126,8 +126,6 @@ static struct ata_port_operations rz1000_port_ops = {
126 .irq_clear = ata_bmdma_irq_clear, 126 .irq_clear = ata_bmdma_irq_clear,
127 127
128 .port_start = ata_port_start, 128 .port_start = ata_port_start,
129 .port_stop = ata_port_stop,
130 .host_stop = ata_host_stop
131}; 129};
132 130
133static int rz1000_fifo_disable(struct pci_dev *pdev) 131static int rz1000_fifo_disable(struct pci_dev *pdev)
diff --git a/drivers/ata/pata_sc1200.c b/drivers/ata/pata_sc1200.c
index a3b35bc50394..75638ccc0183 100644
--- a/drivers/ata/pata_sc1200.c
+++ b/drivers/ata/pata_sc1200.c
@@ -226,8 +226,6 @@ static struct ata_port_operations sc1200_port_ops = {
226 .irq_clear = ata_bmdma_irq_clear, 226 .irq_clear = ata_bmdma_irq_clear,
227 227
228 .port_start = ata_port_start, 228 .port_start = ata_port_start,
229 .port_stop = ata_port_stop,
230 .host_stop = ata_host_stop
231}; 229};
232 230
233/** 231/**
diff --git a/drivers/ata/pata_serverworks.c b/drivers/ata/pata_serverworks.c
index 4b8c2352cdca..46ea1e8af4f4 100644
--- a/drivers/ata/pata_serverworks.c
+++ b/drivers/ata/pata_serverworks.c
@@ -354,8 +354,6 @@ static struct ata_port_operations serverworks_osb4_port_ops = {
354 .irq_clear = ata_bmdma_irq_clear, 354 .irq_clear = ata_bmdma_irq_clear,
355 355
356 .port_start = ata_port_start, 356 .port_start = ata_port_start,
357 .port_stop = ata_port_stop,
358 .host_stop = ata_host_stop
359}; 357};
360 358
361static struct ata_port_operations serverworks_csb_port_ops = { 359static struct ata_port_operations serverworks_csb_port_ops = {
@@ -389,8 +387,6 @@ static struct ata_port_operations serverworks_csb_port_ops = {
389 .irq_clear = ata_bmdma_irq_clear, 387 .irq_clear = ata_bmdma_irq_clear,
390 388
391 .port_start = ata_port_start, 389 .port_start = ata_port_start,
392 .port_stop = ata_port_stop,
393 .host_stop = ata_host_stop
394}; 390};
395 391
396static int serverworks_fixup_osb4(struct pci_dev *pdev) 392static int serverworks_fixup_osb4(struct pci_dev *pdev)
diff --git a/drivers/ata/pata_sil680.c b/drivers/ata/pata_sil680.c
index 11da1f5271d5..955c1d3a5739 100644
--- a/drivers/ata/pata_sil680.c
+++ b/drivers/ata/pata_sil680.c
@@ -258,8 +258,6 @@ static struct ata_port_operations sil680_port_ops = {
258 .irq_clear = ata_bmdma_irq_clear, 258 .irq_clear = ata_bmdma_irq_clear,
259 259
260 .port_start = ata_port_start, 260 .port_start = ata_port_start,
261 .port_stop = ata_port_stop,
262 .host_stop = ata_host_stop
263}; 261};
264 262
265/** 263/**
diff --git a/drivers/ata/pata_sis.c b/drivers/ata/pata_sis.c
index 5e616d3cc870..1c5219f3ffde 100644
--- a/drivers/ata/pata_sis.c
+++ b/drivers/ata/pata_sis.c
@@ -608,8 +608,6 @@ static const struct ata_port_operations sis_133_ops = {
608 .irq_clear = ata_bmdma_irq_clear, 608 .irq_clear = ata_bmdma_irq_clear,
609 609
610 .port_start = ata_port_start, 610 .port_start = ata_port_start,
611 .port_stop = ata_port_stop,
612 .host_stop = ata_host_stop,
613}; 611};
614 612
615static const struct ata_port_operations sis_133_early_ops = { 613static const struct ata_port_operations sis_133_early_ops = {
@@ -641,8 +639,6 @@ static const struct ata_port_operations sis_133_early_ops = {
641 .irq_clear = ata_bmdma_irq_clear, 639 .irq_clear = ata_bmdma_irq_clear,
642 640
643 .port_start = ata_port_start, 641 .port_start = ata_port_start,
644 .port_stop = ata_port_stop,
645 .host_stop = ata_host_stop,
646}; 642};
647 643
648static const struct ata_port_operations sis_100_ops = { 644static const struct ata_port_operations sis_100_ops = {
@@ -675,8 +671,6 @@ static const struct ata_port_operations sis_100_ops = {
675 .irq_clear = ata_bmdma_irq_clear, 671 .irq_clear = ata_bmdma_irq_clear,
676 672
677 .port_start = ata_port_start, 673 .port_start = ata_port_start,
678 .port_stop = ata_port_stop,
679 .host_stop = ata_host_stop,
680}; 674};
681 675
682static const struct ata_port_operations sis_66_ops = { 676static const struct ata_port_operations sis_66_ops = {
@@ -708,8 +702,6 @@ static const struct ata_port_operations sis_66_ops = {
708 .irq_clear = ata_bmdma_irq_clear, 702 .irq_clear = ata_bmdma_irq_clear,
709 703
710 .port_start = ata_port_start, 704 .port_start = ata_port_start,
711 .port_stop = ata_port_stop,
712 .host_stop = ata_host_stop,
713}; 705};
714 706
715static const struct ata_port_operations sis_old_ops = { 707static const struct ata_port_operations sis_old_ops = {
@@ -741,8 +733,6 @@ static const struct ata_port_operations sis_old_ops = {
741 .irq_clear = ata_bmdma_irq_clear, 733 .irq_clear = ata_bmdma_irq_clear,
742 734
743 .port_start = ata_port_start, 735 .port_start = ata_port_start,
744 .port_stop = ata_port_stop,
745 .host_stop = ata_host_stop,
746}; 736};
747 737
748static struct ata_port_info sis_info = { 738static struct ata_port_info sis_info = {
diff --git a/drivers/ata/pata_sl82c105.c b/drivers/ata/pata_sl82c105.c
index e94f515ef54b..d118a1822c45 100644
--- a/drivers/ata/pata_sl82c105.c
+++ b/drivers/ata/pata_sl82c105.c
@@ -268,8 +268,6 @@ static struct ata_port_operations sl82c105_port_ops = {
268 .irq_clear = ata_bmdma_irq_clear, 268 .irq_clear = ata_bmdma_irq_clear,
269 269
270 .port_start = ata_port_start, 270 .port_start = ata_port_start,
271 .port_stop = ata_port_stop,
272 .host_stop = ata_host_stop
273}; 271};
274 272
275/** 273/**
diff --git a/drivers/ata/pata_triflex.c b/drivers/ata/pata_triflex.c
index a142971f1307..57385a2f8286 100644
--- a/drivers/ata/pata_triflex.c
+++ b/drivers/ata/pata_triflex.c
@@ -227,8 +227,6 @@ static struct ata_port_operations triflex_port_ops = {
227 .irq_clear = ata_bmdma_irq_clear, 227 .irq_clear = ata_bmdma_irq_clear,
228 228
229 .port_start = ata_port_start, 229 .port_start = ata_port_start,
230 .port_stop = ata_port_stop,
231 .host_stop = ata_host_stop
232}; 230};
233 231
234static int triflex_init_one(struct pci_dev *dev, const struct pci_device_id *id) 232static int triflex_init_one(struct pci_dev *dev, const struct pci_device_id *id)
diff --git a/drivers/ata/pata_via.c b/drivers/ata/pata_via.c
index 2addce11000a..2b262363b96a 100644
--- a/drivers/ata/pata_via.c
+++ b/drivers/ata/pata_via.c
@@ -340,8 +340,6 @@ static struct ata_port_operations via_port_ops = {
340 .irq_clear = ata_bmdma_irq_clear, 340 .irq_clear = ata_bmdma_irq_clear,
341 341
342 .port_start = ata_port_start, 342 .port_start = ata_port_start,
343 .port_stop = ata_port_stop,
344 .host_stop = ata_host_stop
345}; 343};
346 344
347static struct ata_port_operations via_port_ops_noirq = { 345static struct ata_port_operations via_port_ops_noirq = {
@@ -375,8 +373,6 @@ static struct ata_port_operations via_port_ops_noirq = {
375 .irq_clear = ata_bmdma_irq_clear, 373 .irq_clear = ata_bmdma_irq_clear,
376 374
377 .port_start = ata_port_start, 375 .port_start = ata_port_start,
378 .port_stop = ata_port_stop,
379 .host_stop = ata_host_stop
380}; 376};
381 377
382/** 378/**
diff --git a/drivers/ata/pata_winbond.c b/drivers/ata/pata_winbond.c
index 022da95a3389..bba04a6e3708 100644
--- a/drivers/ata/pata_winbond.c
+++ b/drivers/ata/pata_winbond.c
@@ -160,8 +160,6 @@ static struct ata_port_operations winbond_port_ops = {
160 .irq_clear = ata_bmdma_irq_clear, 160 .irq_clear = ata_bmdma_irq_clear,
161 161
162 .port_start = ata_port_start, 162 .port_start = ata_port_start,
163 .port_stop = ata_port_stop,
164 .host_stop = ata_host_stop
165}; 163};
166 164
167/** 165/**
@@ -288,7 +286,7 @@ static __exit void winbond_exit(void)
288 int i; 286 int i;
289 287
290 for (i = 0; i < nr_winbond_host; i++) { 288 for (i = 0; i < nr_winbond_host; i++) {
291 ata_host_remove(winbond_host[i]); 289 ata_host_detach(winbond_host[i]);
292 release_region(winbond_data[i].config, 2); 290 release_region(winbond_data[i].config, 2);
293 platform_device_unregister(winbond_data[i].platform_dev); 291 platform_device_unregister(winbond_data[i].platform_dev);
294 } 292 }
diff --git a/drivers/ata/pdc_adma.c b/drivers/ata/pdc_adma.c
index 90786d7a20bb..a6bf7cbdfdc5 100644
--- a/drivers/ata/pdc_adma.c
+++ b/drivers/ata/pdc_adma.c
@@ -42,7 +42,6 @@
42#include <linux/sched.h> 42#include <linux/sched.h>
43#include <linux/device.h> 43#include <linux/device.h>
44#include <scsi/scsi_host.h> 44#include <scsi/scsi_host.h>
45#include <asm/io.h>
46#include <linux/libata.h> 45#include <linux/libata.h>
47 46
48#define DRV_NAME "pdc_adma" 47#define DRV_NAME "pdc_adma"
@@ -550,48 +549,28 @@ static int adma_port_start(struct ata_port *ap)
550 if (rc) 549 if (rc)
551 return rc; 550 return rc;
552 adma_enter_reg_mode(ap); 551 adma_enter_reg_mode(ap);
553 rc = -ENOMEM; 552 pp = devm_kzalloc(dev, sizeof(*pp), GFP_KERNEL);
554 pp = kzalloc(sizeof(*pp), GFP_KERNEL);
555 if (!pp) 553 if (!pp)
556 goto err_out; 554 return -ENOMEM;
557 pp->pkt = dma_alloc_coherent(dev, ADMA_PKT_BYTES, &pp->pkt_dma, 555 pp->pkt = dmam_alloc_coherent(dev, ADMA_PKT_BYTES, &pp->pkt_dma,
558 GFP_KERNEL); 556 GFP_KERNEL);
559 if (!pp->pkt) 557 if (!pp->pkt)
560 goto err_out_kfree; 558 return -ENOMEM;
561 /* paranoia? */ 559 /* paranoia? */
562 if ((pp->pkt_dma & 7) != 0) { 560 if ((pp->pkt_dma & 7) != 0) {
563 printk("bad alignment for pp->pkt_dma: %08x\n", 561 printk("bad alignment for pp->pkt_dma: %08x\n",
564 (u32)pp->pkt_dma); 562 (u32)pp->pkt_dma);
565 dma_free_coherent(dev, ADMA_PKT_BYTES, 563 return -ENOMEM;
566 pp->pkt, pp->pkt_dma);
567 goto err_out_kfree;
568 } 564 }
569 memset(pp->pkt, 0, ADMA_PKT_BYTES); 565 memset(pp->pkt, 0, ADMA_PKT_BYTES);
570 ap->private_data = pp; 566 ap->private_data = pp;
571 adma_reinit_engine(ap); 567 adma_reinit_engine(ap);
572 return 0; 568 return 0;
573
574err_out_kfree:
575 kfree(pp);
576err_out:
577 ata_port_stop(ap);
578 return rc;
579} 569}
580 570
581static void adma_port_stop(struct ata_port *ap) 571static void adma_port_stop(struct ata_port *ap)
582{ 572{
583 struct device *dev = ap->host->dev;
584 struct adma_port_priv *pp = ap->private_data;
585
586 adma_reset_engine(ADMA_REGS(ap->host->mmio_base, ap->port_no)); 573 adma_reset_engine(ADMA_REGS(ap->host->mmio_base, ap->port_no));
587 if (pp != NULL) {
588 ap->private_data = NULL;
589 if (pp->pkt != NULL)
590 dma_free_coherent(dev, ADMA_PKT_BYTES,
591 pp->pkt, pp->pkt_dma);
592 kfree(pp);
593 }
594 ata_port_stop(ap);
595} 574}
596 575
597static void adma_host_stop(struct ata_host *host) 576static void adma_host_stop(struct ata_host *host)
@@ -600,8 +579,6 @@ static void adma_host_stop(struct ata_host *host)
600 579
601 for (port_no = 0; port_no < ADMA_PORTS; ++port_no) 580 for (port_no = 0; port_no < ADMA_PORTS; ++port_no)
602 adma_reset_engine(ADMA_REGS(host->mmio_base, port_no)); 581 adma_reset_engine(ADMA_REGS(host->mmio_base, port_no));
603
604 ata_pci_host_stop(host);
605} 582}
606 583
607static void adma_host_init(unsigned int chip_id, 584static void adma_host_init(unsigned int chip_id,
@@ -649,34 +626,28 @@ static int adma_ata_init_one(struct pci_dev *pdev,
649 if (!printed_version++) 626 if (!printed_version++)
650 dev_printk(KERN_DEBUG, &pdev->dev, "version " DRV_VERSION "\n"); 627 dev_printk(KERN_DEBUG, &pdev->dev, "version " DRV_VERSION "\n");
651 628
652 rc = pci_enable_device(pdev); 629 rc = pcim_enable_device(pdev);
653 if (rc) 630 if (rc)
654 return rc; 631 return rc;
655 632
656 rc = pci_request_regions(pdev, DRV_NAME); 633 rc = pci_request_regions(pdev, DRV_NAME);
657 if (rc) 634 if (rc)
658 goto err_out; 635 return rc;
659 636
660 if ((pci_resource_flags(pdev, 4) & IORESOURCE_MEM) == 0) { 637 if ((pci_resource_flags(pdev, 4) & IORESOURCE_MEM) == 0)
661 rc = -ENODEV; 638 return -ENODEV;
662 goto err_out_regions;
663 }
664 639
665 mmio_base = pci_iomap(pdev, 4, 0); 640 mmio_base = pcim_iomap(pdev, 4, 0);
666 if (mmio_base == NULL) { 641 if (mmio_base == NULL)
667 rc = -ENOMEM; 642 return -ENOMEM;
668 goto err_out_regions;
669 }
670 643
671 rc = adma_set_dma_masks(pdev, mmio_base); 644 rc = adma_set_dma_masks(pdev, mmio_base);
672 if (rc) 645 if (rc)
673 goto err_out_iounmap; 646 return rc;
674 647
675 probe_ent = kzalloc(sizeof(*probe_ent), GFP_KERNEL); 648 probe_ent = devm_kzalloc(&pdev->dev, sizeof(*probe_ent), GFP_KERNEL);
676 if (probe_ent == NULL) { 649 if (probe_ent == NULL)
677 rc = -ENOMEM; 650 return -ENOMEM;
678 goto err_out_iounmap;
679 }
680 651
681 probe_ent->dev = pci_dev_to_dev(pdev); 652 probe_ent->dev = pci_dev_to_dev(pdev);
682 INIT_LIST_HEAD(&probe_ent->node); 653 INIT_LIST_HEAD(&probe_ent->node);
@@ -703,19 +674,11 @@ static int adma_ata_init_one(struct pci_dev *pdev,
703 /* initialize adapter */ 674 /* initialize adapter */
704 adma_host_init(board_idx, probe_ent); 675 adma_host_init(board_idx, probe_ent);
705 676
706 rc = ata_device_add(probe_ent); 677 if (!ata_device_add(probe_ent))
707 kfree(probe_ent); 678 return -ENODEV;
708 if (rc != ADMA_PORTS)
709 goto err_out_iounmap;
710 return 0;
711 679
712err_out_iounmap: 680 devm_kfree(&pdev->dev, probe_ent);
713 pci_iounmap(pdev, mmio_base); 681 return 0;
714err_out_regions:
715 pci_release_regions(pdev);
716err_out:
717 pci_disable_device(pdev);
718 return rc;
719} 682}
720 683
721static int __init adma_ata_init(void) 684static int __init adma_ata_init(void)
diff --git a/drivers/ata/sata_inic162x.c b/drivers/ata/sata_inic162x.c
index b67817e440c5..c98e0227a60c 100644
--- a/drivers/ata/sata_inic162x.c
+++ b/drivers/ata/sata_inic162x.c
@@ -523,7 +523,7 @@ static int inic_port_start(struct ata_port *ap)
523 int rc; 523 int rc;
524 524
525 /* alloc and initialize private data */ 525 /* alloc and initialize private data */
526 pp = kzalloc(sizeof(*pp), GFP_KERNEL); 526 pp = devm_kzalloc(ap->host->dev, sizeof(*pp), GFP_KERNEL);
527 if (!pp) 527 if (!pp)
528 return -ENOMEM; 528 return -ENOMEM;
529 ap->private_data = pp; 529 ap->private_data = pp;
@@ -545,12 +545,6 @@ static int inic_port_start(struct ata_port *ap)
545 return 0; 545 return 0;
546} 546}
547 547
548static void inic_port_stop(struct ata_port *ap)
549{
550 ata_port_stop(ap);
551 kfree(ap->private_data);
552}
553
554static struct ata_port_operations inic_port_ops = { 548static struct ata_port_operations inic_port_ops = {
555 .port_disable = ata_port_disable, 549 .port_disable = ata_port_disable,
556 .tf_load = ata_tf_load, 550 .tf_load = ata_tf_load,
@@ -583,8 +577,6 @@ static struct ata_port_operations inic_port_ops = {
583 .port_resume = inic_port_resume, 577 .port_resume = inic_port_resume,
584 578
585 .port_start = inic_port_start, 579 .port_start = inic_port_start,
586 .port_stop = inic_port_stop,
587 .host_stop = ata_pci_host_stop
588}; 580};
589 581
590static struct ata_port_info inic_port_info = { 582static struct ata_port_info inic_port_info = {
@@ -675,42 +667,37 @@ static int inic_init_one(struct pci_dev *pdev, const struct pci_device_id *ent)
675 if (!printed_version++) 667 if (!printed_version++)
676 dev_printk(KERN_DEBUG, &pdev->dev, "version " DRV_VERSION "\n"); 668 dev_printk(KERN_DEBUG, &pdev->dev, "version " DRV_VERSION "\n");
677 669
678 rc = pci_enable_device(pdev); 670 rc = pcim_enable_device(pdev);
679 if (rc) 671 if (rc)
680 return rc; 672 return rc;
681 673
682 rc = pci_request_regions(pdev, DRV_NAME); 674 rc = pci_request_regions(pdev, DRV_NAME);
683 if (rc) 675 if (rc)
684 goto err_out; 676 return rc;
685 677
686 rc = -ENOMEM;
687 mmio_base = pci_iomap(pdev, MMIO_BAR, 0); 678 mmio_base = pci_iomap(pdev, MMIO_BAR, 0);
688 if (!mmio_base) 679 if (!mmio_base)
689 goto err_out_regions; 680 return -ENOMEM;
690 681
691 /* Set dma_mask. This devices doesn't support 64bit addressing. */ 682 /* Set dma_mask. This devices doesn't support 64bit addressing. */
692 rc = pci_set_dma_mask(pdev, DMA_32BIT_MASK); 683 rc = pci_set_dma_mask(pdev, DMA_32BIT_MASK);
693 if (rc) { 684 if (rc) {
694 dev_printk(KERN_ERR, &pdev->dev, 685 dev_printk(KERN_ERR, &pdev->dev,
695 "32-bit DMA enable failed\n"); 686 "32-bit DMA enable failed\n");
696 goto err_out_map; 687 return rc;
697 } 688 }
698 689
699 rc = pci_set_consistent_dma_mask(pdev, DMA_32BIT_MASK); 690 rc = pci_set_consistent_dma_mask(pdev, DMA_32BIT_MASK);
700 if (rc) { 691 if (rc) {
701 dev_printk(KERN_ERR, &pdev->dev, 692 dev_printk(KERN_ERR, &pdev->dev,
702 "32-bit consistent DMA enable failed\n"); 693 "32-bit consistent DMA enable failed\n");
703 goto err_out_map; 694 return rc;
704 } 695 }
705 696
706 rc = -ENOMEM; 697 probe_ent = devm_kzalloc(&pdev->dev, sizeof(*probe_ent), GFP_KERNEL);
707 probe_ent = kzalloc(sizeof(*probe_ent), GFP_KERNEL); 698 hpriv = devm_kzalloc(&pdev->dev, sizeof(*hpriv), GFP_KERNEL);
708 if (!probe_ent) 699 if (!probe_ent || !hpriv)
709 goto err_out_map; 700 return -ENOMEM;
710
711 hpriv = kzalloc(sizeof(*hpriv), GFP_KERNEL);
712 if (!hpriv)
713 goto err_out_ent;
714 701
715 probe_ent->dev = &pdev->dev; 702 probe_ent->dev = &pdev->dev;
716 INIT_LIST_HEAD(&probe_ent->node); 703 INIT_LIST_HEAD(&probe_ent->node);
@@ -749,30 +736,17 @@ static int inic_init_one(struct pci_dev *pdev, const struct pci_device_id *ent)
749 if (rc) { 736 if (rc) {
750 dev_printk(KERN_ERR, &pdev->dev, 737 dev_printk(KERN_ERR, &pdev->dev,
751 "failed to initialize controller\n"); 738 "failed to initialize controller\n");
752 goto err_out_hpriv; 739 return rc;
753 } 740 }
754 741
755 pci_set_master(pdev); 742 pci_set_master(pdev);
756 743
757 rc = -ENODEV;
758 if (!ata_device_add(probe_ent)) 744 if (!ata_device_add(probe_ent))
759 goto err_out_hpriv; 745 return -ENODEV;
760 746
761 kfree(probe_ent); 747 devm_kfree(&pdev->dev, probe_ent);
762 748
763 return 0; 749 return 0;
764
765 err_out_hpriv:
766 kfree(hpriv);
767 err_out_ent:
768 kfree(probe_ent);
769 err_out_map:
770 pci_iounmap(pdev, mmio_base);
771 err_out_regions:
772 pci_release_regions(pdev);
773 err_out:
774 pci_disable_device(pdev);
775 return rc;
776} 750}
777 751
778static const struct pci_device_id inic_pci_tbl[] = { 752static const struct pci_device_id inic_pci_tbl[] = {
diff --git a/drivers/ata/sata_mv.c b/drivers/ata/sata_mv.c
index aae0b5201c1e..c073e453dcdd 100644
--- a/drivers/ata/sata_mv.c
+++ b/drivers/ata/sata_mv.c
@@ -34,7 +34,6 @@
34#include <scsi/scsi_host.h> 34#include <scsi/scsi_host.h>
35#include <scsi/scsi_cmnd.h> 35#include <scsi/scsi_cmnd.h>
36#include <linux/libata.h> 36#include <linux/libata.h>
37#include <asm/io.h>
38 37
39#define DRV_NAME "sata_mv" 38#define DRV_NAME "sata_mv"
40#define DRV_VERSION "0.7" 39#define DRV_VERSION "0.7"
@@ -342,7 +341,6 @@ static u32 mv5_scr_read(struct ata_port *ap, unsigned int sc_reg_in);
342static void mv5_scr_write(struct ata_port *ap, unsigned int sc_reg_in, u32 val); 341static void mv5_scr_write(struct ata_port *ap, unsigned int sc_reg_in, u32 val);
343static void mv_phy_reset(struct ata_port *ap); 342static void mv_phy_reset(struct ata_port *ap);
344static void __mv_phy_reset(struct ata_port *ap, int can_sleep); 343static void __mv_phy_reset(struct ata_port *ap, int can_sleep);
345static void mv_host_stop(struct ata_host *host);
346static int mv_port_start(struct ata_port *ap); 344static int mv_port_start(struct ata_port *ap);
347static void mv_port_stop(struct ata_port *ap); 345static void mv_port_stop(struct ata_port *ap);
348static void mv_qc_prep(struct ata_queued_cmd *qc); 346static void mv_qc_prep(struct ata_queued_cmd *qc);
@@ -418,7 +416,6 @@ static const struct ata_port_operations mv5_ops = {
418 416
419 .port_start = mv_port_start, 417 .port_start = mv_port_start,
420 .port_stop = mv_port_stop, 418 .port_stop = mv_port_stop,
421 .host_stop = mv_host_stop,
422}; 419};
423 420
424static const struct ata_port_operations mv6_ops = { 421static const struct ata_port_operations mv6_ops = {
@@ -446,7 +443,6 @@ static const struct ata_port_operations mv6_ops = {
446 443
447 .port_start = mv_port_start, 444 .port_start = mv_port_start,
448 .port_stop = mv_port_stop, 445 .port_stop = mv_port_stop,
449 .host_stop = mv_host_stop,
450}; 446};
451 447
452static const struct ata_port_operations mv_iie_ops = { 448static const struct ata_port_operations mv_iie_ops = {
@@ -474,7 +470,6 @@ static const struct ata_port_operations mv_iie_ops = {
474 470
475 .port_start = mv_port_start, 471 .port_start = mv_port_start,
476 .port_stop = mv_port_stop, 472 .port_stop = mv_port_stop,
477 .host_stop = mv_host_stop,
478}; 473};
479 474
480static const struct ata_port_info mv_port_info[] = { 475static const struct ata_port_info mv_port_info[] = {
@@ -809,35 +804,6 @@ static void mv_scr_write(struct ata_port *ap, unsigned int sc_reg_in, u32 val)
809 } 804 }
810} 805}
811 806
812/**
813 * mv_host_stop - Host specific cleanup/stop routine.
814 * @host: host data structure
815 *
816 * Disable ints, cleanup host memory, call general purpose
817 * host_stop.
818 *
819 * LOCKING:
820 * Inherited from caller.
821 */
822static void mv_host_stop(struct ata_host *host)
823{
824 struct mv_host_priv *hpriv = host->private_data;
825 struct pci_dev *pdev = to_pci_dev(host->dev);
826
827 if (hpriv->hp_flags & MV_HP_FLAG_MSI) {
828 pci_disable_msi(pdev);
829 } else {
830 pci_intx(pdev, 0);
831 }
832 kfree(hpriv);
833 ata_host_stop(host);
834}
835
836static inline void mv_priv_free(struct mv_port_priv *pp, struct device *dev)
837{
838 dma_free_coherent(dev, MV_PORT_PRIV_DMA_SZ, pp->crpb, pp->crpb_dma);
839}
840
841static void mv_edma_cfg(struct mv_host_priv *hpriv, void __iomem *port_mmio) 807static void mv_edma_cfg(struct mv_host_priv *hpriv, void __iomem *port_mmio)
842{ 808{
843 u32 cfg = readl(port_mmio + EDMA_CFG_OFS); 809 u32 cfg = readl(port_mmio + EDMA_CFG_OFS);
@@ -883,22 +849,21 @@ static int mv_port_start(struct ata_port *ap)
883 void __iomem *port_mmio = mv_ap_base(ap); 849 void __iomem *port_mmio = mv_ap_base(ap);
884 void *mem; 850 void *mem;
885 dma_addr_t mem_dma; 851 dma_addr_t mem_dma;
886 int rc = -ENOMEM; 852 int rc;
887 853
888 pp = kmalloc(sizeof(*pp), GFP_KERNEL); 854 pp = devm_kzalloc(dev, sizeof(*pp), GFP_KERNEL);
889 if (!pp) 855 if (!pp)
890 goto err_out; 856 return -ENOMEM;
891 memset(pp, 0, sizeof(*pp));
892 857
893 mem = dma_alloc_coherent(dev, MV_PORT_PRIV_DMA_SZ, &mem_dma, 858 mem = dmam_alloc_coherent(dev, MV_PORT_PRIV_DMA_SZ, &mem_dma,
894 GFP_KERNEL); 859 GFP_KERNEL);
895 if (!mem) 860 if (!mem)
896 goto err_out_pp; 861 return -ENOMEM;
897 memset(mem, 0, MV_PORT_PRIV_DMA_SZ); 862 memset(mem, 0, MV_PORT_PRIV_DMA_SZ);
898 863
899 rc = ata_pad_alloc(ap, dev); 864 rc = ata_pad_alloc(ap, dev);
900 if (rc) 865 if (rc)
901 goto err_out_priv; 866 return rc;
902 867
903 /* First item in chunk of DMA memory: 868 /* First item in chunk of DMA memory:
904 * 32-slot command request table (CRQB), 32 bytes each in size 869 * 32-slot command request table (CRQB), 32 bytes each in size
@@ -951,13 +916,6 @@ static int mv_port_start(struct ata_port *ap)
951 */ 916 */
952 ap->private_data = pp; 917 ap->private_data = pp;
953 return 0; 918 return 0;
954
955err_out_priv:
956 mv_priv_free(pp, dev);
957err_out_pp:
958 kfree(pp);
959err_out:
960 return rc;
961} 919}
962 920
963/** 921/**
@@ -971,18 +929,11 @@ err_out:
971 */ 929 */
972static void mv_port_stop(struct ata_port *ap) 930static void mv_port_stop(struct ata_port *ap)
973{ 931{
974 struct device *dev = ap->host->dev;
975 struct mv_port_priv *pp = ap->private_data;
976 unsigned long flags; 932 unsigned long flags;
977 933
978 spin_lock_irqsave(&ap->host->lock, flags); 934 spin_lock_irqsave(&ap->host->lock, flags);
979 mv_stop_dma(ap); 935 mv_stop_dma(ap);
980 spin_unlock_irqrestore(&ap->host->lock, flags); 936 spin_unlock_irqrestore(&ap->host->lock, flags);
981
982 ap->private_data = NULL;
983 ata_pad_free(ap, dev);
984 mv_priv_free(pp, dev);
985 kfree(pp);
986} 937}
987 938
988/** 939/**
@@ -2342,49 +2293,41 @@ static void mv_print_info(struct ata_probe_ent *probe_ent)
2342static int mv_init_one(struct pci_dev *pdev, const struct pci_device_id *ent) 2293static int mv_init_one(struct pci_dev *pdev, const struct pci_device_id *ent)
2343{ 2294{
2344 static int printed_version = 0; 2295 static int printed_version = 0;
2345 struct ata_probe_ent *probe_ent = NULL; 2296 struct device *dev = &pdev->dev;
2297 struct ata_probe_ent *probe_ent;
2346 struct mv_host_priv *hpriv; 2298 struct mv_host_priv *hpriv;
2347 unsigned int board_idx = (unsigned int)ent->driver_data; 2299 unsigned int board_idx = (unsigned int)ent->driver_data;
2348 void __iomem *mmio_base; 2300 void __iomem *mmio_base;
2349 int pci_dev_busy = 0, rc; 2301 int rc;
2350 2302
2351 if (!printed_version++) 2303 if (!printed_version++)
2352 dev_printk(KERN_INFO, &pdev->dev, "version " DRV_VERSION "\n"); 2304 dev_printk(KERN_INFO, &pdev->dev, "version " DRV_VERSION "\n");
2353 2305
2354 rc = pci_enable_device(pdev); 2306 rc = pcim_enable_device(pdev);
2355 if (rc) { 2307 if (rc)
2356 return rc; 2308 return rc;
2357 }
2358 pci_set_master(pdev); 2309 pci_set_master(pdev);
2359 2310
2360 rc = pci_request_regions(pdev, DRV_NAME); 2311 rc = pci_request_regions(pdev, DRV_NAME);
2361 if (rc) { 2312 if (rc) {
2362 pci_dev_busy = 1; 2313 pcim_pin_device(pdev);
2363 goto err_out; 2314 return rc;
2364 } 2315 }
2365 2316
2366 probe_ent = kmalloc(sizeof(*probe_ent), GFP_KERNEL); 2317 probe_ent = devm_kzalloc(dev, sizeof(*probe_ent), GFP_KERNEL);
2367 if (probe_ent == NULL) { 2318 if (probe_ent == NULL)
2368 rc = -ENOMEM; 2319 return -ENOMEM;
2369 goto err_out_regions;
2370 }
2371 2320
2372 memset(probe_ent, 0, sizeof(*probe_ent));
2373 probe_ent->dev = pci_dev_to_dev(pdev); 2321 probe_ent->dev = pci_dev_to_dev(pdev);
2374 INIT_LIST_HEAD(&probe_ent->node); 2322 INIT_LIST_HEAD(&probe_ent->node);
2375 2323
2376 mmio_base = pci_iomap(pdev, MV_PRIMARY_BAR, 0); 2324 mmio_base = pcim_iomap(pdev, MV_PRIMARY_BAR, 0);
2377 if (mmio_base == NULL) { 2325 if (mmio_base == NULL)
2378 rc = -ENOMEM; 2326 return -ENOMEM;
2379 goto err_out_free_ent;
2380 }
2381 2327
2382 hpriv = kmalloc(sizeof(*hpriv), GFP_KERNEL); 2328 hpriv = devm_kzalloc(dev, sizeof(*hpriv), GFP_KERNEL);
2383 if (!hpriv) { 2329 if (!hpriv)
2384 rc = -ENOMEM; 2330 return -ENOMEM;
2385 goto err_out_iounmap;
2386 }
2387 memset(hpriv, 0, sizeof(*hpriv));
2388 2331
2389 probe_ent->sht = mv_port_info[board_idx].sht; 2332 probe_ent->sht = mv_port_info[board_idx].sht;
2390 probe_ent->port_flags = mv_port_info[board_idx].flags; 2333 probe_ent->port_flags = mv_port_info[board_idx].flags;
@@ -2399,48 +2342,21 @@ static int mv_init_one(struct pci_dev *pdev, const struct pci_device_id *ent)
2399 2342
2400 /* initialize adapter */ 2343 /* initialize adapter */
2401 rc = mv_init_host(pdev, probe_ent, board_idx); 2344 rc = mv_init_host(pdev, probe_ent, board_idx);
2402 if (rc) { 2345 if (rc)
2403 goto err_out_hpriv; 2346 return rc;
2404 }
2405 2347
2406 /* Enable interrupts */ 2348 /* Enable interrupts */
2407 if (msi && pci_enable_msi(pdev) == 0) { 2349 if (msi && !pci_enable_msi(pdev))
2408 hpriv->hp_flags |= MV_HP_FLAG_MSI;
2409 } else {
2410 pci_intx(pdev, 1); 2350 pci_intx(pdev, 1);
2411 }
2412 2351
2413 mv_dump_pci_cfg(pdev, 0x68); 2352 mv_dump_pci_cfg(pdev, 0x68);
2414 mv_print_info(probe_ent); 2353 mv_print_info(probe_ent);
2415 2354
2416 if (ata_device_add(probe_ent) == 0) { 2355 if (ata_device_add(probe_ent) == 0)
2417 rc = -ENODEV; /* No devices discovered */ 2356 return -ENODEV;
2418 goto err_out_dev_add;
2419 }
2420 2357
2421 kfree(probe_ent); 2358 devm_kfree(dev, probe_ent);
2422 return 0; 2359 return 0;
2423
2424err_out_dev_add:
2425 if (MV_HP_FLAG_MSI & hpriv->hp_flags) {
2426 pci_disable_msi(pdev);
2427 } else {
2428 pci_intx(pdev, 0);
2429 }
2430err_out_hpriv:
2431 kfree(hpriv);
2432err_out_iounmap:
2433 pci_iounmap(pdev, mmio_base);
2434err_out_free_ent:
2435 kfree(probe_ent);
2436err_out_regions:
2437 pci_release_regions(pdev);
2438err_out:
2439 if (!pci_dev_busy) {
2440 pci_disable_device(pdev);
2441 }
2442
2443 return rc;
2444} 2360}
2445 2361
2446static int __init mv_init(void) 2362static int __init mv_init(void)
diff --git a/drivers/ata/sata_nv.c b/drivers/ata/sata_nv.c
index 246df22ecd05..18361a38aee7 100644
--- a/drivers/ata/sata_nv.c
+++ b/drivers/ata/sata_nv.c
@@ -363,8 +363,6 @@ static const struct ata_port_operations nv_generic_ops = {
363 .scr_read = nv_scr_read, 363 .scr_read = nv_scr_read,
364 .scr_write = nv_scr_write, 364 .scr_write = nv_scr_write,
365 .port_start = ata_port_start, 365 .port_start = ata_port_start,
366 .port_stop = ata_port_stop,
367 .host_stop = ata_pci_host_stop,
368}; 366};
369 367
370static const struct ata_port_operations nv_nf2_ops = { 368static const struct ata_port_operations nv_nf2_ops = {
@@ -390,8 +388,6 @@ static const struct ata_port_operations nv_nf2_ops = {
390 .scr_read = nv_scr_read, 388 .scr_read = nv_scr_read,
391 .scr_write = nv_scr_write, 389 .scr_write = nv_scr_write,
392 .port_start = ata_port_start, 390 .port_start = ata_port_start,
393 .port_stop = ata_port_stop,
394 .host_stop = ata_pci_host_stop,
395}; 391};
396 392
397static const struct ata_port_operations nv_ck804_ops = { 393static const struct ata_port_operations nv_ck804_ops = {
@@ -417,7 +413,6 @@ static const struct ata_port_operations nv_ck804_ops = {
417 .scr_read = nv_scr_read, 413 .scr_read = nv_scr_read,
418 .scr_write = nv_scr_write, 414 .scr_write = nv_scr_write,
419 .port_start = ata_port_start, 415 .port_start = ata_port_start,
420 .port_stop = ata_port_stop,
421 .host_stop = nv_ck804_host_stop, 416 .host_stop = nv_ck804_host_stop,
422}; 417};
423 418
@@ -928,11 +923,9 @@ static int nv_adma_port_start(struct ata_port *ap)
928 if (rc) 923 if (rc)
929 return rc; 924 return rc;
930 925
931 pp = kzalloc(sizeof(*pp), GFP_KERNEL); 926 pp = devm_kzalloc(dev, sizeof(*pp), GFP_KERNEL);
932 if (!pp) { 927 if (!pp)
933 rc = -ENOMEM; 928 return -ENOMEM;
934 goto err_out;
935 }
936 929
937 mmio = ap->host->mmio_base + NV_ADMA_PORT + 930 mmio = ap->host->mmio_base + NV_ADMA_PORT +
938 ap->port_no * NV_ADMA_PORT_SIZE; 931 ap->port_no * NV_ADMA_PORT_SIZE;
@@ -941,13 +934,10 @@ static int nv_adma_port_start(struct ata_port *ap)
941 pp->notifier_clear_block = pp->gen_block + 934 pp->notifier_clear_block = pp->gen_block +
942 NV_ADMA_NOTIFIER_CLEAR + (4 * ap->port_no); 935 NV_ADMA_NOTIFIER_CLEAR + (4 * ap->port_no);
943 936
944 mem = dma_alloc_coherent(dev, NV_ADMA_PORT_PRIV_DMA_SZ, 937 mem = dmam_alloc_coherent(dev, NV_ADMA_PORT_PRIV_DMA_SZ,
945 &mem_dma, GFP_KERNEL); 938 &mem_dma, GFP_KERNEL);
946 939 if (!mem)
947 if (!mem) { 940 return -ENOMEM;
948 rc = -ENOMEM;
949 goto err_out_kfree;
950 }
951 memset(mem, 0, NV_ADMA_PORT_PRIV_DMA_SZ); 941 memset(mem, 0, NV_ADMA_PORT_PRIV_DMA_SZ);
952 942
953 /* 943 /*
@@ -993,28 +983,15 @@ static int nv_adma_port_start(struct ata_port *ap)
993 readl( mmio + NV_ADMA_CTL ); /* flush posted write */ 983 readl( mmio + NV_ADMA_CTL ); /* flush posted write */
994 984
995 return 0; 985 return 0;
996
997err_out_kfree:
998 kfree(pp);
999err_out:
1000 ata_port_stop(ap);
1001 return rc;
1002} 986}
1003 987
1004static void nv_adma_port_stop(struct ata_port *ap) 988static void nv_adma_port_stop(struct ata_port *ap)
1005{ 989{
1006 struct device *dev = ap->host->dev;
1007 struct nv_adma_port_priv *pp = ap->private_data; 990 struct nv_adma_port_priv *pp = ap->private_data;
1008 void __iomem *mmio = pp->ctl_block; 991 void __iomem *mmio = pp->ctl_block;
1009 992
1010 VPRINTK("ENTER\n"); 993 VPRINTK("ENTER\n");
1011
1012 writew(0, mmio + NV_ADMA_CTL); 994 writew(0, mmio + NV_ADMA_CTL);
1013
1014 ap->private_data = NULL;
1015 dma_free_coherent(dev, NV_ADMA_PORT_PRIV_DMA_SZ, pp->cpb, pp->cpb_dma);
1016 kfree(pp);
1017 ata_port_stop(ap);
1018} 995}
1019 996
1020static int nv_adma_port_suspend(struct ata_port *ap, pm_message_t mesg) 997static int nv_adma_port_suspend(struct ata_port *ap, pm_message_t mesg)
@@ -1433,7 +1410,6 @@ static int nv_init_one (struct pci_dev *pdev, const struct pci_device_id *ent)
1433 struct ata_port_info *ppi[2]; 1410 struct ata_port_info *ppi[2];
1434 struct ata_probe_ent *probe_ent; 1411 struct ata_probe_ent *probe_ent;
1435 struct nv_host_priv *hpriv; 1412 struct nv_host_priv *hpriv;
1436 int pci_dev_busy = 0;
1437 int rc; 1413 int rc;
1438 u32 bar; 1414 u32 bar;
1439 unsigned long base; 1415 unsigned long base;
@@ -1450,14 +1426,14 @@ static int nv_init_one (struct pci_dev *pdev, const struct pci_device_id *ent)
1450 if (!printed_version++) 1426 if (!printed_version++)
1451 dev_printk(KERN_DEBUG, &pdev->dev, "version " DRV_VERSION "\n"); 1427 dev_printk(KERN_DEBUG, &pdev->dev, "version " DRV_VERSION "\n");
1452 1428
1453 rc = pci_enable_device(pdev); 1429 rc = pcim_enable_device(pdev);
1454 if (rc) 1430 if (rc)
1455 goto err_out; 1431 return rc;
1456 1432
1457 rc = pci_request_regions(pdev, DRV_NAME); 1433 rc = pci_request_regions(pdev, DRV_NAME);
1458 if (rc) { 1434 if (rc) {
1459 pci_dev_busy = 1; 1435 pcim_pin_device(pdev);
1460 goto err_out_disable; 1436 return rc;
1461 } 1437 }
1462 1438
1463 if(type >= CK804 && adma_enabled) { 1439 if(type >= CK804 && adma_enabled) {
@@ -1471,28 +1447,27 @@ static int nv_init_one (struct pci_dev *pdev, const struct pci_device_id *ent)
1471 if(!mask_set) { 1447 if(!mask_set) {
1472 rc = pci_set_dma_mask(pdev, ATA_DMA_MASK); 1448 rc = pci_set_dma_mask(pdev, ATA_DMA_MASK);
1473 if (rc) 1449 if (rc)
1474 goto err_out_regions; 1450 return rc;
1475 rc = pci_set_consistent_dma_mask(pdev, ATA_DMA_MASK); 1451 rc = pci_set_consistent_dma_mask(pdev, ATA_DMA_MASK);
1476 if (rc) 1452 if (rc)
1477 goto err_out_regions; 1453 return rc;
1478 } 1454 }
1479 1455
1480 rc = -ENOMEM; 1456 rc = -ENOMEM;
1481 1457
1482 hpriv = kmalloc(sizeof(*hpriv), GFP_KERNEL); 1458 hpriv = devm_kzalloc(&pdev->dev, sizeof(*hpriv), GFP_KERNEL);
1483 if (!hpriv) 1459 if (!hpriv)
1484 goto err_out_regions; 1460 return -ENOMEM;
1485 1461
1486 ppi[0] = ppi[1] = &nv_port_info[type]; 1462 ppi[0] = ppi[1] = &nv_port_info[type];
1487 probe_ent = ata_pci_init_native_mode(pdev, ppi, ATA_PORT_PRIMARY | ATA_PORT_SECONDARY); 1463 probe_ent = ata_pci_init_native_mode(pdev, ppi, ATA_PORT_PRIMARY | ATA_PORT_SECONDARY);
1488 if (!probe_ent) 1464 if (!probe_ent)
1489 goto err_out_regions; 1465 return -ENOMEM;
1466
1467 probe_ent->mmio_base = pcim_iomap(pdev, 5, 0);
1468 if (!probe_ent->mmio_base)
1469 return -EIO;
1490 1470
1491 probe_ent->mmio_base = pci_iomap(pdev, 5, 0);
1492 if (!probe_ent->mmio_base) {
1493 rc = -EIO;
1494 goto err_out_free_ent;
1495 }
1496 probe_ent->private_data = hpriv; 1471 probe_ent->private_data = hpriv;
1497 hpriv->type = type; 1472 hpriv->type = type;
1498 1473
@@ -1515,28 +1490,15 @@ static int nv_init_one (struct pci_dev *pdev, const struct pci_device_id *ent)
1515 if (type == ADMA) { 1490 if (type == ADMA) {
1516 rc = nv_adma_host_init(probe_ent); 1491 rc = nv_adma_host_init(probe_ent);
1517 if (rc) 1492 if (rc)
1518 goto err_out_iounmap; 1493 return rc;
1519 } 1494 }
1520 1495
1521 rc = ata_device_add(probe_ent); 1496 rc = ata_device_add(probe_ent);
1522 if (rc != NV_PORTS) 1497 if (rc != NV_PORTS)
1523 goto err_out_iounmap; 1498 return -ENODEV;
1524
1525 kfree(probe_ent);
1526 1499
1500 devm_kfree(&pdev->dev, probe_ent);
1527 return 0; 1501 return 0;
1528
1529err_out_iounmap:
1530 pci_iounmap(pdev, probe_ent->mmio_base);
1531err_out_free_ent:
1532 kfree(probe_ent);
1533err_out_regions:
1534 pci_release_regions(pdev);
1535err_out_disable:
1536 if (!pci_dev_busy)
1537 pci_disable_device(pdev);
1538err_out:
1539 return rc;
1540} 1502}
1541 1503
1542static void nv_remove_one (struct pci_dev *pdev) 1504static void nv_remove_one (struct pci_dev *pdev)
@@ -1602,8 +1564,6 @@ static void nv_ck804_host_stop(struct ata_host *host)
1602 pci_read_config_byte(pdev, NV_MCP_SATA_CFG_20, &regval); 1564 pci_read_config_byte(pdev, NV_MCP_SATA_CFG_20, &regval);
1603 regval &= ~NV_MCP_SATA_CFG_20_SATA_SPACE_EN; 1565 regval &= ~NV_MCP_SATA_CFG_20_SATA_SPACE_EN;
1604 pci_write_config_byte(pdev, NV_MCP_SATA_CFG_20, regval); 1566 pci_write_config_byte(pdev, NV_MCP_SATA_CFG_20, regval);
1605
1606 ata_pci_host_stop(host);
1607} 1567}
1608 1568
1609static void nv_adma_host_stop(struct ata_host *host) 1569static void nv_adma_host_stop(struct ata_host *host)
diff --git a/drivers/ata/sata_promise.c b/drivers/ata/sata_promise.c
index 32ae03e9081b..e09c609d4961 100644
--- a/drivers/ata/sata_promise.c
+++ b/drivers/ata/sata_promise.c
@@ -43,7 +43,6 @@
43#include <scsi/scsi_host.h> 43#include <scsi/scsi_host.h>
44#include <scsi/scsi_cmnd.h> 44#include <scsi/scsi_cmnd.h>
45#include <linux/libata.h> 45#include <linux/libata.h>
46#include <asm/io.h>
47#include "sata_promise.h" 46#include "sata_promise.h"
48 47
49#define DRV_NAME "sata_promise" 48#define DRV_NAME "sata_promise"
@@ -121,7 +120,6 @@ static int pdc_ata_init_one (struct pci_dev *pdev, const struct pci_device_id *e
121static irqreturn_t pdc_interrupt (int irq, void *dev_instance); 120static irqreturn_t pdc_interrupt (int irq, void *dev_instance);
122static void pdc_eng_timeout(struct ata_port *ap); 121static void pdc_eng_timeout(struct ata_port *ap);
123static int pdc_port_start(struct ata_port *ap); 122static int pdc_port_start(struct ata_port *ap);
124static void pdc_port_stop(struct ata_port *ap);
125static void pdc_pata_phy_reset(struct ata_port *ap); 123static void pdc_pata_phy_reset(struct ata_port *ap);
126static void pdc_qc_prep(struct ata_queued_cmd *qc); 124static void pdc_qc_prep(struct ata_queued_cmd *qc);
127static void pdc_tf_load_mmio(struct ata_port *ap, const struct ata_taskfile *tf); 125static void pdc_tf_load_mmio(struct ata_port *ap, const struct ata_taskfile *tf);
@@ -130,7 +128,6 @@ static int pdc_check_atapi_dma(struct ata_queued_cmd *qc);
130static int pdc_old_check_atapi_dma(struct ata_queued_cmd *qc); 128static int pdc_old_check_atapi_dma(struct ata_queued_cmd *qc);
131static void pdc_irq_clear(struct ata_port *ap); 129static void pdc_irq_clear(struct ata_port *ap);
132static unsigned int pdc_qc_issue_prot(struct ata_queued_cmd *qc); 130static unsigned int pdc_qc_issue_prot(struct ata_queued_cmd *qc);
133static void pdc_host_stop(struct ata_host *host);
134static void pdc_freeze(struct ata_port *ap); 131static void pdc_freeze(struct ata_port *ap);
135static void pdc_thaw(struct ata_port *ap); 132static void pdc_thaw(struct ata_port *ap);
136static void pdc_error_handler(struct ata_port *ap); 133static void pdc_error_handler(struct ata_port *ap);
@@ -177,8 +174,6 @@ static const struct ata_port_operations pdc_sata_ops = {
177 .scr_read = pdc_sata_scr_read, 174 .scr_read = pdc_sata_scr_read,
178 .scr_write = pdc_sata_scr_write, 175 .scr_write = pdc_sata_scr_write,
179 .port_start = pdc_port_start, 176 .port_start = pdc_port_start,
180 .port_stop = pdc_port_stop,
181 .host_stop = pdc_host_stop,
182}; 177};
183 178
184/* First-generation chips need a more restrictive ->check_atapi_dma op */ 179/* First-generation chips need a more restrictive ->check_atapi_dma op */
@@ -204,8 +199,6 @@ static const struct ata_port_operations pdc_old_sata_ops = {
204 .scr_read = pdc_sata_scr_read, 199 .scr_read = pdc_sata_scr_read,
205 .scr_write = pdc_sata_scr_write, 200 .scr_write = pdc_sata_scr_write,
206 .port_start = pdc_port_start, 201 .port_start = pdc_port_start,
207 .port_stop = pdc_port_stop,
208 .host_stop = pdc_host_stop,
209}; 202};
210 203
211static const struct ata_port_operations pdc_pata_ops = { 204static const struct ata_port_operations pdc_pata_ops = {
@@ -227,8 +220,6 @@ static const struct ata_port_operations pdc_pata_ops = {
227 .irq_clear = pdc_irq_clear, 220 .irq_clear = pdc_irq_clear,
228 221
229 .port_start = pdc_port_start, 222 .port_start = pdc_port_start,
230 .port_stop = pdc_port_stop,
231 .host_stop = pdc_host_stop,
232}; 223};
233 224
234static const struct ata_port_info pdc_port_info[] = { 225static const struct ata_port_info pdc_port_info[] = {
@@ -332,17 +323,13 @@ static int pdc_port_start(struct ata_port *ap)
332 if (rc) 323 if (rc)
333 return rc; 324 return rc;
334 325
335 pp = kzalloc(sizeof(*pp), GFP_KERNEL); 326 pp = devm_kzalloc(dev, sizeof(*pp), GFP_KERNEL);
336 if (!pp) { 327 if (!pp)
337 rc = -ENOMEM; 328 return -ENOMEM;
338 goto err_out;
339 }
340 329
341 pp->pkt = dma_alloc_coherent(dev, 128, &pp->pkt_dma, GFP_KERNEL); 330 pp->pkt = dmam_alloc_coherent(dev, 128, &pp->pkt_dma, GFP_KERNEL);
342 if (!pp->pkt) { 331 if (!pp->pkt)
343 rc = -ENOMEM; 332 return -ENOMEM;
344 goto err_out_kfree;
345 }
346 333
347 ap->private_data = pp; 334 ap->private_data = pp;
348 335
@@ -357,37 +344,8 @@ static int pdc_port_start(struct ata_port *ap)
357 } 344 }
358 345
359 return 0; 346 return 0;
360
361err_out_kfree:
362 kfree(pp);
363err_out:
364 ata_port_stop(ap);
365 return rc;
366} 347}
367 348
368
369static void pdc_port_stop(struct ata_port *ap)
370{
371 struct device *dev = ap->host->dev;
372 struct pdc_port_priv *pp = ap->private_data;
373
374 ap->private_data = NULL;
375 dma_free_coherent(dev, 128, pp->pkt, pp->pkt_dma);
376 kfree(pp);
377 ata_port_stop(ap);
378}
379
380
381static void pdc_host_stop(struct ata_host *host)
382{
383 struct pdc_host_priv *hp = host->private_data;
384
385 ata_pci_host_stop(host);
386
387 kfree(hp);
388}
389
390
391static void pdc_reset_port(struct ata_port *ap) 349static void pdc_reset_port(struct ata_port *ap)
392{ 350{
393 void __iomem *mmio = (void __iomem *) ap->ioaddr.cmd_addr + PDC_CTLSTAT; 351 void __iomem *mmio = (void __iomem *) ap->ioaddr.cmd_addr + PDC_CTLSTAT;
@@ -924,56 +882,49 @@ static void pdc_host_init(unsigned int chip_id, struct ata_probe_ent *pe)
924static int pdc_ata_init_one (struct pci_dev *pdev, const struct pci_device_id *ent) 882static int pdc_ata_init_one (struct pci_dev *pdev, const struct pci_device_id *ent)
925{ 883{
926 static int printed_version; 884 static int printed_version;
927 struct ata_probe_ent *probe_ent = NULL; 885 struct ata_probe_ent *probe_ent;
928 struct pdc_host_priv *hp; 886 struct pdc_host_priv *hp;
929 unsigned long base; 887 unsigned long base;
930 void __iomem *mmio_base; 888 void __iomem *mmio_base;
931 unsigned int board_idx = (unsigned int) ent->driver_data; 889 unsigned int board_idx = (unsigned int) ent->driver_data;
932 int pci_dev_busy = 0;
933 int rc; 890 int rc;
934 u8 tmp; 891 u8 tmp;
935 892
936 if (!printed_version++) 893 if (!printed_version++)
937 dev_printk(KERN_DEBUG, &pdev->dev, "version " DRV_VERSION "\n"); 894 dev_printk(KERN_DEBUG, &pdev->dev, "version " DRV_VERSION "\n");
938 895
939 rc = pci_enable_device(pdev); 896 rc = pcim_enable_device(pdev);
940 if (rc) 897 if (rc)
941 return rc; 898 return rc;
942 899
943 rc = pci_request_regions(pdev, DRV_NAME); 900 rc = pci_request_regions(pdev, DRV_NAME);
944 if (rc) { 901 if (rc) {
945 pci_dev_busy = 1; 902 pcim_pin_device(pdev);
946 goto err_out; 903 return rc;
947 } 904 }
948 905
949 rc = pci_set_dma_mask(pdev, ATA_DMA_MASK); 906 rc = pci_set_dma_mask(pdev, ATA_DMA_MASK);
950 if (rc) 907 if (rc)
951 goto err_out_regions; 908 return rc;
952 rc = pci_set_consistent_dma_mask(pdev, ATA_DMA_MASK); 909 rc = pci_set_consistent_dma_mask(pdev, ATA_DMA_MASK);
953 if (rc) 910 if (rc)
954 goto err_out_regions; 911 return rc;
955 912
956 probe_ent = kzalloc(sizeof(*probe_ent), GFP_KERNEL); 913 probe_ent = devm_kzalloc(&pdev->dev, sizeof(*probe_ent), GFP_KERNEL);
957 if (probe_ent == NULL) { 914 if (probe_ent == NULL)
958 rc = -ENOMEM; 915 return -ENOMEM;
959 goto err_out_regions;
960 }
961 916
962 probe_ent->dev = pci_dev_to_dev(pdev); 917 probe_ent->dev = pci_dev_to_dev(pdev);
963 INIT_LIST_HEAD(&probe_ent->node); 918 INIT_LIST_HEAD(&probe_ent->node);
964 919
965 mmio_base = pci_iomap(pdev, 3, 0); 920 mmio_base = pcim_iomap(pdev, 3, 0);
966 if (mmio_base == NULL) { 921 if (mmio_base == NULL)
967 rc = -ENOMEM; 922 return -ENOMEM;
968 goto err_out_free_ent;
969 }
970 base = (unsigned long) mmio_base; 923 base = (unsigned long) mmio_base;
971 924
972 hp = kzalloc(sizeof(*hp), GFP_KERNEL); 925 hp = devm_kzalloc(&pdev->dev, sizeof(*hp), GFP_KERNEL);
973 if (hp == NULL) { 926 if (hp == NULL)
974 rc = -ENOMEM; 927 return -ENOMEM;
975 goto err_out_free_ent;
976 }
977 928
978 probe_ent->private_data = hp; 929 probe_ent->private_data = hp;
979 930
@@ -1043,22 +994,11 @@ static int pdc_ata_init_one (struct pci_dev *pdev, const struct pci_device_id *e
1043 /* initialize adapter */ 994 /* initialize adapter */
1044 pdc_host_init(board_idx, probe_ent); 995 pdc_host_init(board_idx, probe_ent);
1045 996
1046 /* FIXME: Need any other frees than hp? */
1047 if (!ata_device_add(probe_ent)) 997 if (!ata_device_add(probe_ent))
1048 kfree(hp); 998 return -ENODEV;
1049
1050 kfree(probe_ent);
1051 999
1000 devm_kfree(&pdev->dev, probe_ent);
1052 return 0; 1001 return 0;
1053
1054err_out_free_ent:
1055 kfree(probe_ent);
1056err_out_regions:
1057 pci_release_regions(pdev);
1058err_out:
1059 if (!pci_dev_busy)
1060 pci_disable_device(pdev);
1061 return rc;
1062} 1002}
1063 1003
1064 1004
diff --git a/drivers/ata/sata_qstor.c b/drivers/ata/sata_qstor.c
index 0292a79f9747..339f61648af6 100644
--- a/drivers/ata/sata_qstor.c
+++ b/drivers/ata/sata_qstor.c
@@ -37,7 +37,6 @@
37#include <linux/sched.h> 37#include <linux/sched.h>
38#include <linux/device.h> 38#include <linux/device.h>
39#include <scsi/scsi_host.h> 39#include <scsi/scsi_host.h>
40#include <asm/io.h>
41#include <linux/libata.h> 40#include <linux/libata.h>
42 41
43#define DRV_NAME "sata_qstor" 42#define DRV_NAME "sata_qstor"
@@ -117,7 +116,6 @@ static int qs_ata_init_one (struct pci_dev *pdev, const struct pci_device_id *en
117static irqreturn_t qs_intr (int irq, void *dev_instance); 116static irqreturn_t qs_intr (int irq, void *dev_instance);
118static int qs_port_start(struct ata_port *ap); 117static int qs_port_start(struct ata_port *ap);
119static void qs_host_stop(struct ata_host *host); 118static void qs_host_stop(struct ata_host *host);
120static void qs_port_stop(struct ata_port *ap);
121static void qs_phy_reset(struct ata_port *ap); 119static void qs_phy_reset(struct ata_port *ap);
122static void qs_qc_prep(struct ata_queued_cmd *qc); 120static void qs_qc_prep(struct ata_queued_cmd *qc);
123static unsigned int qs_qc_issue(struct ata_queued_cmd *qc); 121static unsigned int qs_qc_issue(struct ata_queued_cmd *qc);
@@ -164,7 +162,6 @@ static const struct ata_port_operations qs_ata_ops = {
164 .scr_read = qs_scr_read, 162 .scr_read = qs_scr_read,
165 .scr_write = qs_scr_write, 163 .scr_write = qs_scr_write,
166 .port_start = qs_port_start, 164 .port_start = qs_port_start,
167 .port_stop = qs_port_stop,
168 .host_stop = qs_host_stop, 165 .host_stop = qs_host_stop,
169 .bmdma_stop = qs_bmdma_stop, 166 .bmdma_stop = qs_bmdma_stop,
170 .bmdma_status = qs_bmdma_status, 167 .bmdma_status = qs_bmdma_status,
@@ -501,17 +498,13 @@ static int qs_port_start(struct ata_port *ap)
501 if (rc) 498 if (rc)
502 return rc; 499 return rc;
503 qs_enter_reg_mode(ap); 500 qs_enter_reg_mode(ap);
504 pp = kzalloc(sizeof(*pp), GFP_KERNEL); 501 pp = devm_kzalloc(dev, sizeof(*pp), GFP_KERNEL);
505 if (!pp) { 502 if (!pp)
506 rc = -ENOMEM; 503 return -ENOMEM;
507 goto err_out; 504 pp->pkt = dmam_alloc_coherent(dev, QS_PKT_BYTES, &pp->pkt_dma,
508 } 505 GFP_KERNEL);
509 pp->pkt = dma_alloc_coherent(dev, QS_PKT_BYTES, &pp->pkt_dma, 506 if (!pp->pkt)
510 GFP_KERNEL); 507 return -ENOMEM;
511 if (!pp->pkt) {
512 rc = -ENOMEM;
513 goto err_out_kfree;
514 }
515 memset(pp->pkt, 0, QS_PKT_BYTES); 508 memset(pp->pkt, 0, QS_PKT_BYTES);
516 ap->private_data = pp; 509 ap->private_data = pp;
517 510
@@ -519,38 +512,14 @@ static int qs_port_start(struct ata_port *ap)
519 writel((u32) addr, chan + QS_CCF_CPBA); 512 writel((u32) addr, chan + QS_CCF_CPBA);
520 writel((u32)(addr >> 32), chan + QS_CCF_CPBA + 4); 513 writel((u32)(addr >> 32), chan + QS_CCF_CPBA + 4);
521 return 0; 514 return 0;
522
523err_out_kfree:
524 kfree(pp);
525err_out:
526 ata_port_stop(ap);
527 return rc;
528}
529
530static void qs_port_stop(struct ata_port *ap)
531{
532 struct device *dev = ap->host->dev;
533 struct qs_port_priv *pp = ap->private_data;
534
535 if (pp != NULL) {
536 ap->private_data = NULL;
537 if (pp->pkt != NULL)
538 dma_free_coherent(dev, QS_PKT_BYTES, pp->pkt,
539 pp->pkt_dma);
540 kfree(pp);
541 }
542 ata_port_stop(ap);
543} 515}
544 516
545static void qs_host_stop(struct ata_host *host) 517static void qs_host_stop(struct ata_host *host)
546{ 518{
547 void __iomem *mmio_base = host->mmio_base; 519 void __iomem *mmio_base = host->mmio_base;
548 struct pci_dev *pdev = to_pci_dev(host->dev);
549 520
550 writeb(0, mmio_base + QS_HCT_CTRL); /* disable host interrupts */ 521 writeb(0, mmio_base + QS_HCT_CTRL); /* disable host interrupts */
551 writeb(QS_CNFG3_GSRST, mmio_base + QS_HCF_CNFG3); /* global reset */ 522 writeb(QS_CNFG3_GSRST, mmio_base + QS_HCF_CNFG3); /* global reset */
552
553 pci_iounmap(pdev, mmio_base);
554} 523}
555 524
556static void qs_host_init(unsigned int chip_id, struct ata_probe_ent *pe) 525static void qs_host_init(unsigned int chip_id, struct ata_probe_ent *pe)
@@ -638,36 +607,29 @@ static int qs_ata_init_one(struct pci_dev *pdev,
638 if (!printed_version++) 607 if (!printed_version++)
639 dev_printk(KERN_DEBUG, &pdev->dev, "version " DRV_VERSION "\n"); 608 dev_printk(KERN_DEBUG, &pdev->dev, "version " DRV_VERSION "\n");
640 609
641 rc = pci_enable_device(pdev); 610 rc = pcim_enable_device(pdev);
642 if (rc) 611 if (rc)
643 return rc; 612 return rc;
644 613
645 rc = pci_request_regions(pdev, DRV_NAME); 614 rc = pci_request_regions(pdev, DRV_NAME);
646 if (rc) 615 if (rc)
647 goto err_out; 616 return rc;
648 617
649 if ((pci_resource_flags(pdev, 4) & IORESOURCE_MEM) == 0) { 618 if ((pci_resource_flags(pdev, 4) & IORESOURCE_MEM) == 0)
650 rc = -ENODEV; 619 return -ENODEV;
651 goto err_out_regions;
652 }
653 620
654 mmio_base = pci_iomap(pdev, 4, 0); 621 mmio_base = pcim_iomap(pdev, 4, 0);
655 if (mmio_base == NULL) { 622 if (mmio_base == NULL)
656 rc = -ENOMEM; 623 return -ENOMEM;
657 goto err_out_regions;
658 }
659 624
660 rc = qs_set_dma_masks(pdev, mmio_base); 625 rc = qs_set_dma_masks(pdev, mmio_base);
661 if (rc) 626 if (rc)
662 goto err_out_iounmap; 627 return rc;
663 628
664 probe_ent = kmalloc(sizeof(*probe_ent), GFP_KERNEL); 629 probe_ent = devm_kzalloc(&pdev->dev, sizeof(*probe_ent), GFP_KERNEL);
665 if (probe_ent == NULL) { 630 if (probe_ent == NULL)
666 rc = -ENOMEM; 631 return -ENOMEM;
667 goto err_out_iounmap;
668 }
669 632
670 memset(probe_ent, 0, sizeof(*probe_ent));
671 probe_ent->dev = pci_dev_to_dev(pdev); 633 probe_ent->dev = pci_dev_to_dev(pdev);
672 INIT_LIST_HEAD(&probe_ent->node); 634 INIT_LIST_HEAD(&probe_ent->node);
673 635
@@ -694,19 +656,11 @@ static int qs_ata_init_one(struct pci_dev *pdev,
694 /* initialize adapter */ 656 /* initialize adapter */
695 qs_host_init(board_idx, probe_ent); 657 qs_host_init(board_idx, probe_ent);
696 658
697 rc = ata_device_add(probe_ent); 659 if (ata_device_add(probe_ent) != QS_PORTS)
698 kfree(probe_ent); 660 return -EIO;
699 if (rc != QS_PORTS)
700 goto err_out_iounmap;
701 return 0;
702 661
703err_out_iounmap: 662 devm_kfree(&pdev->dev, probe_ent);
704 pci_iounmap(pdev, mmio_base); 663 return 0;
705err_out_regions:
706 pci_release_regions(pdev);
707err_out:
708 pci_disable_device(pdev);
709 return rc;
710} 664}
711 665
712static int __init qs_ata_init(void) 666static int __init qs_ata_init(void)
diff --git a/drivers/ata/sata_sil.c b/drivers/ata/sata_sil.c
index 1f3fdcf29876..00f2465dcdce 100644
--- a/drivers/ata/sata_sil.c
+++ b/drivers/ata/sata_sil.c
@@ -210,8 +210,6 @@ static const struct ata_port_operations sil_ops = {
210 .scr_read = sil_scr_read, 210 .scr_read = sil_scr_read,
211 .scr_write = sil_scr_write, 211 .scr_write = sil_scr_write,
212 .port_start = ata_port_start, 212 .port_start = ata_port_start,
213 .port_stop = ata_port_stop,
214 .host_stop = ata_pci_host_stop,
215}; 213};
216 214
217static const struct ata_port_info sil_port_info[] = { 215static const struct ata_port_info sil_port_info[] = {
@@ -621,38 +619,36 @@ static void sil_init_controller(struct pci_dev *pdev,
621static int sil_init_one (struct pci_dev *pdev, const struct pci_device_id *ent) 619static int sil_init_one (struct pci_dev *pdev, const struct pci_device_id *ent)
622{ 620{
623 static int printed_version; 621 static int printed_version;
624 struct ata_probe_ent *probe_ent = NULL; 622 struct device *dev = &pdev->dev;
623 struct ata_probe_ent *probe_ent;
625 unsigned long base; 624 unsigned long base;
626 void __iomem *mmio_base; 625 void __iomem *mmio_base;
627 int rc; 626 int rc;
628 unsigned int i; 627 unsigned int i;
629 int pci_dev_busy = 0;
630 628
631 if (!printed_version++) 629 if (!printed_version++)
632 dev_printk(KERN_DEBUG, &pdev->dev, "version " DRV_VERSION "\n"); 630 dev_printk(KERN_DEBUG, &pdev->dev, "version " DRV_VERSION "\n");
633 631
634 rc = pci_enable_device(pdev); 632 rc = pcim_enable_device(pdev);
635 if (rc) 633 if (rc)
636 return rc; 634 return rc;
637 635
638 rc = pci_request_regions(pdev, DRV_NAME); 636 rc = pci_request_regions(pdev, DRV_NAME);
639 if (rc) { 637 if (rc) {
640 pci_dev_busy = 1; 638 pcim_pin_device(pdev);
641 goto err_out; 639 return rc;
642 } 640 }
643 641
644 rc = pci_set_dma_mask(pdev, ATA_DMA_MASK); 642 rc = pci_set_dma_mask(pdev, ATA_DMA_MASK);
645 if (rc) 643 if (rc)
646 goto err_out_regions; 644 return rc;
647 rc = pci_set_consistent_dma_mask(pdev, ATA_DMA_MASK); 645 rc = pci_set_consistent_dma_mask(pdev, ATA_DMA_MASK);
648 if (rc) 646 if (rc)
649 goto err_out_regions; 647 return rc;
650 648
651 probe_ent = kzalloc(sizeof(*probe_ent), GFP_KERNEL); 649 probe_ent = devm_kzalloc(dev, sizeof(*probe_ent), GFP_KERNEL);
652 if (probe_ent == NULL) { 650 if (probe_ent == NULL)
653 rc = -ENOMEM; 651 return -ENOMEM;
654 goto err_out_regions;
655 }
656 652
657 INIT_LIST_HEAD(&probe_ent->node); 653 INIT_LIST_HEAD(&probe_ent->node);
658 probe_ent->dev = pci_dev_to_dev(pdev); 654 probe_ent->dev = pci_dev_to_dev(pdev);
@@ -666,11 +662,9 @@ static int sil_init_one (struct pci_dev *pdev, const struct pci_device_id *ent)
666 probe_ent->irq_flags = IRQF_SHARED; 662 probe_ent->irq_flags = IRQF_SHARED;
667 probe_ent->port_flags = sil_port_info[ent->driver_data].flags; 663 probe_ent->port_flags = sil_port_info[ent->driver_data].flags;
668 664
669 mmio_base = pci_iomap(pdev, 5, 0); 665 mmio_base = pcim_iomap(pdev, 5, 0);
670 if (mmio_base == NULL) { 666 if (mmio_base == NULL)
671 rc = -ENOMEM; 667 return -ENOMEM;
672 goto err_out_free_ent;
673 }
674 668
675 probe_ent->mmio_base = mmio_base; 669 probe_ent->mmio_base = mmio_base;
676 670
@@ -690,20 +684,11 @@ static int sil_init_one (struct pci_dev *pdev, const struct pci_device_id *ent)
690 684
691 pci_set_master(pdev); 685 pci_set_master(pdev);
692 686
693 /* FIXME: check ata_device_add return value */ 687 if (!ata_device_add(probe_ent))
694 ata_device_add(probe_ent); 688 return -ENODEV;
695 kfree(probe_ent);
696 689
690 devm_kfree(dev, probe_ent);
697 return 0; 691 return 0;
698
699err_out_free_ent:
700 kfree(probe_ent);
701err_out_regions:
702 pci_release_regions(pdev);
703err_out:
704 if (!pci_dev_busy)
705 pci_disable_device(pdev);
706 return rc;
707} 692}
708 693
709#ifdef CONFIG_PM 694#ifdef CONFIG_PM
diff --git a/drivers/ata/sata_sil24.c b/drivers/ata/sata_sil24.c
index da982ed4bc47..c7a3c0275bee 100644
--- a/drivers/ata/sata_sil24.c
+++ b/drivers/ata/sata_sil24.c
@@ -28,7 +28,6 @@
28#include <scsi/scsi_host.h> 28#include <scsi/scsi_host.h>
29#include <scsi/scsi_cmnd.h> 29#include <scsi/scsi_cmnd.h>
30#include <linux/libata.h> 30#include <linux/libata.h>
31#include <asm/io.h>
32 31
33#define DRV_NAME "sata_sil24" 32#define DRV_NAME "sata_sil24"
34#define DRV_VERSION "0.3" 33#define DRV_VERSION "0.3"
@@ -341,8 +340,6 @@ static void sil24_thaw(struct ata_port *ap);
341static void sil24_error_handler(struct ata_port *ap); 340static void sil24_error_handler(struct ata_port *ap);
342static void sil24_post_internal_cmd(struct ata_queued_cmd *qc); 341static void sil24_post_internal_cmd(struct ata_queued_cmd *qc);
343static int sil24_port_start(struct ata_port *ap); 342static int sil24_port_start(struct ata_port *ap);
344static void sil24_port_stop(struct ata_port *ap);
345static void sil24_host_stop(struct ata_host *host);
346static int sil24_init_one(struct pci_dev *pdev, const struct pci_device_id *ent); 343static int sil24_init_one(struct pci_dev *pdev, const struct pci_device_id *ent);
347#ifdef CONFIG_PM 344#ifdef CONFIG_PM
348static int sil24_pci_device_resume(struct pci_dev *pdev); 345static int sil24_pci_device_resume(struct pci_dev *pdev);
@@ -362,7 +359,7 @@ static struct pci_driver sil24_pci_driver = {
362 .name = DRV_NAME, 359 .name = DRV_NAME,
363 .id_table = sil24_pci_tbl, 360 .id_table = sil24_pci_tbl,
364 .probe = sil24_init_one, 361 .probe = sil24_init_one,
365 .remove = ata_pci_remove_one, /* safe? */ 362 .remove = ata_pci_remove_one,
366#ifdef CONFIG_PM 363#ifdef CONFIG_PM
367 .suspend = ata_pci_device_suspend, 364 .suspend = ata_pci_device_suspend,
368 .resume = sil24_pci_device_resume, 365 .resume = sil24_pci_device_resume,
@@ -416,8 +413,6 @@ static const struct ata_port_operations sil24_ops = {
416 .post_internal_cmd = sil24_post_internal_cmd, 413 .post_internal_cmd = sil24_post_internal_cmd,
417 414
418 .port_start = sil24_port_start, 415 .port_start = sil24_port_start,
419 .port_stop = sil24_port_stop,
420 .host_stop = sil24_host_stop,
421}; 416};
422 417
423/* 418/*
@@ -938,13 +933,6 @@ static void sil24_post_internal_cmd(struct ata_queued_cmd *qc)
938 sil24_init_port(ap); 933 sil24_init_port(ap);
939} 934}
940 935
941static inline void sil24_cblk_free(struct sil24_port_priv *pp, struct device *dev)
942{
943 const size_t cb_size = sizeof(*pp->cmd_block) * SIL24_MAX_CMDS;
944
945 dma_free_coherent(dev, cb_size, pp->cmd_block, pp->cmd_block_dma);
946}
947
948static int sil24_port_start(struct ata_port *ap) 936static int sil24_port_start(struct ata_port *ap)
949{ 937{
950 struct device *dev = ap->host->dev; 938 struct device *dev = ap->host->dev;
@@ -952,22 +940,22 @@ static int sil24_port_start(struct ata_port *ap)
952 union sil24_cmd_block *cb; 940 union sil24_cmd_block *cb;
953 size_t cb_size = sizeof(*cb) * SIL24_MAX_CMDS; 941 size_t cb_size = sizeof(*cb) * SIL24_MAX_CMDS;
954 dma_addr_t cb_dma; 942 dma_addr_t cb_dma;
955 int rc = -ENOMEM; 943 int rc;
956 944
957 pp = kzalloc(sizeof(*pp), GFP_KERNEL); 945 pp = devm_kzalloc(dev, sizeof(*pp), GFP_KERNEL);
958 if (!pp) 946 if (!pp)
959 goto err_out; 947 return -ENOMEM;
960 948
961 pp->tf.command = ATA_DRDY; 949 pp->tf.command = ATA_DRDY;
962 950
963 cb = dma_alloc_coherent(dev, cb_size, &cb_dma, GFP_KERNEL); 951 cb = dmam_alloc_coherent(dev, cb_size, &cb_dma, GFP_KERNEL);
964 if (!cb) 952 if (!cb)
965 goto err_out_pp; 953 return -ENOMEM;
966 memset(cb, 0, cb_size); 954 memset(cb, 0, cb_size);
967 955
968 rc = ata_pad_alloc(ap, dev); 956 rc = ata_pad_alloc(ap, dev);
969 if (rc) 957 if (rc)
970 goto err_out_pad; 958 return rc;
971 959
972 pp->cmd_block = cb; 960 pp->cmd_block = cb;
973 pp->cmd_block_dma = cb_dma; 961 pp->cmd_block_dma = cb_dma;
@@ -975,33 +963,6 @@ static int sil24_port_start(struct ata_port *ap)
975 ap->private_data = pp; 963 ap->private_data = pp;
976 964
977 return 0; 965 return 0;
978
979err_out_pad:
980 sil24_cblk_free(pp, dev);
981err_out_pp:
982 kfree(pp);
983err_out:
984 return rc;
985}
986
987static void sil24_port_stop(struct ata_port *ap)
988{
989 struct device *dev = ap->host->dev;
990 struct sil24_port_priv *pp = ap->private_data;
991
992 sil24_cblk_free(pp, dev);
993 ata_pad_free(ap, dev);
994 kfree(pp);
995}
996
997static void sil24_host_stop(struct ata_host *host)
998{
999 struct sil24_host_priv *hpriv = host->private_data;
1000 struct pci_dev *pdev = to_pci_dev(host->dev);
1001
1002 pci_iounmap(pdev, hpriv->host_base);
1003 pci_iounmap(pdev, hpriv->port_base);
1004 kfree(hpriv);
1005} 966}
1006 967
1007static void sil24_init_controller(struct pci_dev *pdev, int n_ports, 968static void sil24_init_controller(struct pci_dev *pdev, int n_ports,
@@ -1066,43 +1027,38 @@ static void sil24_init_controller(struct pci_dev *pdev, int n_ports,
1066static int sil24_init_one(struct pci_dev *pdev, const struct pci_device_id *ent) 1027static int sil24_init_one(struct pci_dev *pdev, const struct pci_device_id *ent)
1067{ 1028{
1068 static int printed_version = 0; 1029 static int printed_version = 0;
1030 struct device *dev = &pdev->dev;
1069 unsigned int board_id = (unsigned int)ent->driver_data; 1031 unsigned int board_id = (unsigned int)ent->driver_data;
1070 struct ata_port_info *pinfo = &sil24_port_info[board_id]; 1032 struct ata_port_info *pinfo = &sil24_port_info[board_id];
1071 struct ata_probe_ent *probe_ent = NULL; 1033 struct ata_probe_ent *probe_ent;
1072 struct sil24_host_priv *hpriv = NULL; 1034 struct sil24_host_priv *hpriv;
1073 void __iomem *host_base = NULL; 1035 void __iomem *host_base;
1074 void __iomem *port_base = NULL; 1036 void __iomem *port_base;
1075 int i, rc; 1037 int i, rc;
1076 u32 tmp; 1038 u32 tmp;
1077 1039
1078 if (!printed_version++) 1040 if (!printed_version++)
1079 dev_printk(KERN_DEBUG, &pdev->dev, "version " DRV_VERSION "\n"); 1041 dev_printk(KERN_DEBUG, &pdev->dev, "version " DRV_VERSION "\n");
1080 1042
1081 rc = pci_enable_device(pdev); 1043 rc = pcim_enable_device(pdev);
1082 if (rc) 1044 if (rc)
1083 return rc; 1045 return rc;
1084 1046
1085 rc = pci_request_regions(pdev, DRV_NAME); 1047 rc = pci_request_regions(pdev, DRV_NAME);
1086 if (rc) 1048 if (rc)
1087 goto out_disable; 1049 return rc;
1088 1050
1089 rc = -ENOMEM;
1090 /* map mmio registers */ 1051 /* map mmio registers */
1091 host_base = pci_iomap(pdev, 0, 0); 1052 host_base = pcim_iomap(pdev, 0, 0);
1092 if (!host_base) 1053 port_base = pcim_iomap(pdev, 2, 0);
1093 goto out_free; 1054 if (!host_base || !port_base)
1094 port_base = pci_iomap(pdev, 2, 0); 1055 return -ENOMEM;
1095 if (!port_base)
1096 goto out_free;
1097 1056
1098 /* allocate & init probe_ent and hpriv */ 1057 /* allocate & init probe_ent and hpriv */
1099 probe_ent = kzalloc(sizeof(*probe_ent), GFP_KERNEL); 1058 probe_ent = devm_kzalloc(dev, sizeof(*probe_ent), GFP_KERNEL);
1100 if (!probe_ent) 1059 hpriv = devm_kzalloc(dev, sizeof(*hpriv), GFP_KERNEL);
1101 goto out_free; 1060 if (!probe_ent || !hpriv)
1102 1061 return -ENOMEM;
1103 hpriv = kzalloc(sizeof(*hpriv), GFP_KERNEL);
1104 if (!hpriv)
1105 goto out_free;
1106 1062
1107 probe_ent->dev = pci_dev_to_dev(pdev); 1063 probe_ent->dev = pci_dev_to_dev(pdev);
1108 INIT_LIST_HEAD(&probe_ent->node); 1064 INIT_LIST_HEAD(&probe_ent->node);
@@ -1132,7 +1088,7 @@ static int sil24_init_one(struct pci_dev *pdev, const struct pci_device_id *ent)
1132 if (rc) { 1088 if (rc) {
1133 dev_printk(KERN_ERR, &pdev->dev, 1089 dev_printk(KERN_ERR, &pdev->dev,
1134 "64-bit DMA enable failed\n"); 1090 "64-bit DMA enable failed\n");
1135 goto out_free; 1091 return rc;
1136 } 1092 }
1137 } 1093 }
1138 } else { 1094 } else {
@@ -1140,13 +1096,13 @@ static int sil24_init_one(struct pci_dev *pdev, const struct pci_device_id *ent)
1140 if (rc) { 1096 if (rc) {
1141 dev_printk(KERN_ERR, &pdev->dev, 1097 dev_printk(KERN_ERR, &pdev->dev,
1142 "32-bit DMA enable failed\n"); 1098 "32-bit DMA enable failed\n");
1143 goto out_free; 1099 return rc;
1144 } 1100 }
1145 rc = pci_set_consistent_dma_mask(pdev, DMA_32BIT_MASK); 1101 rc = pci_set_consistent_dma_mask(pdev, DMA_32BIT_MASK);
1146 if (rc) { 1102 if (rc) {
1147 dev_printk(KERN_ERR, &pdev->dev, 1103 dev_printk(KERN_ERR, &pdev->dev,
1148 "32-bit consistent DMA enable failed\n"); 1104 "32-bit consistent DMA enable failed\n");
1149 goto out_free; 1105 return rc;
1150 } 1106 }
1151 } 1107 }
1152 1108
@@ -1176,23 +1132,11 @@ static int sil24_init_one(struct pci_dev *pdev, const struct pci_device_id *ent)
1176 1132
1177 pci_set_master(pdev); 1133 pci_set_master(pdev);
1178 1134
1179 /* FIXME: check ata_device_add return value */ 1135 if (!ata_device_add(probe_ent))
1180 ata_device_add(probe_ent); 1136 return -ENODEV;
1181 1137
1182 kfree(probe_ent); 1138 devm_kfree(dev, probe_ent);
1183 return 0; 1139 return 0;
1184
1185 out_free:
1186 if (host_base)
1187 pci_iounmap(pdev, host_base);
1188 if (port_base)
1189 pci_iounmap(pdev, port_base);
1190 kfree(probe_ent);
1191 kfree(hpriv);
1192 pci_release_regions(pdev);
1193 out_disable:
1194 pci_disable_device(pdev);
1195 return rc;
1196} 1140}
1197 1141
1198#ifdef CONFIG_PM 1142#ifdef CONFIG_PM
diff --git a/drivers/ata/sata_sis.c b/drivers/ata/sata_sis.c
index af6f42578f59..7e51f1c0f7cb 100644
--- a/drivers/ata/sata_sis.c
+++ b/drivers/ata/sata_sis.c
@@ -126,8 +126,6 @@ static const struct ata_port_operations sis_ops = {
126 .scr_read = sis_scr_read, 126 .scr_read = sis_scr_read,
127 .scr_write = sis_scr_write, 127 .scr_write = sis_scr_write,
128 .port_start = ata_port_start, 128 .port_start = ata_port_start,
129 .port_stop = ata_port_stop,
130 .host_stop = ata_host_stop,
131}; 129};
132 130
133static struct ata_port_info sis_port_info = { 131static struct ata_port_info sis_port_info = {
@@ -260,29 +258,28 @@ static int sis_init_one (struct pci_dev *pdev, const struct pci_device_id *ent)
260 int rc; 258 int rc;
261 u32 genctl, val; 259 u32 genctl, val;
262 struct ata_port_info pi = sis_port_info, *ppi[2] = { &pi, &pi }; 260 struct ata_port_info pi = sis_port_info, *ppi[2] = { &pi, &pi };
263 int pci_dev_busy = 0;
264 u8 pmr; 261 u8 pmr;
265 u8 port2_start = 0x20; 262 u8 port2_start = 0x20;
266 263
267 if (!printed_version++) 264 if (!printed_version++)
268 dev_printk(KERN_INFO, &pdev->dev, "version " DRV_VERSION "\n"); 265 dev_printk(KERN_INFO, &pdev->dev, "version " DRV_VERSION "\n");
269 266
270 rc = pci_enable_device(pdev); 267 rc = pcim_enable_device(pdev);
271 if (rc) 268 if (rc)
272 return rc; 269 return rc;
273 270
274 rc = pci_request_regions(pdev, DRV_NAME); 271 rc = pci_request_regions(pdev, DRV_NAME);
275 if (rc) { 272 if (rc) {
276 pci_dev_busy = 1; 273 pcim_pin_device(pdev);
277 goto err_out; 274 return rc;
278 } 275 }
279 276
280 rc = pci_set_dma_mask(pdev, ATA_DMA_MASK); 277 rc = pci_set_dma_mask(pdev, ATA_DMA_MASK);
281 if (rc) 278 if (rc)
282 goto err_out_regions; 279 return rc;
283 rc = pci_set_consistent_dma_mask(pdev, ATA_DMA_MASK); 280 rc = pci_set_consistent_dma_mask(pdev, ATA_DMA_MASK);
284 if (rc) 281 if (rc)
285 goto err_out_regions; 282 return rc;
286 283
287 /* check and see if the SCRs are in IO space or PCI cfg space */ 284 /* check and see if the SCRs are in IO space or PCI cfg space */
288 pci_read_config_dword(pdev, SIS_GENCTL, &genctl); 285 pci_read_config_dword(pdev, SIS_GENCTL, &genctl);
@@ -351,10 +348,8 @@ static int sis_init_one (struct pci_dev *pdev, const struct pci_device_id *ent)
351 } 348 }
352 349
353 probe_ent = ata_pci_init_native_mode(pdev, ppi, ATA_PORT_PRIMARY | ATA_PORT_SECONDARY); 350 probe_ent = ata_pci_init_native_mode(pdev, ppi, ATA_PORT_PRIMARY | ATA_PORT_SECONDARY);
354 if (!probe_ent) { 351 if (!probe_ent)
355 rc = -ENOMEM; 352 return -ENOMEM;
356 goto err_out_regions;
357 }
358 353
359 if (!(probe_ent->port_flags & SIS_FLAG_CFGSCR)) { 354 if (!(probe_ent->port_flags & SIS_FLAG_CFGSCR)) {
360 probe_ent->port[0].scr_addr = 355 probe_ent->port[0].scr_addr =
@@ -366,20 +361,12 @@ static int sis_init_one (struct pci_dev *pdev, const struct pci_device_id *ent)
366 pci_set_master(pdev); 361 pci_set_master(pdev);
367 pci_intx(pdev, 1); 362 pci_intx(pdev, 1);
368 363
369 /* FIXME: check ata_device_add return value */ 364 if (!ata_device_add(probe_ent))
370 ata_device_add(probe_ent); 365 return -EIO;
371 kfree(probe_ent);
372 366
367 devm_kfree(&pdev->dev, probe_ent);
373 return 0; 368 return 0;
374 369
375err_out_regions:
376 pci_release_regions(pdev);
377
378err_out:
379 if (!pci_dev_busy)
380 pci_disable_device(pdev);
381 return rc;
382
383} 370}
384 371
385static int __init sis_init(void) 372static int __init sis_init(void)
diff --git a/drivers/ata/sata_svw.c b/drivers/ata/sata_svw.c
index 5f4e82ade6cd..9c48b418ad7f 100644
--- a/drivers/ata/sata_svw.c
+++ b/drivers/ata/sata_svw.c
@@ -359,8 +359,6 @@ static const struct ata_port_operations k2_sata_ops = {
359 .scr_read = k2_sata_scr_read, 359 .scr_read = k2_sata_scr_read,
360 .scr_write = k2_sata_scr_write, 360 .scr_write = k2_sata_scr_write,
361 .port_start = ata_port_start, 361 .port_start = ata_port_start,
362 .port_stop = ata_port_stop,
363 .host_stop = ata_pci_host_stop,
364}; 362};
365 363
366static void k2_sata_setup_port(struct ata_ioports *port, unsigned long base) 364static void k2_sata_setup_port(struct ata_ioports *port, unsigned long base)
@@ -386,12 +384,12 @@ static void k2_sata_setup_port(struct ata_ioports *port, unsigned long base)
386static int k2_sata_init_one (struct pci_dev *pdev, const struct pci_device_id *ent) 384static int k2_sata_init_one (struct pci_dev *pdev, const struct pci_device_id *ent)
387{ 385{
388 static int printed_version; 386 static int printed_version;
389 struct ata_probe_ent *probe_ent = NULL; 387 struct device *dev = &pdev->dev;
388 struct ata_probe_ent *probe_ent;
390 unsigned long base; 389 unsigned long base;
391 void __iomem *mmio_base; 390 void __iomem *mmio_base;
392 const struct k2_board_info *board_info = 391 const struct k2_board_info *board_info =
393 &k2_board_info[ent->driver_data]; 392 &k2_board_info[ent->driver_data];
394 int pci_dev_busy = 0;
395 int rc; 393 int rc;
396 int i; 394 int i;
397 395
@@ -402,7 +400,7 @@ static int k2_sata_init_one (struct pci_dev *pdev, const struct pci_device_id *e
402 * If this driver happens to only be useful on Apple's K2, then 400 * If this driver happens to only be useful on Apple's K2, then
403 * we should check that here as it has a normal Serverworks ID 401 * we should check that here as it has a normal Serverworks ID
404 */ 402 */
405 rc = pci_enable_device(pdev); 403 rc = pcim_enable_device(pdev);
406 if (rc) 404 if (rc)
407 return rc; 405 return rc;
408 /* 406 /*
@@ -415,32 +413,27 @@ static int k2_sata_init_one (struct pci_dev *pdev, const struct pci_device_id *e
415 /* Request PCI regions */ 413 /* Request PCI regions */
416 rc = pci_request_regions(pdev, DRV_NAME); 414 rc = pci_request_regions(pdev, DRV_NAME);
417 if (rc) { 415 if (rc) {
418 pci_dev_busy = 1; 416 pcim_pin_device(pdev);
419 goto err_out; 417 return rc;
420 } 418 }
421 419
422 rc = pci_set_dma_mask(pdev, ATA_DMA_MASK); 420 rc = pci_set_dma_mask(pdev, ATA_DMA_MASK);
423 if (rc) 421 if (rc)
424 goto err_out_regions; 422 return rc;
425 rc = pci_set_consistent_dma_mask(pdev, ATA_DMA_MASK); 423 rc = pci_set_consistent_dma_mask(pdev, ATA_DMA_MASK);
426 if (rc) 424 if (rc)
427 goto err_out_regions; 425 return rc;
428 426
429 probe_ent = kmalloc(sizeof(*probe_ent), GFP_KERNEL); 427 probe_ent = devm_kzalloc(dev, sizeof(*probe_ent), GFP_KERNEL);
430 if (probe_ent == NULL) { 428 if (probe_ent == NULL)
431 rc = -ENOMEM; 429 return -ENOMEM;
432 goto err_out_regions;
433 }
434 430
435 memset(probe_ent, 0, sizeof(*probe_ent));
436 probe_ent->dev = pci_dev_to_dev(pdev); 431 probe_ent->dev = pci_dev_to_dev(pdev);
437 INIT_LIST_HEAD(&probe_ent->node); 432 INIT_LIST_HEAD(&probe_ent->node);
438 433
439 mmio_base = pci_iomap(pdev, 5, 0); 434 mmio_base = pcim_iomap(pdev, 5, 0);
440 if (mmio_base == NULL) { 435 if (mmio_base == NULL)
441 rc = -ENOMEM; 436 return -ENOMEM;
442 goto err_out_free_ent;
443 }
444 base = (unsigned long) mmio_base; 437 base = (unsigned long) mmio_base;
445 438
446 /* Clear a magic bit in SCR1 according to Darwin, those help 439 /* Clear a magic bit in SCR1 according to Darwin, those help
@@ -478,20 +471,11 @@ static int k2_sata_init_one (struct pci_dev *pdev, const struct pci_device_id *e
478 471
479 pci_set_master(pdev); 472 pci_set_master(pdev);
480 473
481 /* FIXME: check ata_device_add return value */ 474 if (!ata_device_add(probe_ent))
482 ata_device_add(probe_ent); 475 return -ENODEV;
483 kfree(probe_ent);
484 476
477 devm_kfree(dev, probe_ent);
485 return 0; 478 return 0;
486
487err_out_free_ent:
488 kfree(probe_ent);
489err_out_regions:
490 pci_release_regions(pdev);
491err_out:
492 if (!pci_dev_busy)
493 pci_disable_device(pdev);
494 return rc;
495} 479}
496 480
497/* 0x240 is device ID for Apple K2 device 481/* 0x240 is device ID for Apple K2 device
diff --git a/drivers/ata/sata_sx4.c b/drivers/ata/sata_sx4.c
index ae7992de4b08..d9838dcb4b01 100644
--- a/drivers/ata/sata_sx4.c
+++ b/drivers/ata/sata_sx4.c
@@ -42,7 +42,6 @@
42#include <scsi/scsi_host.h> 42#include <scsi/scsi_host.h>
43#include <scsi/scsi_cmnd.h> 43#include <scsi/scsi_cmnd.h>
44#include <linux/libata.h> 44#include <linux/libata.h>
45#include <asm/io.h>
46#include "sata_promise.h" 45#include "sata_promise.h"
47 46
48#define DRV_NAME "sata_sx4" 47#define DRV_NAME "sata_sx4"
@@ -156,11 +155,9 @@ static irqreturn_t pdc20621_interrupt (int irq, void *dev_instance);
156static void pdc_eng_timeout(struct ata_port *ap); 155static void pdc_eng_timeout(struct ata_port *ap);
157static void pdc_20621_phy_reset (struct ata_port *ap); 156static void pdc_20621_phy_reset (struct ata_port *ap);
158static int pdc_port_start(struct ata_port *ap); 157static int pdc_port_start(struct ata_port *ap);
159static void pdc_port_stop(struct ata_port *ap);
160static void pdc20621_qc_prep(struct ata_queued_cmd *qc); 158static void pdc20621_qc_prep(struct ata_queued_cmd *qc);
161static void pdc_tf_load_mmio(struct ata_port *ap, const struct ata_taskfile *tf); 159static void pdc_tf_load_mmio(struct ata_port *ap, const struct ata_taskfile *tf);
162static void pdc_exec_command_mmio(struct ata_port *ap, const struct ata_taskfile *tf); 160static void pdc_exec_command_mmio(struct ata_port *ap, const struct ata_taskfile *tf);
163static void pdc20621_host_stop(struct ata_host *host);
164static unsigned int pdc20621_dimm_init(struct ata_probe_ent *pe); 161static unsigned int pdc20621_dimm_init(struct ata_probe_ent *pe);
165static int pdc20621_detect_dimm(struct ata_probe_ent *pe); 162static int pdc20621_detect_dimm(struct ata_probe_ent *pe);
166static unsigned int pdc20621_i2c_read(struct ata_probe_ent *pe, 163static unsigned int pdc20621_i2c_read(struct ata_probe_ent *pe,
@@ -210,8 +207,6 @@ static const struct ata_port_operations pdc_20621_ops = {
210 .irq_handler = pdc20621_interrupt, 207 .irq_handler = pdc20621_interrupt,
211 .irq_clear = pdc20621_irq_clear, 208 .irq_clear = pdc20621_irq_clear,
212 .port_start = pdc_port_start, 209 .port_start = pdc_port_start,
213 .port_stop = pdc_port_stop,
214 .host_stop = pdc20621_host_stop,
215}; 210};
216 211
217static const struct ata_port_info pdc_port_info[] = { 212static const struct ata_port_info pdc_port_info[] = {
@@ -243,18 +238,6 @@ static struct pci_driver pdc_sata_pci_driver = {
243}; 238};
244 239
245 240
246static void pdc20621_host_stop(struct ata_host *host)
247{
248 struct pci_dev *pdev = to_pci_dev(host->dev);
249 struct pdc_host_priv *hpriv = host->private_data;
250 void __iomem *dimm_mmio = hpriv->dimm_mmio;
251
252 pci_iounmap(pdev, dimm_mmio);
253 kfree(hpriv);
254
255 pci_iounmap(pdev, host->mmio_base);
256}
257
258static int pdc_port_start(struct ata_port *ap) 241static int pdc_port_start(struct ata_port *ap)
259{ 242{
260 struct device *dev = ap->host->dev; 243 struct device *dev = ap->host->dev;
@@ -265,43 +248,19 @@ static int pdc_port_start(struct ata_port *ap)
265 if (rc) 248 if (rc)
266 return rc; 249 return rc;
267 250
268 pp = kmalloc(sizeof(*pp), GFP_KERNEL); 251 pp = devm_kzalloc(dev, sizeof(*pp), GFP_KERNEL);
269 if (!pp) { 252 if (!pp)
270 rc = -ENOMEM; 253 return -ENOMEM;
271 goto err_out;
272 }
273 memset(pp, 0, sizeof(*pp));
274 254
275 pp->pkt = dma_alloc_coherent(dev, 128, &pp->pkt_dma, GFP_KERNEL); 255 pp->pkt = dmam_alloc_coherent(dev, 128, &pp->pkt_dma, GFP_KERNEL);
276 if (!pp->pkt) { 256 if (!pp->pkt)
277 rc = -ENOMEM; 257 return -ENOMEM;
278 goto err_out_kfree;
279 }
280 258
281 ap->private_data = pp; 259 ap->private_data = pp;
282 260
283 return 0; 261 return 0;
284
285err_out_kfree:
286 kfree(pp);
287err_out:
288 ata_port_stop(ap);
289 return rc;
290}
291
292
293static void pdc_port_stop(struct ata_port *ap)
294{
295 struct device *dev = ap->host->dev;
296 struct pdc_port_priv *pp = ap->private_data;
297
298 ap->private_data = NULL;
299 dma_free_coherent(dev, 128, pp->pkt, pp->pkt_dma);
300 kfree(pp);
301 ata_port_stop(ap);
302} 262}
303 263
304
305static void pdc_20621_phy_reset (struct ata_port *ap) 264static void pdc_20621_phy_reset (struct ata_port *ap)
306{ 265{
307 VPRINTK("ENTER\n"); 266 VPRINTK("ENTER\n");
@@ -1365,65 +1324,53 @@ static void pdc_20621_init(struct ata_probe_ent *pe)
1365static int pdc_sata_init_one (struct pci_dev *pdev, const struct pci_device_id *ent) 1324static int pdc_sata_init_one (struct pci_dev *pdev, const struct pci_device_id *ent)
1366{ 1325{
1367 static int printed_version; 1326 static int printed_version;
1368 struct ata_probe_ent *probe_ent = NULL; 1327 struct ata_probe_ent *probe_ent;
1369 unsigned long base; 1328 unsigned long base;
1370 void __iomem *mmio_base; 1329 void __iomem *mmio_base;
1371 void __iomem *dimm_mmio = NULL; 1330 void __iomem *dimm_mmio;
1372 struct pdc_host_priv *hpriv = NULL; 1331 struct pdc_host_priv *hpriv;
1373 unsigned int board_idx = (unsigned int) ent->driver_data; 1332 unsigned int board_idx = (unsigned int) ent->driver_data;
1374 int pci_dev_busy = 0;
1375 int rc; 1333 int rc;
1376 1334
1377 if (!printed_version++) 1335 if (!printed_version++)
1378 dev_printk(KERN_DEBUG, &pdev->dev, "version " DRV_VERSION "\n"); 1336 dev_printk(KERN_DEBUG, &pdev->dev, "version " DRV_VERSION "\n");
1379 1337
1380 rc = pci_enable_device(pdev); 1338 rc = pcim_enable_device(pdev);
1381 if (rc) 1339 if (rc)
1382 return rc; 1340 return rc;
1383 1341
1384 rc = pci_request_regions(pdev, DRV_NAME); 1342 rc = pci_request_regions(pdev, DRV_NAME);
1385 if (rc) { 1343 if (rc) {
1386 pci_dev_busy = 1; 1344 pcim_pin_device(pdev);
1387 goto err_out; 1345 return rc;
1388 } 1346 }
1389 1347
1390 rc = pci_set_dma_mask(pdev, ATA_DMA_MASK); 1348 rc = pci_set_dma_mask(pdev, ATA_DMA_MASK);
1391 if (rc) 1349 if (rc)
1392 goto err_out_regions; 1350 return rc;
1393 rc = pci_set_consistent_dma_mask(pdev, ATA_DMA_MASK); 1351 rc = pci_set_consistent_dma_mask(pdev, ATA_DMA_MASK);
1394 if (rc) 1352 if (rc)
1395 goto err_out_regions; 1353 return rc;
1396 1354
1397 probe_ent = kmalloc(sizeof(*probe_ent), GFP_KERNEL); 1355 probe_ent = devm_kzalloc(&pdev->dev, sizeof(*probe_ent), GFP_KERNEL);
1398 if (probe_ent == NULL) { 1356 if (probe_ent == NULL)
1399 rc = -ENOMEM; 1357 return -ENOMEM;
1400 goto err_out_regions;
1401 }
1402 1358
1403 memset(probe_ent, 0, sizeof(*probe_ent));
1404 probe_ent->dev = pci_dev_to_dev(pdev); 1359 probe_ent->dev = pci_dev_to_dev(pdev);
1405 INIT_LIST_HEAD(&probe_ent->node); 1360 INIT_LIST_HEAD(&probe_ent->node);
1406 1361
1407 mmio_base = pci_iomap(pdev, 3, 0); 1362 mmio_base = pcim_iomap(pdev, 3, 0);
1408 if (mmio_base == NULL) { 1363 if (mmio_base == NULL)
1409 rc = -ENOMEM; 1364 return -ENOMEM;
1410 goto err_out_free_ent;
1411 }
1412 base = (unsigned long) mmio_base; 1365 base = (unsigned long) mmio_base;
1413 1366
1414 hpriv = kmalloc(sizeof(*hpriv), GFP_KERNEL); 1367 hpriv = devm_kzalloc(&pdev->dev, sizeof(*hpriv), GFP_KERNEL);
1415 if (!hpriv) { 1368 if (!hpriv)
1416 rc = -ENOMEM; 1369 return -ENOMEM;
1417 goto err_out_iounmap;
1418 }
1419 memset(hpriv, 0, sizeof(*hpriv));
1420 1370
1421 dimm_mmio = pci_iomap(pdev, 4, 0); 1371 dimm_mmio = pcim_iomap(pdev, 4, 0);
1422 if (!dimm_mmio) { 1372 if (!dimm_mmio)
1423 kfree(hpriv); 1373 return -ENOMEM;
1424 rc = -ENOMEM;
1425 goto err_out_iounmap;
1426 }
1427 1374
1428 hpriv->dimm_mmio = dimm_mmio; 1375 hpriv->dimm_mmio = dimm_mmio;
1429 1376
@@ -1451,31 +1398,15 @@ static int pdc_sata_init_one (struct pci_dev *pdev, const struct pci_device_id *
1451 1398
1452 /* initialize adapter */ 1399 /* initialize adapter */
1453 /* initialize local dimm */ 1400 /* initialize local dimm */
1454 if (pdc20621_dimm_init(probe_ent)) { 1401 if (pdc20621_dimm_init(probe_ent))
1455 rc = -ENOMEM; 1402 return -ENOMEM;
1456 goto err_out_iounmap_dimm;
1457 }
1458 pdc_20621_init(probe_ent); 1403 pdc_20621_init(probe_ent);
1459 1404
1460 /* FIXME: check ata_device_add return value */ 1405 if (!ata_device_add(probe_ent))
1461 ata_device_add(probe_ent); 1406 return -ENODEV;
1462 kfree(probe_ent);
1463 1407
1408 devm_kfree(&pdev->dev, probe_ent);
1464 return 0; 1409 return 0;
1465
1466err_out_iounmap_dimm: /* only get to this label if 20621 */
1467 kfree(hpriv);
1468 pci_iounmap(pdev, dimm_mmio);
1469err_out_iounmap:
1470 pci_iounmap(pdev, mmio_base);
1471err_out_free_ent:
1472 kfree(probe_ent);
1473err_out_regions:
1474 pci_release_regions(pdev);
1475err_out:
1476 if (!pci_dev_busy)
1477 pci_disable_device(pdev);
1478 return rc;
1479} 1410}
1480 1411
1481 1412
diff --git a/drivers/ata/sata_uli.c b/drivers/ata/sata_uli.c
index a43aec62d505..22eed6d07495 100644
--- a/drivers/ata/sata_uli.c
+++ b/drivers/ata/sata_uli.c
@@ -122,8 +122,6 @@ static const struct ata_port_operations uli_ops = {
122 .scr_write = uli_scr_write, 122 .scr_write = uli_scr_write,
123 123
124 .port_start = ata_port_start, 124 .port_start = ata_port_start,
125 .port_stop = ata_port_stop,
126 .host_stop = ata_host_stop,
127}; 125};
128 126
129static struct ata_port_info uli_port_info = { 127static struct ata_port_info uli_port_info = {
@@ -189,41 +187,36 @@ static int uli_init_one (struct pci_dev *pdev, const struct pci_device_id *ent)
189 struct ata_port_info *ppi[2]; 187 struct ata_port_info *ppi[2];
190 int rc; 188 int rc;
191 unsigned int board_idx = (unsigned int) ent->driver_data; 189 unsigned int board_idx = (unsigned int) ent->driver_data;
192 int pci_dev_busy = 0;
193 struct uli_priv *hpriv; 190 struct uli_priv *hpriv;
194 191
195 if (!printed_version++) 192 if (!printed_version++)
196 dev_printk(KERN_INFO, &pdev->dev, "version " DRV_VERSION "\n"); 193 dev_printk(KERN_INFO, &pdev->dev, "version " DRV_VERSION "\n");
197 194
198 rc = pci_enable_device(pdev); 195 rc = pcim_enable_device(pdev);
199 if (rc) 196 if (rc)
200 return rc; 197 return rc;
201 198
202 rc = pci_request_regions(pdev, DRV_NAME); 199 rc = pci_request_regions(pdev, DRV_NAME);
203 if (rc) { 200 if (rc) {
204 pci_dev_busy = 1; 201 pcim_pin_device(pdev);
205 goto err_out; 202 return rc;
206 } 203 }
207 204
208 rc = pci_set_dma_mask(pdev, ATA_DMA_MASK); 205 rc = pci_set_dma_mask(pdev, ATA_DMA_MASK);
209 if (rc) 206 if (rc)
210 goto err_out_regions; 207 return rc;
211 rc = pci_set_consistent_dma_mask(pdev, ATA_DMA_MASK); 208 rc = pci_set_consistent_dma_mask(pdev, ATA_DMA_MASK);
212 if (rc) 209 if (rc)
213 goto err_out_regions; 210 return rc;
214 211
215 ppi[0] = ppi[1] = &uli_port_info; 212 ppi[0] = ppi[1] = &uli_port_info;
216 probe_ent = ata_pci_init_native_mode(pdev, ppi, ATA_PORT_PRIMARY | ATA_PORT_SECONDARY); 213 probe_ent = ata_pci_init_native_mode(pdev, ppi, ATA_PORT_PRIMARY | ATA_PORT_SECONDARY);
217 if (!probe_ent) { 214 if (!probe_ent)
218 rc = -ENOMEM; 215 return -ENOMEM;
219 goto err_out_regions;
220 }
221 216
222 hpriv = kzalloc(sizeof(*hpriv), GFP_KERNEL); 217 hpriv = devm_kzalloc(&pdev->dev, sizeof(*hpriv), GFP_KERNEL);
223 if (!hpriv) { 218 if (!hpriv)
224 rc = -ENOMEM; 219 return -ENOMEM;
225 goto err_out_probe_ent;
226 }
227 220
228 probe_ent->private_data = hpriv; 221 probe_ent->private_data = hpriv;
229 222
@@ -269,21 +262,11 @@ static int uli_init_one (struct pci_dev *pdev, const struct pci_device_id *ent)
269 pci_set_master(pdev); 262 pci_set_master(pdev);
270 pci_intx(pdev, 1); 263 pci_intx(pdev, 1);
271 264
272 /* FIXME: check ata_device_add return value */ 265 if (!ata_device_add(probe_ent))
273 ata_device_add(probe_ent); 266 return -ENODEV;
274 kfree(probe_ent);
275 267
268 devm_kfree(&pdev->dev, probe_ent);
276 return 0; 269 return 0;
277
278err_out_probe_ent:
279 kfree(probe_ent);
280err_out_regions:
281 pci_release_regions(pdev);
282err_out:
283 if (!pci_dev_busy)
284 pci_disable_device(pdev);
285 return rc;
286
287} 270}
288 271
289static int __init uli_init(void) 272static int __init uli_init(void)
diff --git a/drivers/ata/sata_via.c b/drivers/ata/sata_via.c
index e95acfac30b9..c7f527578d11 100644
--- a/drivers/ata/sata_via.c
+++ b/drivers/ata/sata_via.c
@@ -44,7 +44,6 @@
44#include <linux/device.h> 44#include <linux/device.h>
45#include <scsi/scsi_host.h> 45#include <scsi/scsi_host.h>
46#include <linux/libata.h> 46#include <linux/libata.h>
47#include <asm/io.h>
48 47
49#define DRV_NAME "sata_via" 48#define DRV_NAME "sata_via"
50#define DRV_VERSION "2.0" 49#define DRV_VERSION "2.0"
@@ -146,8 +145,6 @@ static const struct ata_port_operations vt6420_sata_ops = {
146 .irq_clear = ata_bmdma_irq_clear, 145 .irq_clear = ata_bmdma_irq_clear,
147 146
148 .port_start = ata_port_start, 147 .port_start = ata_port_start,
149 .port_stop = ata_port_stop,
150 .host_stop = ata_host_stop,
151}; 148};
152 149
153static const struct ata_port_operations vt6421_pata_ops = { 150static const struct ata_port_operations vt6421_pata_ops = {
@@ -180,8 +177,6 @@ static const struct ata_port_operations vt6421_pata_ops = {
180 .irq_clear = ata_bmdma_irq_clear, 177 .irq_clear = ata_bmdma_irq_clear,
181 178
182 .port_start = vt6421_port_start, 179 .port_start = vt6421_port_start,
183 .port_stop = ata_port_stop,
184 .host_stop = ata_host_stop,
185}; 180};
186 181
187static const struct ata_port_operations vt6421_sata_ops = { 182static const struct ata_port_operations vt6421_sata_ops = {
@@ -214,8 +209,6 @@ static const struct ata_port_operations vt6421_sata_ops = {
214 .scr_write = svia_scr_write, 209 .scr_write = svia_scr_write,
215 210
216 .port_start = vt6421_port_start, 211 .port_start = vt6421_port_start,
217 .port_stop = ata_port_stop,
218 .host_stop = ata_host_stop,
219}; 212};
220 213
221static struct ata_port_info vt6420_port_info = { 214static struct ata_port_info vt6420_port_info = {
@@ -446,7 +439,7 @@ static struct ata_probe_ent *vt6421_init_probe_ent(struct pci_dev *pdev)
446 struct ata_probe_ent *probe_ent; 439 struct ata_probe_ent *probe_ent;
447 unsigned int i; 440 unsigned int i;
448 441
449 probe_ent = kmalloc(sizeof(*probe_ent), GFP_KERNEL); 442 probe_ent = devm_kzalloc(&pdev->dev, sizeof(*probe_ent), GFP_KERNEL);
450 if (!probe_ent) 443 if (!probe_ent)
451 return NULL; 444 return NULL;
452 445
@@ -517,20 +510,19 @@ static int svia_init_one (struct pci_dev *pdev, const struct pci_device_id *ent)
517 struct ata_probe_ent *probe_ent; 510 struct ata_probe_ent *probe_ent;
518 int board_id = (int) ent->driver_data; 511 int board_id = (int) ent->driver_data;
519 const int *bar_sizes; 512 const int *bar_sizes;
520 int pci_dev_busy = 0;
521 u8 tmp8; 513 u8 tmp8;
522 514
523 if (!printed_version++) 515 if (!printed_version++)
524 dev_printk(KERN_DEBUG, &pdev->dev, "version " DRV_VERSION "\n"); 516 dev_printk(KERN_DEBUG, &pdev->dev, "version " DRV_VERSION "\n");
525 517
526 rc = pci_enable_device(pdev); 518 rc = pcim_enable_device(pdev);
527 if (rc) 519 if (rc)
528 return rc; 520 return rc;
529 521
530 rc = pci_request_regions(pdev, DRV_NAME); 522 rc = pci_request_regions(pdev, DRV_NAME);
531 if (rc) { 523 if (rc) {
532 pci_dev_busy = 1; 524 pcim_pin_device(pdev);
533 goto err_out; 525 return rc;
534 } 526 }
535 527
536 if (board_id == vt6420) { 528 if (board_id == vt6420) {
@@ -539,8 +531,7 @@ static int svia_init_one (struct pci_dev *pdev, const struct pci_device_id *ent)
539 dev_printk(KERN_ERR, &pdev->dev, 531 dev_printk(KERN_ERR, &pdev->dev,
540 "SATA master/slave not supported (0x%x)\n", 532 "SATA master/slave not supported (0x%x)\n",
541 (int) tmp8); 533 (int) tmp8);
542 rc = -EIO; 534 return -EIO;
543 goto err_out_regions;
544 } 535 }
545 536
546 bar_sizes = &svia_bar_sizes[0]; 537 bar_sizes = &svia_bar_sizes[0];
@@ -556,16 +547,15 @@ static int svia_init_one (struct pci_dev *pdev, const struct pci_device_id *ent)
556 i, 547 i,
557 (unsigned long long)pci_resource_start(pdev, i), 548 (unsigned long long)pci_resource_start(pdev, i),
558 (unsigned long long)pci_resource_len(pdev, i)); 549 (unsigned long long)pci_resource_len(pdev, i));
559 rc = -ENODEV; 550 return -ENODEV;
560 goto err_out_regions;
561 } 551 }
562 552
563 rc = pci_set_dma_mask(pdev, ATA_DMA_MASK); 553 rc = pci_set_dma_mask(pdev, ATA_DMA_MASK);
564 if (rc) 554 if (rc)
565 goto err_out_regions; 555 return rc;
566 rc = pci_set_consistent_dma_mask(pdev, ATA_DMA_MASK); 556 rc = pci_set_consistent_dma_mask(pdev, ATA_DMA_MASK);
567 if (rc) 557 if (rc)
568 goto err_out_regions; 558 return rc;
569 559
570 if (board_id == vt6420) 560 if (board_id == vt6420)
571 probe_ent = vt6420_init_probe_ent(pdev); 561 probe_ent = vt6420_init_probe_ent(pdev);
@@ -574,26 +564,18 @@ static int svia_init_one (struct pci_dev *pdev, const struct pci_device_id *ent)
574 564
575 if (!probe_ent) { 565 if (!probe_ent) {
576 dev_printk(KERN_ERR, &pdev->dev, "out of memory\n"); 566 dev_printk(KERN_ERR, &pdev->dev, "out of memory\n");
577 rc = -ENOMEM; 567 return -ENOMEM;
578 goto err_out_regions;
579 } 568 }
580 569
581 svia_configure(pdev); 570 svia_configure(pdev);
582 571
583 pci_set_master(pdev); 572 pci_set_master(pdev);
584 573
585 /* FIXME: check ata_device_add return value */ 574 if (!ata_device_add(probe_ent))
586 ata_device_add(probe_ent); 575 return -ENODEV;
587 kfree(probe_ent);
588 576
577 devm_kfree(&pdev->dev, probe_ent);
589 return 0; 578 return 0;
590
591err_out_regions:
592 pci_release_regions(pdev);
593err_out:
594 if (!pci_dev_busy)
595 pci_disable_device(pdev);
596 return rc;
597} 579}
598 580
599static int __init svia_init(void) 581static int __init svia_init(void)
diff --git a/drivers/ata/sata_vsc.c b/drivers/ata/sata_vsc.c
index 8d1683ebadc6..af77f71bdaa5 100644
--- a/drivers/ata/sata_vsc.c
+++ b/drivers/ata/sata_vsc.c
@@ -94,13 +94,6 @@ enum {
94 VSC_SATA_INT_ERROR_P | VSC_SATA_INT_ERROR_R | \ 94 VSC_SATA_INT_ERROR_P | VSC_SATA_INT_ERROR_R | \
95 VSC_SATA_INT_ERROR_E | VSC_SATA_INT_ERROR_M | \ 95 VSC_SATA_INT_ERROR_E | VSC_SATA_INT_ERROR_M | \
96 VSC_SATA_INT_PHY_CHANGE), 96 VSC_SATA_INT_PHY_CHANGE),
97
98 /* Host private flags (hp_flags) */
99 VSC_SATA_HP_FLAG_MSI = (1 << 0),
100};
101
102struct vsc_sata_host_priv {
103 u32 hp_flags;
104}; 97};
105 98
106#define is_vsc_sata_int_err(port_idx, int_status) \ 99#define is_vsc_sata_int_err(port_idx, int_status) \
@@ -124,20 +117,6 @@ static void vsc_sata_scr_write (struct ata_port *ap, unsigned int sc_reg,
124} 117}
125 118
126 119
127static void vsc_sata_host_stop(struct ata_host *host)
128{
129 struct vsc_sata_host_priv *hpriv = host->private_data;
130 struct pci_dev *pdev = to_pci_dev(host->dev);
131
132 if (hpriv->hp_flags & VSC_SATA_HP_FLAG_MSI)
133 pci_disable_msi(pdev);
134 else
135 pci_intx(pdev, 0);
136 kfree (hpriv);
137 ata_pci_host_stop(host);
138}
139
140
141static void vsc_intr_mask_update(struct ata_port *ap, u8 ctl) 120static void vsc_intr_mask_update(struct ata_port *ap, u8 ctl)
142{ 121{
143 void __iomem *mask_addr; 122 void __iomem *mask_addr;
@@ -331,8 +310,6 @@ static const struct ata_port_operations vsc_sata_ops = {
331 .scr_read = vsc_sata_scr_read, 310 .scr_read = vsc_sata_scr_read,
332 .scr_write = vsc_sata_scr_write, 311 .scr_write = vsc_sata_scr_write,
333 .port_start = ata_port_start, 312 .port_start = ata_port_start,
334 .port_stop = ata_port_stop,
335 .host_stop = vsc_sata_host_stop,
336}; 313};
337 314
338static void __devinit vsc_sata_setup_port(struct ata_ioports *port, unsigned long base) 315static void __devinit vsc_sata_setup_port(struct ata_ioports *port, unsigned long base)
@@ -361,31 +338,27 @@ static int __devinit vsc_sata_init_one (struct pci_dev *pdev, const struct pci_d
361{ 338{
362 static int printed_version; 339 static int printed_version;
363 struct ata_probe_ent *probe_ent = NULL; 340 struct ata_probe_ent *probe_ent = NULL;
364 struct vsc_sata_host_priv *hpriv;
365 unsigned long base; 341 unsigned long base;
366 int pci_dev_busy = 0;
367 void __iomem *mmio_base; 342 void __iomem *mmio_base;
368 int rc; 343 int rc;
369 344
370 if (!printed_version++) 345 if (!printed_version++)
371 dev_printk(KERN_DEBUG, &pdev->dev, "version " DRV_VERSION "\n"); 346 dev_printk(KERN_DEBUG, &pdev->dev, "version " DRV_VERSION "\n");
372 347
373 rc = pci_enable_device(pdev); 348 rc = pcim_enable_device(pdev);
374 if (rc) 349 if (rc)
375 return rc; 350 return rc;
376 351
377 /* 352 /*
378 * Check if we have needed resource mapped. 353 * Check if we have needed resource mapped.
379 */ 354 */
380 if (pci_resource_len(pdev, 0) == 0) { 355 if (pci_resource_len(pdev, 0) == 0)
381 rc = -ENODEV; 356 return -ENODEV;
382 goto err_out;
383 }
384 357
385 rc = pci_request_regions(pdev, DRV_NAME); 358 rc = pci_request_regions(pdev, DRV_NAME);
386 if (rc) { 359 if (rc) {
387 pci_dev_busy = 1; 360 pcim_pin_device(pdev);
388 goto err_out; 361 return rc;
389 } 362 }
390 363
391 /* 364 /*
@@ -393,44 +366,29 @@ static int __devinit vsc_sata_init_one (struct pci_dev *pdev, const struct pci_d
393 */ 366 */
394 rc = pci_set_dma_mask(pdev, DMA_32BIT_MASK); 367 rc = pci_set_dma_mask(pdev, DMA_32BIT_MASK);
395 if (rc) 368 if (rc)
396 goto err_out_regions; 369 return rc;
397 rc = pci_set_consistent_dma_mask(pdev, DMA_32BIT_MASK); 370 rc = pci_set_consistent_dma_mask(pdev, DMA_32BIT_MASK);
398 if (rc) 371 if (rc)
399 goto err_out_regions; 372 return rc;
400
401 probe_ent = kmalloc(sizeof(*probe_ent), GFP_KERNEL);
402 if (probe_ent == NULL) {
403 rc = -ENOMEM;
404 goto err_out_regions;
405 }
406 373
407 memset(probe_ent, 0, sizeof(*probe_ent)); 374 probe_ent = devm_kzalloc(&pdev->dev, sizeof(*probe_ent), GFP_KERNEL);
375 if (probe_ent == NULL)
376 return -ENOMEM;
408 probe_ent->dev = pci_dev_to_dev(pdev); 377 probe_ent->dev = pci_dev_to_dev(pdev);
409 INIT_LIST_HEAD(&probe_ent->node); 378 INIT_LIST_HEAD(&probe_ent->node);
410 379
411 mmio_base = pci_iomap(pdev, 0, 0); 380 mmio_base = pcim_iomap(pdev, 0, 0);
412 if (mmio_base == NULL) { 381 if (mmio_base == NULL)
413 rc = -ENOMEM; 382 return -ENOMEM;
414 goto err_out_free_ent;
415 }
416 base = (unsigned long) mmio_base; 383 base = (unsigned long) mmio_base;
417 384
418 hpriv = kmalloc(sizeof(*hpriv), GFP_KERNEL);
419 if (!hpriv) {
420 rc = -ENOMEM;
421 goto err_out_iounmap;
422 }
423 memset(hpriv, 0, sizeof(*hpriv));
424
425 /* 385 /*
426 * Due to a bug in the chip, the default cache line size can't be used 386 * Due to a bug in the chip, the default cache line size can't be used
427 */ 387 */
428 pci_write_config_byte(pdev, PCI_CACHE_LINE_SIZE, 0x80); 388 pci_write_config_byte(pdev, PCI_CACHE_LINE_SIZE, 0x80);
429 389
430 if (pci_enable_msi(pdev) == 0) { 390 if (pci_enable_msi(pdev) == 0)
431 hpriv->hp_flags |= VSC_SATA_HP_FLAG_MSI;
432 pci_intx(pdev, 0); 391 pci_intx(pdev, 0);
433 }
434 else 392 else
435 probe_ent->irq_flags = IRQF_SHARED; 393 probe_ent->irq_flags = IRQF_SHARED;
436 394
@@ -441,7 +399,6 @@ static int __devinit vsc_sata_init_one (struct pci_dev *pdev, const struct pci_d
441 probe_ent->n_ports = 4; 399 probe_ent->n_ports = 4;
442 probe_ent->irq = pdev->irq; 400 probe_ent->irq = pdev->irq;
443 probe_ent->mmio_base = mmio_base; 401 probe_ent->mmio_base = mmio_base;
444 probe_ent->private_data = hpriv;
445 402
446 /* We don't care much about the PIO/UDMA masks, but the core won't like us 403 /* We don't care much about the PIO/UDMA masks, but the core won't like us
447 * if we don't fill these 404 * if we don't fill these
@@ -466,22 +423,11 @@ static int __devinit vsc_sata_init_one (struct pci_dev *pdev, const struct pci_d
466 */ 423 */
467 pci_write_config_dword(pdev, 0x98, 0); 424 pci_write_config_dword(pdev, 0x98, 0);
468 425
469 /* FIXME: check ata_device_add return value */ 426 if (!ata_device_add(probe_ent))
470 ata_device_add(probe_ent); 427 return -ENODEV;
471 428
472 kfree(probe_ent); 429 devm_kfree(&pdev->dev, probe_ent);
473 return 0; 430 return 0;
474
475err_out_iounmap:
476 pci_iounmap(pdev, mmio_base);
477err_out_free_ent:
478 kfree(probe_ent);
479err_out_regions:
480 pci_release_regions(pdev);
481err_out:
482 if (!pci_dev_busy)
483 pci_disable_device(pdev);
484 return rc;
485} 431}
486 432
487static const struct pci_device_id vsc_sata_pci_tbl[] = { 433static const struct pci_device_id vsc_sata_pci_tbl[] = {