diff options
Diffstat (limited to 'drivers/ata')
31 files changed, 119 insertions, 40 deletions
diff --git a/drivers/ata/ahci.c b/drivers/ata/ahci.c index fdc9bcbe55a2..5326af28a410 100644 --- a/drivers/ata/ahci.c +++ b/drivers/ata/ahci.c | |||
@@ -42,6 +42,7 @@ | |||
42 | #include <linux/dma-mapping.h> | 42 | #include <linux/dma-mapping.h> |
43 | #include <linux/device.h> | 43 | #include <linux/device.h> |
44 | #include <linux/dmi.h> | 44 | #include <linux/dmi.h> |
45 | #include <linux/gfp.h> | ||
45 | #include <scsi/scsi_host.h> | 46 | #include <scsi/scsi_host.h> |
46 | #include <scsi/scsi_cmnd.h> | 47 | #include <scsi/scsi_cmnd.h> |
47 | #include <linux/libata.h> | 48 | #include <linux/libata.h> |
diff --git a/drivers/ata/ata_piix.c b/drivers/ata/ata_piix.c index c33806654e46..83bc49fac9bb 100644 --- a/drivers/ata/ata_piix.c +++ b/drivers/ata/ata_piix.c | |||
@@ -90,6 +90,7 @@ | |||
90 | #include <linux/blkdev.h> | 90 | #include <linux/blkdev.h> |
91 | #include <linux/delay.h> | 91 | #include <linux/delay.h> |
92 | #include <linux/device.h> | 92 | #include <linux/device.h> |
93 | #include <linux/gfp.h> | ||
93 | #include <scsi/scsi_host.h> | 94 | #include <scsi/scsi_host.h> |
94 | #include <linux/libata.h> | 95 | #include <linux/libata.h> |
95 | #include <linux/dmi.h> | 96 | #include <linux/dmi.h> |
diff --git a/drivers/ata/libata-acpi.c b/drivers/ata/libata-acpi.c index 292fdbc0431a..7b5eea7e01dc 100644 --- a/drivers/ata/libata-acpi.c +++ b/drivers/ata/libata-acpi.c | |||
@@ -15,6 +15,7 @@ | |||
15 | #include <linux/acpi.h> | 15 | #include <linux/acpi.h> |
16 | #include <linux/libata.h> | 16 | #include <linux/libata.h> |
17 | #include <linux/pci.h> | 17 | #include <linux/pci.h> |
18 | #include <linux/slab.h> | ||
18 | #include <scsi/scsi_device.h> | 19 | #include <scsi/scsi_device.h> |
19 | #include "libata.h" | 20 | #include "libata.h" |
20 | 21 | ||
diff --git a/drivers/ata/libata-core.c b/drivers/ata/libata-core.c index 4a28420efff2..49cffb6094a3 100644 --- a/drivers/ata/libata-core.c +++ b/drivers/ata/libata-core.c | |||
@@ -58,6 +58,7 @@ | |||
58 | #include <linux/io.h> | 58 | #include <linux/io.h> |
59 | #include <linux/async.h> | 59 | #include <linux/async.h> |
60 | #include <linux/log2.h> | 60 | #include <linux/log2.h> |
61 | #include <linux/slab.h> | ||
61 | #include <scsi/scsi.h> | 62 | #include <scsi/scsi.h> |
62 | #include <scsi/scsi_cmnd.h> | 63 | #include <scsi/scsi_cmnd.h> |
63 | #include <scsi/scsi_host.h> | 64 | #include <scsi/scsi_host.h> |
@@ -1493,6 +1494,7 @@ static int ata_hpa_resize(struct ata_device *dev) | |||
1493 | { | 1494 | { |
1494 | struct ata_eh_context *ehc = &dev->link->eh_context; | 1495 | struct ata_eh_context *ehc = &dev->link->eh_context; |
1495 | int print_info = ehc->i.flags & ATA_EHI_PRINTINFO; | 1496 | int print_info = ehc->i.flags & ATA_EHI_PRINTINFO; |
1497 | bool unlock_hpa = ata_ignore_hpa || dev->flags & ATA_DFLAG_UNLOCK_HPA; | ||
1496 | u64 sectors = ata_id_n_sectors(dev->id); | 1498 | u64 sectors = ata_id_n_sectors(dev->id); |
1497 | u64 native_sectors; | 1499 | u64 native_sectors; |
1498 | int rc; | 1500 | int rc; |
@@ -1509,7 +1511,7 @@ static int ata_hpa_resize(struct ata_device *dev) | |||
1509 | /* If device aborted the command or HPA isn't going to | 1511 | /* If device aborted the command or HPA isn't going to |
1510 | * be unlocked, skip HPA resizing. | 1512 | * be unlocked, skip HPA resizing. |
1511 | */ | 1513 | */ |
1512 | if (rc == -EACCES || !ata_ignore_hpa) { | 1514 | if (rc == -EACCES || !unlock_hpa) { |
1513 | ata_dev_printk(dev, KERN_WARNING, "HPA support seems " | 1515 | ata_dev_printk(dev, KERN_WARNING, "HPA support seems " |
1514 | "broken, skipping HPA handling\n"); | 1516 | "broken, skipping HPA handling\n"); |
1515 | dev->horkage |= ATA_HORKAGE_BROKEN_HPA; | 1517 | dev->horkage |= ATA_HORKAGE_BROKEN_HPA; |
@@ -1524,7 +1526,7 @@ static int ata_hpa_resize(struct ata_device *dev) | |||
1524 | dev->n_native_sectors = native_sectors; | 1526 | dev->n_native_sectors = native_sectors; |
1525 | 1527 | ||
1526 | /* nothing to do? */ | 1528 | /* nothing to do? */ |
1527 | if (native_sectors <= sectors || !ata_ignore_hpa) { | 1529 | if (native_sectors <= sectors || !unlock_hpa) { |
1528 | if (!print_info || native_sectors == sectors) | 1530 | if (!print_info || native_sectors == sectors) |
1529 | return 0; | 1531 | return 0; |
1530 | 1532 | ||
@@ -4185,36 +4187,51 @@ int ata_dev_revalidate(struct ata_device *dev, unsigned int new_class, | |||
4185 | goto fail; | 4187 | goto fail; |
4186 | 4188 | ||
4187 | /* verify n_sectors hasn't changed */ | 4189 | /* verify n_sectors hasn't changed */ |
4188 | if (dev->class == ATA_DEV_ATA && n_sectors && | 4190 | if (dev->class != ATA_DEV_ATA || !n_sectors || |
4189 | dev->n_sectors != n_sectors) { | 4191 | dev->n_sectors == n_sectors) |
4190 | ata_dev_printk(dev, KERN_WARNING, "n_sectors mismatch " | 4192 | return 0; |
4191 | "%llu != %llu\n", | 4193 | |
4192 | (unsigned long long)n_sectors, | 4194 | /* n_sectors has changed */ |
4193 | (unsigned long long)dev->n_sectors); | 4195 | ata_dev_printk(dev, KERN_WARNING, "n_sectors mismatch %llu != %llu\n", |
4194 | /* | 4196 | (unsigned long long)n_sectors, |
4195 | * Something could have caused HPA to be unlocked | 4197 | (unsigned long long)dev->n_sectors); |
4196 | * involuntarily. If n_native_sectors hasn't changed | 4198 | |
4197 | * and the new size matches it, keep the device. | 4199 | /* |
4198 | */ | 4200 | * Something could have caused HPA to be unlocked |
4199 | if (dev->n_native_sectors == n_native_sectors && | 4201 | * involuntarily. If n_native_sectors hasn't changed and the |
4200 | dev->n_sectors > n_sectors && | 4202 | * new size matches it, keep the device. |
4201 | dev->n_sectors == n_native_sectors) { | 4203 | */ |
4202 | ata_dev_printk(dev, KERN_WARNING, | 4204 | if (dev->n_native_sectors == n_native_sectors && |
4203 | "new n_sectors matches native, probably " | 4205 | dev->n_sectors > n_sectors && dev->n_sectors == n_native_sectors) { |
4204 | "late HPA unlock, continuing\n"); | 4206 | ata_dev_printk(dev, KERN_WARNING, |
4205 | /* keep using the old n_sectors */ | 4207 | "new n_sectors matches native, probably " |
4206 | dev->n_sectors = n_sectors; | 4208 | "late HPA unlock, continuing\n"); |
4207 | } else { | 4209 | /* keep using the old n_sectors */ |
4208 | /* restore original n_[native]_sectors and fail */ | 4210 | dev->n_sectors = n_sectors; |
4209 | dev->n_native_sectors = n_native_sectors; | 4211 | return 0; |
4210 | dev->n_sectors = n_sectors; | ||
4211 | rc = -ENODEV; | ||
4212 | goto fail; | ||
4213 | } | ||
4214 | } | 4212 | } |
4215 | 4213 | ||
4216 | return 0; | 4214 | /* |
4215 | * Some BIOSes boot w/o HPA but resume w/ HPA locked. Try | ||
4216 | * unlocking HPA in those cases. | ||
4217 | * | ||
4218 | * https://bugzilla.kernel.org/show_bug.cgi?id=15396 | ||
4219 | */ | ||
4220 | if (dev->n_native_sectors == n_native_sectors && | ||
4221 | dev->n_sectors < n_sectors && n_sectors == n_native_sectors && | ||
4222 | !(dev->horkage & ATA_HORKAGE_BROKEN_HPA)) { | ||
4223 | ata_dev_printk(dev, KERN_WARNING, | ||
4224 | "old n_sectors matches native, probably " | ||
4225 | "late HPA lock, will try to unlock HPA\n"); | ||
4226 | /* try unlocking HPA */ | ||
4227 | dev->flags |= ATA_DFLAG_UNLOCK_HPA; | ||
4228 | rc = -EIO; | ||
4229 | } else | ||
4230 | rc = -ENODEV; | ||
4217 | 4231 | ||
4232 | /* restore original n_[native_]sectors and fail */ | ||
4233 | dev->n_native_sectors = n_native_sectors; | ||
4234 | dev->n_sectors = n_sectors; | ||
4218 | fail: | 4235 | fail: |
4219 | ata_dev_printk(dev, KERN_ERR, "revalidation failed (errno=%d)\n", rc); | 4236 | ata_dev_printk(dev, KERN_ERR, "revalidation failed (errno=%d)\n", rc); |
4220 | return rc; | 4237 | return rc; |
@@ -4353,6 +4370,9 @@ static const struct ata_blacklist_entry ata_device_blacklist [] = { | |||
4353 | { "HTS541080G9SA00", "MB4OC60D", ATA_HORKAGE_NONCQ, }, | 4370 | { "HTS541080G9SA00", "MB4OC60D", ATA_HORKAGE_NONCQ, }, |
4354 | { "HTS541010G9SA00", "MBZOC60D", ATA_HORKAGE_NONCQ, }, | 4371 | { "HTS541010G9SA00", "MBZOC60D", ATA_HORKAGE_NONCQ, }, |
4355 | 4372 | ||
4373 | /* https://bugzilla.kernel.org/show_bug.cgi?id=15573 */ | ||
4374 | { "C300-CTFDDAC128MAG", "0001", ATA_HORKAGE_NONCQ, }, | ||
4375 | |||
4356 | /* devices which puke on READ_NATIVE_MAX */ | 4376 | /* devices which puke on READ_NATIVE_MAX */ |
4357 | { "HDS724040KLSA80", "KFAOA20N", ATA_HORKAGE_BROKEN_HPA, }, | 4377 | { "HDS724040KLSA80", "KFAOA20N", ATA_HORKAGE_BROKEN_HPA, }, |
4358 | { "WDC WD3200JD-00KLB0", "WD-WCAMR1130137", ATA_HORKAGE_BROKEN_HPA }, | 4378 | { "WDC WD3200JD-00KLB0", "WD-WCAMR1130137", ATA_HORKAGE_BROKEN_HPA }, |
diff --git a/drivers/ata/libata-pmp.c b/drivers/ata/libata-pmp.c index 51f0ffb78cbd..00305f41ed86 100644 --- a/drivers/ata/libata-pmp.c +++ b/drivers/ata/libata-pmp.c | |||
@@ -9,6 +9,7 @@ | |||
9 | 9 | ||
10 | #include <linux/kernel.h> | 10 | #include <linux/kernel.h> |
11 | #include <linux/libata.h> | 11 | #include <linux/libata.h> |
12 | #include <linux/slab.h> | ||
12 | #include "libata.h" | 13 | #include "libata.h" |
13 | 14 | ||
14 | const struct ata_port_operations sata_pmp_port_ops = { | 15 | const struct ata_port_operations sata_pmp_port_ops = { |
diff --git a/drivers/ata/libata-scsi.c b/drivers/ata/libata-scsi.c index bea003a24d27..0088cdeb0b1e 100644 --- a/drivers/ata/libata-scsi.c +++ b/drivers/ata/libata-scsi.c | |||
@@ -33,6 +33,7 @@ | |||
33 | * | 33 | * |
34 | */ | 34 | */ |
35 | 35 | ||
36 | #include <linux/slab.h> | ||
36 | #include <linux/kernel.h> | 37 | #include <linux/kernel.h> |
37 | #include <linux/blkdev.h> | 38 | #include <linux/blkdev.h> |
38 | #include <linux/spinlock.h> | 39 | #include <linux/spinlock.h> |
diff --git a/drivers/ata/libata-sff.c b/drivers/ata/libata-sff.c index 561dec2481cb..e3877b6843c9 100644 --- a/drivers/ata/libata-sff.c +++ b/drivers/ata/libata-sff.c | |||
@@ -33,6 +33,7 @@ | |||
33 | */ | 33 | */ |
34 | 34 | ||
35 | #include <linux/kernel.h> | 35 | #include <linux/kernel.h> |
36 | #include <linux/gfp.h> | ||
36 | #include <linux/pci.h> | 37 | #include <linux/pci.h> |
37 | #include <linux/libata.h> | 38 | #include <linux/libata.h> |
38 | #include <linux/highmem.h> | 39 | #include <linux/highmem.h> |
@@ -1667,6 +1668,7 @@ unsigned int ata_sff_host_intr(struct ata_port *ap, | |||
1667 | { | 1668 | { |
1668 | struct ata_eh_info *ehi = &ap->link.eh_info; | 1669 | struct ata_eh_info *ehi = &ap->link.eh_info; |
1669 | u8 status, host_stat = 0; | 1670 | u8 status, host_stat = 0; |
1671 | bool bmdma_stopped = false; | ||
1670 | 1672 | ||
1671 | VPRINTK("ata%u: protocol %d task_state %d\n", | 1673 | VPRINTK("ata%u: protocol %d task_state %d\n", |
1672 | ap->print_id, qc->tf.protocol, ap->hsm_task_state); | 1674 | ap->print_id, qc->tf.protocol, ap->hsm_task_state); |
@@ -1699,6 +1701,7 @@ unsigned int ata_sff_host_intr(struct ata_port *ap, | |||
1699 | 1701 | ||
1700 | /* before we do anything else, clear DMA-Start bit */ | 1702 | /* before we do anything else, clear DMA-Start bit */ |
1701 | ap->ops->bmdma_stop(qc); | 1703 | ap->ops->bmdma_stop(qc); |
1704 | bmdma_stopped = true; | ||
1702 | 1705 | ||
1703 | if (unlikely(host_stat & ATA_DMA_ERR)) { | 1706 | if (unlikely(host_stat & ATA_DMA_ERR)) { |
1704 | /* error when transfering data to/from memory */ | 1707 | /* error when transfering data to/from memory */ |
@@ -1716,8 +1719,14 @@ unsigned int ata_sff_host_intr(struct ata_port *ap, | |||
1716 | 1719 | ||
1717 | /* check main status, clearing INTRQ if needed */ | 1720 | /* check main status, clearing INTRQ if needed */ |
1718 | status = ata_sff_irq_status(ap); | 1721 | status = ata_sff_irq_status(ap); |
1719 | if (status & ATA_BUSY) | 1722 | if (status & ATA_BUSY) { |
1720 | goto idle_irq; | 1723 | if (bmdma_stopped) { |
1724 | /* BMDMA engine is already stopped, we're screwed */ | ||
1725 | qc->err_mask |= AC_ERR_HSM; | ||
1726 | ap->hsm_task_state = HSM_ST_ERR; | ||
1727 | } else | ||
1728 | goto idle_irq; | ||
1729 | } | ||
1721 | 1730 | ||
1722 | /* ack bmdma irq events */ | 1731 | /* ack bmdma irq events */ |
1723 | ap->ops->sff_irq_clear(ap); | 1732 | ap->ops->sff_irq_clear(ap); |
@@ -1762,13 +1771,16 @@ EXPORT_SYMBOL_GPL(ata_sff_host_intr); | |||
1762 | irqreturn_t ata_sff_interrupt(int irq, void *dev_instance) | 1771 | irqreturn_t ata_sff_interrupt(int irq, void *dev_instance) |
1763 | { | 1772 | { |
1764 | struct ata_host *host = dev_instance; | 1773 | struct ata_host *host = dev_instance; |
1774 | bool retried = false; | ||
1765 | unsigned int i; | 1775 | unsigned int i; |
1766 | unsigned int handled = 0, polling = 0; | 1776 | unsigned int handled, idle, polling; |
1767 | unsigned long flags; | 1777 | unsigned long flags; |
1768 | 1778 | ||
1769 | /* TODO: make _irqsave conditional on x86 PCI IDE legacy mode */ | 1779 | /* TODO: make _irqsave conditional on x86 PCI IDE legacy mode */ |
1770 | spin_lock_irqsave(&host->lock, flags); | 1780 | spin_lock_irqsave(&host->lock, flags); |
1771 | 1781 | ||
1782 | retry: | ||
1783 | handled = idle = polling = 0; | ||
1772 | for (i = 0; i < host->n_ports; i++) { | 1784 | for (i = 0; i < host->n_ports; i++) { |
1773 | struct ata_port *ap = host->ports[i]; | 1785 | struct ata_port *ap = host->ports[i]; |
1774 | struct ata_queued_cmd *qc; | 1786 | struct ata_queued_cmd *qc; |
@@ -1782,7 +1794,8 @@ irqreturn_t ata_sff_interrupt(int irq, void *dev_instance) | |||
1782 | handled |= ata_sff_host_intr(ap, qc); | 1794 | handled |= ata_sff_host_intr(ap, qc); |
1783 | else | 1795 | else |
1784 | polling |= 1 << i; | 1796 | polling |= 1 << i; |
1785 | } | 1797 | } else |
1798 | idle |= 1 << i; | ||
1786 | } | 1799 | } |
1787 | 1800 | ||
1788 | /* | 1801 | /* |
@@ -1790,7 +1803,9 @@ irqreturn_t ata_sff_interrupt(int irq, void *dev_instance) | |||
1790 | * asserting IRQ line, nobody cared will ensue. Check IRQ | 1803 | * asserting IRQ line, nobody cared will ensue. Check IRQ |
1791 | * pending status if available and clear spurious IRQ. | 1804 | * pending status if available and clear spurious IRQ. |
1792 | */ | 1805 | */ |
1793 | if (!handled) { | 1806 | if (!handled && !retried) { |
1807 | bool retry = false; | ||
1808 | |||
1794 | for (i = 0; i < host->n_ports; i++) { | 1809 | for (i = 0; i < host->n_ports; i++) { |
1795 | struct ata_port *ap = host->ports[i]; | 1810 | struct ata_port *ap = host->ports[i]; |
1796 | 1811 | ||
@@ -1801,12 +1816,23 @@ irqreturn_t ata_sff_interrupt(int irq, void *dev_instance) | |||
1801 | !ap->ops->sff_irq_check(ap)) | 1816 | !ap->ops->sff_irq_check(ap)) |
1802 | continue; | 1817 | continue; |
1803 | 1818 | ||
1804 | if (printk_ratelimit()) | 1819 | if (idle & (1 << i)) { |
1805 | ata_port_printk(ap, KERN_INFO, | 1820 | ap->ops->sff_check_status(ap); |
1806 | "clearing spurious IRQ\n"); | 1821 | ap->ops->sff_irq_clear(ap); |
1822 | } else { | ||
1823 | /* clear INTRQ and check if BUSY cleared */ | ||
1824 | if (!(ap->ops->sff_check_status(ap) & ATA_BUSY)) | ||
1825 | retry |= true; | ||
1826 | /* | ||
1827 | * With command in flight, we can't do | ||
1828 | * sff_irq_clear() w/o racing with completion. | ||
1829 | */ | ||
1830 | } | ||
1831 | } | ||
1807 | 1832 | ||
1808 | ap->ops->sff_check_status(ap); | 1833 | if (retry) { |
1809 | ap->ops->sff_irq_clear(ap); | 1834 | retried = true; |
1835 | goto retry; | ||
1810 | } | 1836 | } |
1811 | } | 1837 | } |
1812 | 1838 | ||
diff --git a/drivers/ata/pata_acpi.c b/drivers/ata/pata_acpi.c index 8e5e13210426..1ea2be0f4b94 100644 --- a/drivers/ata/pata_acpi.c +++ b/drivers/ata/pata_acpi.c | |||
@@ -11,6 +11,7 @@ | |||
11 | #include <linux/blkdev.h> | 11 | #include <linux/blkdev.h> |
12 | #include <linux/delay.h> | 12 | #include <linux/delay.h> |
13 | #include <linux/device.h> | 13 | #include <linux/device.h> |
14 | #include <linux/gfp.h> | ||
14 | #include <scsi/scsi_host.h> | 15 | #include <scsi/scsi_host.h> |
15 | #include <acpi/acpi_bus.h> | 16 | #include <acpi/acpi_bus.h> |
16 | 17 | ||
diff --git a/drivers/ata/pata_at32.c b/drivers/ata/pata_at32.c index 5c129f99a7e3..66ce6a526f27 100644 --- a/drivers/ata/pata_at32.c +++ b/drivers/ata/pata_at32.c | |||
@@ -18,6 +18,7 @@ | |||
18 | #include <linux/delay.h> | 18 | #include <linux/delay.h> |
19 | #include <linux/interrupt.h> | 19 | #include <linux/interrupt.h> |
20 | #include <linux/irq.h> | 20 | #include <linux/irq.h> |
21 | #include <linux/slab.h> | ||
21 | #include <scsi/scsi_host.h> | 22 | #include <scsi/scsi_host.h> |
22 | #include <linux/ata.h> | 23 | #include <linux/ata.h> |
23 | #include <linux/libata.h> | 24 | #include <linux/libata.h> |
diff --git a/drivers/ata/pata_at91.c b/drivers/ata/pata_at91.c index 376dd380b43c..c6a946aa252c 100644 --- a/drivers/ata/pata_at91.c +++ b/drivers/ata/pata_at91.c | |||
@@ -19,6 +19,7 @@ | |||
19 | #include <linux/module.h> | 19 | #include <linux/module.h> |
20 | #include <linux/init.h> | 20 | #include <linux/init.h> |
21 | #include <linux/blkdev.h> | 21 | #include <linux/blkdev.h> |
22 | #include <linux/gfp.h> | ||
22 | #include <scsi/scsi_host.h> | 23 | #include <scsi/scsi_host.h> |
23 | #include <linux/ata.h> | 24 | #include <linux/ata.h> |
24 | #include <linux/clk.h> | 25 | #include <linux/clk.h> |
diff --git a/drivers/ata/pata_atp867x.c b/drivers/ata/pata_atp867x.c index 6fe7ded40c6a..bb6e0746e07d 100644 --- a/drivers/ata/pata_atp867x.c +++ b/drivers/ata/pata_atp867x.c | |||
@@ -33,6 +33,7 @@ | |||
33 | #include <linux/blkdev.h> | 33 | #include <linux/blkdev.h> |
34 | #include <linux/delay.h> | 34 | #include <linux/delay.h> |
35 | #include <linux/device.h> | 35 | #include <linux/device.h> |
36 | #include <linux/gfp.h> | ||
36 | #include <scsi/scsi_host.h> | 37 | #include <scsi/scsi_host.h> |
37 | #include <linux/libata.h> | 38 | #include <linux/libata.h> |
38 | 39 | ||
diff --git a/drivers/ata/pata_cmd640.c b/drivers/ata/pata_cmd640.c index 6cd5d5dd9e3b..45896b3c6538 100644 --- a/drivers/ata/pata_cmd640.c +++ b/drivers/ata/pata_cmd640.c | |||
@@ -18,6 +18,7 @@ | |||
18 | #include <linux/init.h> | 18 | #include <linux/init.h> |
19 | #include <linux/blkdev.h> | 19 | #include <linux/blkdev.h> |
20 | #include <linux/delay.h> | 20 | #include <linux/delay.h> |
21 | #include <linux/gfp.h> | ||
21 | #include <scsi/scsi_host.h> | 22 | #include <scsi/scsi_host.h> |
22 | #include <linux/libata.h> | 23 | #include <linux/libata.h> |
23 | 24 | ||
diff --git a/drivers/ata/pata_icside.c b/drivers/ata/pata_icside.c index b663b7ffae4b..fa812e206eeb 100644 --- a/drivers/ata/pata_icside.c +++ b/drivers/ata/pata_icside.c | |||
@@ -2,6 +2,7 @@ | |||
2 | #include <linux/module.h> | 2 | #include <linux/module.h> |
3 | #include <linux/init.h> | 3 | #include <linux/init.h> |
4 | #include <linux/blkdev.h> | 4 | #include <linux/blkdev.h> |
5 | #include <linux/gfp.h> | ||
5 | #include <scsi/scsi_host.h> | 6 | #include <scsi/scsi_host.h> |
6 | #include <linux/ata.h> | 7 | #include <linux/ata.h> |
7 | #include <linux/libata.h> | 8 | #include <linux/libata.h> |
diff --git a/drivers/ata/pata_it821x.c b/drivers/ata/pata_it821x.c index 9bde1cb5f981..5cb286fd839e 100644 --- a/drivers/ata/pata_it821x.c +++ b/drivers/ata/pata_it821x.c | |||
@@ -75,6 +75,7 @@ | |||
75 | #include <linux/init.h> | 75 | #include <linux/init.h> |
76 | #include <linux/blkdev.h> | 76 | #include <linux/blkdev.h> |
77 | #include <linux/delay.h> | 77 | #include <linux/delay.h> |
78 | #include <linux/slab.h> | ||
78 | #include <scsi/scsi_host.h> | 79 | #include <scsi/scsi_host.h> |
79 | #include <linux/libata.h> | 80 | #include <linux/libata.h> |
80 | 81 | ||
diff --git a/drivers/ata/pata_macio.c b/drivers/ata/pata_macio.c index 4cc7bbd10ec2..211b6438b3a0 100644 --- a/drivers/ata/pata_macio.c +++ b/drivers/ata/pata_macio.c | |||
@@ -21,6 +21,7 @@ | |||
21 | #include <linux/pmu.h> | 21 | #include <linux/pmu.h> |
22 | #include <linux/scatterlist.h> | 22 | #include <linux/scatterlist.h> |
23 | #include <linux/of.h> | 23 | #include <linux/of.h> |
24 | #include <linux/gfp.h> | ||
24 | 25 | ||
25 | #include <scsi/scsi.h> | 26 | #include <scsi/scsi.h> |
26 | #include <scsi/scsi_host.h> | 27 | #include <scsi/scsi_host.h> |
diff --git a/drivers/ata/pata_mpc52xx.c b/drivers/ata/pata_mpc52xx.c index 2bc2dbe30e8f..9f5b053611dd 100644 --- a/drivers/ata/pata_mpc52xx.c +++ b/drivers/ata/pata_mpc52xx.c | |||
@@ -16,7 +16,7 @@ | |||
16 | 16 | ||
17 | #include <linux/kernel.h> | 17 | #include <linux/kernel.h> |
18 | #include <linux/module.h> | 18 | #include <linux/module.h> |
19 | #include <linux/slab.h> | 19 | #include <linux/gfp.h> |
20 | #include <linux/delay.h> | 20 | #include <linux/delay.h> |
21 | #include <linux/libata.h> | 21 | #include <linux/libata.h> |
22 | #include <linux/of_platform.h> | 22 | #include <linux/of_platform.h> |
diff --git a/drivers/ata/pata_octeon_cf.c b/drivers/ata/pata_octeon_cf.c index 37ef416c1242..005a44483a7b 100644 --- a/drivers/ata/pata_octeon_cf.c +++ b/drivers/ata/pata_octeon_cf.c | |||
@@ -13,6 +13,7 @@ | |||
13 | #include <linux/module.h> | 13 | #include <linux/module.h> |
14 | #include <linux/libata.h> | 14 | #include <linux/libata.h> |
15 | #include <linux/irq.h> | 15 | #include <linux/irq.h> |
16 | #include <linux/slab.h> | ||
16 | #include <linux/platform_device.h> | 17 | #include <linux/platform_device.h> |
17 | #include <linux/workqueue.h> | 18 | #include <linux/workqueue.h> |
18 | #include <scsi/scsi_host.h> | 19 | #include <scsi/scsi_host.h> |
diff --git a/drivers/ata/pata_pcmcia.c b/drivers/ata/pata_pcmcia.c index 147de2fd66d2..3c3172d3c34e 100644 --- a/drivers/ata/pata_pcmcia.c +++ b/drivers/ata/pata_pcmcia.c | |||
@@ -29,6 +29,7 @@ | |||
29 | #include <linux/init.h> | 29 | #include <linux/init.h> |
30 | #include <linux/blkdev.h> | 30 | #include <linux/blkdev.h> |
31 | #include <linux/delay.h> | 31 | #include <linux/delay.h> |
32 | #include <linux/slab.h> | ||
32 | #include <scsi/scsi_host.h> | 33 | #include <scsi/scsi_host.h> |
33 | #include <linux/ata.h> | 34 | #include <linux/ata.h> |
34 | #include <linux/libata.h> | 35 | #include <linux/libata.h> |
diff --git a/drivers/ata/pata_rb532_cf.c b/drivers/ata/pata_rb532_cf.c index 45f1e10f917b..0ffd631000b7 100644 --- a/drivers/ata/pata_rb532_cf.c +++ b/drivers/ata/pata_rb532_cf.c | |||
@@ -19,6 +19,7 @@ | |||
19 | * | 19 | * |
20 | */ | 20 | */ |
21 | 21 | ||
22 | #include <linux/gfp.h> | ||
22 | #include <linux/kernel.h> | 23 | #include <linux/kernel.h> |
23 | #include <linux/module.h> | 24 | #include <linux/module.h> |
24 | #include <linux/platform_device.h> | 25 | #include <linux/platform_device.h> |
diff --git a/drivers/ata/pata_rdc.c b/drivers/ata/pata_rdc.c index 237a24d41a2d..37092cfd7bc6 100644 --- a/drivers/ata/pata_rdc.c +++ b/drivers/ata/pata_rdc.c | |||
@@ -28,6 +28,7 @@ | |||
28 | #include <linux/blkdev.h> | 28 | #include <linux/blkdev.h> |
29 | #include <linux/delay.h> | 29 | #include <linux/delay.h> |
30 | #include <linux/device.h> | 30 | #include <linux/device.h> |
31 | #include <linux/gfp.h> | ||
31 | #include <scsi/scsi_host.h> | 32 | #include <scsi/scsi_host.h> |
32 | #include <linux/libata.h> | 33 | #include <linux/libata.h> |
33 | #include <linux/dmi.h> | 34 | #include <linux/dmi.h> |
diff --git a/drivers/ata/pata_via.c b/drivers/ata/pata_via.c index 3059ec017de3..741e7cb69d8c 100644 --- a/drivers/ata/pata_via.c +++ b/drivers/ata/pata_via.c | |||
@@ -58,6 +58,7 @@ | |||
58 | #include <linux/init.h> | 58 | #include <linux/init.h> |
59 | #include <linux/blkdev.h> | 59 | #include <linux/blkdev.h> |
60 | #include <linux/delay.h> | 60 | #include <linux/delay.h> |
61 | #include <linux/gfp.h> | ||
61 | #include <scsi/scsi_host.h> | 62 | #include <scsi/scsi_host.h> |
62 | #include <linux/libata.h> | 63 | #include <linux/libata.h> |
63 | #include <linux/dmi.h> | 64 | #include <linux/dmi.h> |
@@ -576,6 +577,10 @@ static int via_init_one(struct pci_dev *pdev, const struct pci_device_id *id) | |||
576 | u8 rev = isa->revision; | 577 | u8 rev = isa->revision; |
577 | pci_dev_put(isa); | 578 | pci_dev_put(isa); |
578 | 579 | ||
580 | if ((id->device == 0x0415 || id->device == 0x3164) && | ||
581 | (config->id != id->device)) | ||
582 | continue; | ||
583 | |||
579 | if (rev >= config->rev_min && rev <= config->rev_max) | 584 | if (rev >= config->rev_min && rev <= config->rev_max) |
580 | break; | 585 | break; |
581 | } | 586 | } |
@@ -677,6 +682,7 @@ static const struct pci_device_id via[] = { | |||
677 | { PCI_VDEVICE(VIA, 0x3164), }, | 682 | { PCI_VDEVICE(VIA, 0x3164), }, |
678 | { PCI_VDEVICE(VIA, 0x5324), }, | 683 | { PCI_VDEVICE(VIA, 0x5324), }, |
679 | { PCI_VDEVICE(VIA, 0xC409), VIA_IDFLAG_SINGLE }, | 684 | { PCI_VDEVICE(VIA, 0xC409), VIA_IDFLAG_SINGLE }, |
685 | { PCI_VDEVICE(VIA, 0x9001), VIA_IDFLAG_SINGLE }, | ||
680 | 686 | ||
681 | { }, | 687 | { }, |
682 | }; | 688 | }; |
diff --git a/drivers/ata/pdc_adma.c b/drivers/ata/pdc_adma.c index 6c65b0776a2c..5904cfdb8dbe 100644 --- a/drivers/ata/pdc_adma.c +++ b/drivers/ata/pdc_adma.c | |||
@@ -34,6 +34,7 @@ | |||
34 | 34 | ||
35 | #include <linux/kernel.h> | 35 | #include <linux/kernel.h> |
36 | #include <linux/module.h> | 36 | #include <linux/module.h> |
37 | #include <linux/gfp.h> | ||
37 | #include <linux/pci.h> | 38 | #include <linux/pci.h> |
38 | #include <linux/init.h> | 39 | #include <linux/init.h> |
39 | #include <linux/blkdev.h> | 40 | #include <linux/blkdev.h> |
diff --git a/drivers/ata/sata_fsl.c b/drivers/ata/sata_fsl.c index ce4136eea08f..a69192b38b43 100644 --- a/drivers/ata/sata_fsl.c +++ b/drivers/ata/sata_fsl.c | |||
@@ -18,6 +18,7 @@ | |||
18 | #include <linux/kernel.h> | 18 | #include <linux/kernel.h> |
19 | #include <linux/module.h> | 19 | #include <linux/module.h> |
20 | #include <linux/platform_device.h> | 20 | #include <linux/platform_device.h> |
21 | #include <linux/slab.h> | ||
21 | 22 | ||
22 | #include <scsi/scsi_host.h> | 23 | #include <scsi/scsi_host.h> |
23 | #include <scsi/scsi_cmnd.h> | 24 | #include <scsi/scsi_cmnd.h> |
diff --git a/drivers/ata/sata_inic162x.c b/drivers/ata/sata_inic162x.c index 4406902b4293..27dc6c86a4cd 100644 --- a/drivers/ata/sata_inic162x.c +++ b/drivers/ata/sata_inic162x.c | |||
@@ -39,6 +39,7 @@ | |||
39 | * happy to assist. | 39 | * happy to assist. |
40 | */ | 40 | */ |
41 | 41 | ||
42 | #include <linux/gfp.h> | ||
42 | #include <linux/kernel.h> | 43 | #include <linux/kernel.h> |
43 | #include <linux/module.h> | 44 | #include <linux/module.h> |
44 | #include <linux/pci.h> | 45 | #include <linux/pci.h> |
diff --git a/drivers/ata/sata_mv.c b/drivers/ata/sata_mv.c index df8ee325d3ca..71cc0d42f9e1 100644 --- a/drivers/ata/sata_mv.c +++ b/drivers/ata/sata_mv.c | |||
@@ -64,6 +64,7 @@ | |||
64 | #include <linux/ata_platform.h> | 64 | #include <linux/ata_platform.h> |
65 | #include <linux/mbus.h> | 65 | #include <linux/mbus.h> |
66 | #include <linux/bitops.h> | 66 | #include <linux/bitops.h> |
67 | #include <linux/gfp.h> | ||
67 | #include <scsi/scsi_host.h> | 68 | #include <scsi/scsi_host.h> |
68 | #include <scsi/scsi_cmnd.h> | 69 | #include <scsi/scsi_cmnd.h> |
69 | #include <scsi/scsi_device.h> | 70 | #include <scsi/scsi_device.h> |
diff --git a/drivers/ata/sata_nv.c b/drivers/ata/sata_nv.c index 684fe04dbbb7..2a98b09ab735 100644 --- a/drivers/ata/sata_nv.c +++ b/drivers/ata/sata_nv.c | |||
@@ -38,6 +38,7 @@ | |||
38 | 38 | ||
39 | #include <linux/kernel.h> | 39 | #include <linux/kernel.h> |
40 | #include <linux/module.h> | 40 | #include <linux/module.h> |
41 | #include <linux/gfp.h> | ||
41 | #include <linux/pci.h> | 42 | #include <linux/pci.h> |
42 | #include <linux/init.h> | 43 | #include <linux/init.h> |
43 | #include <linux/blkdev.h> | 44 | #include <linux/blkdev.h> |
diff --git a/drivers/ata/sata_promise.c b/drivers/ata/sata_promise.c index 63306285c843..5356ec00d2b4 100644 --- a/drivers/ata/sata_promise.c +++ b/drivers/ata/sata_promise.c | |||
@@ -33,6 +33,7 @@ | |||
33 | 33 | ||
34 | #include <linux/kernel.h> | 34 | #include <linux/kernel.h> |
35 | #include <linux/module.h> | 35 | #include <linux/module.h> |
36 | #include <linux/gfp.h> | ||
36 | #include <linux/pci.h> | 37 | #include <linux/pci.h> |
37 | #include <linux/init.h> | 38 | #include <linux/init.h> |
38 | #include <linux/blkdev.h> | 39 | #include <linux/blkdev.h> |
diff --git a/drivers/ata/sata_qstor.c b/drivers/ata/sata_qstor.c index 326c0cfc29b3..92ba45e6689b 100644 --- a/drivers/ata/sata_qstor.c +++ b/drivers/ata/sata_qstor.c | |||
@@ -29,6 +29,7 @@ | |||
29 | 29 | ||
30 | #include <linux/kernel.h> | 30 | #include <linux/kernel.h> |
31 | #include <linux/module.h> | 31 | #include <linux/module.h> |
32 | #include <linux/gfp.h> | ||
32 | #include <linux/pci.h> | 33 | #include <linux/pci.h> |
33 | #include <linux/init.h> | 34 | #include <linux/init.h> |
34 | #include <linux/blkdev.h> | 35 | #include <linux/blkdev.h> |
diff --git a/drivers/ata/sata_sil24.c b/drivers/ata/sata_sil24.c index 1370df6c420c..433b6b89c795 100644 --- a/drivers/ata/sata_sil24.c +++ b/drivers/ata/sata_sil24.c | |||
@@ -19,6 +19,7 @@ | |||
19 | 19 | ||
20 | #include <linux/kernel.h> | 20 | #include <linux/kernel.h> |
21 | #include <linux/module.h> | 21 | #include <linux/module.h> |
22 | #include <linux/gfp.h> | ||
22 | #include <linux/pci.h> | 23 | #include <linux/pci.h> |
23 | #include <linux/blkdev.h> | 24 | #include <linux/blkdev.h> |
24 | #include <linux/delay.h> | 25 | #include <linux/delay.h> |
diff --git a/drivers/ata/sata_sx4.c b/drivers/ata/sata_sx4.c index bbcf970068ad..232468f2ea90 100644 --- a/drivers/ata/sata_sx4.c +++ b/drivers/ata/sata_sx4.c | |||
@@ -81,6 +81,7 @@ | |||
81 | #include <linux/kernel.h> | 81 | #include <linux/kernel.h> |
82 | #include <linux/module.h> | 82 | #include <linux/module.h> |
83 | #include <linux/pci.h> | 83 | #include <linux/pci.h> |
84 | #include <linux/slab.h> | ||
84 | #include <linux/init.h> | 85 | #include <linux/init.h> |
85 | #include <linux/blkdev.h> | 86 | #include <linux/blkdev.h> |
86 | #include <linux/delay.h> | 87 | #include <linux/delay.h> |
diff --git a/drivers/ata/sata_uli.c b/drivers/ata/sata_uli.c index e5bff47e8aa1..011e098590d1 100644 --- a/drivers/ata/sata_uli.c +++ b/drivers/ata/sata_uli.c | |||
@@ -26,6 +26,7 @@ | |||
26 | 26 | ||
27 | #include <linux/kernel.h> | 27 | #include <linux/kernel.h> |
28 | #include <linux/module.h> | 28 | #include <linux/module.h> |
29 | #include <linux/gfp.h> | ||
29 | #include <linux/pci.h> | 30 | #include <linux/pci.h> |
30 | #include <linux/init.h> | 31 | #include <linux/init.h> |
31 | #include <linux/blkdev.h> | 32 | #include <linux/blkdev.h> |