Merge branch 'upstream-linus' of master.kernel.org:/pub/scm/linux/kernel/git/jgarzik/libata-dev

* 'upstream-linus' of master.kernel.org:/pub/scm/linux/kernel/git/jgarzik/libata-dev:
libata: kill ATA_HORKAGE_DMA_RW_ONLY
libata: use PIO for non-16 byte aligned ATAPI commands
libata: call ata_check_atapi_dma() with qc better prepared
libata: fix infinite EH waiting bug
libata: fix ata_dev_disable()
pata_it821x: fix section mismatch warning
libata: remove unused variable from ata_eh_reset()
libata: be less verbose about hpa
libata: kill non-sense warning message
libata: kill the infamous abnormal status message
HPT374 is UDMA100 not UDMA133

+34 -62
+18 -36
drivers/ata/libata-core.c
··· 600 600 601 601 void ata_dev_disable(struct ata_device *dev) 602 602 { 603 - if (ata_dev_enabled(dev) && ata_msg_drv(dev->ap)) { 604 - ata_dev_printk(dev, KERN_WARNING, "disabled\n"); 603 + if (ata_dev_enabled(dev)) { 604 + if (ata_msg_drv(dev->ap)) 605 + ata_dev_printk(dev, KERN_WARNING, "disabled\n"); 605 606 ata_down_xfermask_limit(dev, ATA_DNXFER_FORCE_PIO0 | 606 607 ATA_DNXFER_QUIET); 607 608 dev->class++; ··· 984 983 else 985 984 hpa_sectors = ata_read_native_max_address(dev); 986 985 987 - /* if no hpa, both should be equal */ 988 - ata_dev_printk(dev, KERN_INFO, "%s 1: sectors = %lld, " 989 - "hpa_sectors = %lld\n", 990 - __FUNCTION__, (long long)sectors, (long long)hpa_sectors); 991 - 992 986 if (hpa_sectors > sectors) { 993 987 ata_dev_printk(dev, KERN_INFO, 994 988 "Host Protected Area detected:\n" ··· 1005 1009 return hpa_sectors; 1006 1010 } 1007 1011 } 1008 - } 1012 + } else if (hpa_sectors < sectors) 1013 + ata_dev_printk(dev, KERN_WARNING, "%s 1: hpa sectors (%lld) " 1014 + "is smaller than sectors (%lld)\n", __FUNCTION__, 1015 + (long long)hpa_sectors, (long long)sectors); 1016 + 1009 1017 return sectors; 1010 1018 } 1011 1019 ··· 2045 2045 if (ata_device_blacklisted(dev) & ATA_HORKAGE_MAX_SEC_128) 2046 2046 dev->max_sectors = min_t(unsigned int, ATA_MAX_SECTORS_128, 2047 2047 dev->max_sectors); 2048 - 2049 - /* limit ATAPI DMA to R/W commands only */ 2050 - if (ata_device_blacklisted(dev) & ATA_HORKAGE_DMA_RW_ONLY) 2051 - dev->horkage |= ATA_HORKAGE_DMA_RW_ONLY; 2052 2048 2053 2049 if (ap->ops->dev_config) 2054 2050 ap->ops->dev_config(dev); ··· 3776 3780 { "IOMEGA ZIP 250 ATAPI", NULL, ATA_HORKAGE_NODMA }, /* temporary fix */ 3777 3781 3778 3782 /* Weird ATAPI devices */ 3779 - { "TORiSAN DVD-ROM DRD-N216", NULL, ATA_HORKAGE_MAX_SEC_128 | 3780 - ATA_HORKAGE_DMA_RW_ONLY }, 3783 + { "TORiSAN DVD-ROM DRD-N216", NULL, ATA_HORKAGE_MAX_SEC_128 }, 3781 3784 3782 3785 /* Devices we expect to fail diagnostics */ 3783 3786 ··· 4104 4109 if (idx) 4105 4110 ap->prd[idx - 1].flags_len |= cpu_to_le32(ATA_PRD_EOT); 4106 4111 } 4112 + 4107 4113 /** 4108 4114 * ata_check_atapi_dma - Check whether ATAPI DMA can be supported 4109 4115 * @qc: Metadata associated with taskfile to check ··· 4122 4126 int ata_check_atapi_dma(struct ata_queued_cmd *qc) 4123 4127 { 4124 4128 struct ata_port *ap = qc->ap; 4125 - int rc = 0; /* Assume ATAPI DMA is OK by default */ 4126 4129 4127 - /* some drives can only do ATAPI DMA on read/write */ 4128 - if (unlikely(qc->dev->horkage & ATA_HORKAGE_DMA_RW_ONLY)) { 4129 - struct scsi_cmnd *cmd = qc->scsicmd; 4130 - u8 *scsicmd = cmd->cmnd; 4131 - 4132 - switch (scsicmd[0]) { 4133 - case READ_10: 4134 - case WRITE_10: 4135 - case READ_12: 4136 - case WRITE_12: 4137 - case READ_6: 4138 - case WRITE_6: 4139 - /* atapi dma maybe ok */ 4140 - break; 4141 - default: 4142 - /* turn off atapi dma */ 4143 - return 1; 4144 - } 4145 - } 4130 + /* Don't allow DMA if it isn't multiple of 16 bytes. Quite a 4131 + * few ATAPI devices choke on such DMA requests. 4132 + */ 4133 + if (unlikely(qc->nbytes & 15)) 4134 + return 1; 4146 4135 4147 4136 if (ap->ops->check_atapi_dma) 4148 - rc = ap->ops->check_atapi_dma(qc); 4137 + return ap->ops->check_atapi_dma(qc); 4149 4138 4150 - return rc; 4139 + return 0; 4151 4140 } 4141 + 4152 4142 /** 4153 4143 * ata_qc_prep - Prepare taskfile for submission 4154 4144 * @qc: Metadata associated with taskfile to be prepared
+2 -5
drivers/ata/libata-eh.c
··· 336 336 } 337 337 ata_port_printk(ap, KERN_ERR, "EH pending after %d " 338 338 "tries, giving up\n", ATA_EH_MAX_REPEAT); 339 + ap->pflags &= ~ATA_PFLAG_EH_PENDING; 339 340 } 340 341 341 342 /* this run is complete, make sure EH info is clear */ ··· 1617 1616 unsigned long deadline; 1618 1617 unsigned int action; 1619 1618 ata_reset_fn_t reset; 1620 - int i, did_followup_srst, rc; 1619 + int i, rc; 1621 1620 1622 1621 /* about to reset */ 1623 1622 ata_eh_about_to_do(ap, NULL, ehc->i.action & ATA_EH_RESET_MASK); ··· 1666 1665 1667 1666 /* did prereset() screw up? if so, fix up to avoid oopsing */ 1668 1667 if (!reset) { 1669 - ata_port_printk(ap, KERN_ERR, "BUG: prereset() requested " 1670 - "invalid reset type\n"); 1671 1668 if (softreset) 1672 1669 reset = softreset; 1673 1670 else ··· 1688 1689 1689 1690 rc = ata_do_reset(ap, reset, classes, deadline); 1690 1691 1691 - did_followup_srst = 0; 1692 1692 if (reset == hardreset && 1693 1693 ata_eh_followup_srst_needed(rc, classify, classes)) { 1694 1694 /* okay, let's do follow-up softreset */ 1695 - did_followup_srst = 1; 1696 1695 reset = softreset; 1697 1696 1698 1697 if (!reset) {
+8 -12
drivers/ata/libata-scsi.c
··· 2384 2384 int using_pio = (dev->flags & ATA_DFLAG_PIO); 2385 2385 int nodata = (scmd->sc_data_direction == DMA_NONE); 2386 2386 2387 - if (!using_pio) 2388 - /* Check whether ATAPI DMA is safe */ 2389 - if (ata_check_atapi_dma(qc)) 2390 - using_pio = 1; 2391 - 2392 2387 memset(qc->cdb, 0, dev->cdb_len); 2393 2388 memcpy(qc->cdb, scmd->cmnd, scmd->cmd_len); 2394 2389 ··· 2396 2401 } 2397 2402 2398 2403 qc->tf.command = ATA_CMD_PACKET; 2404 + qc->nbytes = scmd->request_bufflen; 2399 2405 2400 - /* no data, or PIO data xfer */ 2406 + /* check whether ATAPI DMA is safe */ 2407 + if (!using_pio && ata_check_atapi_dma(qc)) 2408 + using_pio = 1; 2409 + 2401 2410 if (using_pio || nodata) { 2411 + /* no data, or PIO data xfer */ 2402 2412 if (nodata) 2403 2413 qc->tf.protocol = ATA_PROT_ATAPI_NODATA; 2404 2414 else 2405 2415 qc->tf.protocol = ATA_PROT_ATAPI; 2406 2416 qc->tf.lbam = (8 * 1024) & 0xff; 2407 2417 qc->tf.lbah = (8 * 1024) >> 8; 2408 - } 2409 - 2410 - /* DMA data xfer */ 2411 - else { 2418 + } else { 2419 + /* DMA data xfer */ 2412 2420 qc->tf.protocol = ATA_PROT_ATAPI_DMA; 2413 2421 qc->tf.feature |= ATAPI_PKT_DMA; 2414 2422 ··· 2419 2421 /* some SATA bridges need us to indicate data xfer direction */ 2420 2422 qc->tf.feature |= ATAPI_DMADIR; 2421 2423 } 2422 - 2423 - qc->nbytes = scmd->request_bufflen; 2424 2424 2425 2425 return 0; 2426 2426 }
+2 -2
drivers/ata/pata_hpt37x.c
··· 931 931 .udma_mask = 0x7f, 932 932 .port_ops = &hpt372_port_ops 933 933 }; 934 - /* HPT374 - UDMA133 */ 934 + /* HPT374 - UDMA100 */ 935 935 static const struct ata_port_info info_hpt374 = { 936 936 .sht = &hpt37x_sht, 937 937 .flags = ATA_FLAG_SLAVE_POSS|ATA_FLAG_SRST, 938 938 .pio_mask = 0x1f, 939 939 .mwdma_mask = 0x07, 940 - .udma_mask = 0x7f, 940 + .udma_mask = 0x3f, 941 941 .port_ops = &hpt374_port_ops 942 942 }; 943 943
+1 -1
drivers/ata/pata_it821x.c
··· 690 690 .port_start = it821x_port_start, 691 691 }; 692 692 693 - static void __devinit it821x_disable_raid(struct pci_dev *pdev) 693 + static void it821x_disable_raid(struct pci_dev *pdev) 694 694 { 695 695 /* Reset local CPU, and set BIOS not ready */ 696 696 pci_write_config_byte(pdev, 0x5E, 0x01);
+3 -6
include/linux/libata.h
··· 298 298 ATA_HORKAGE_NODMA = (1 << 1), /* DMA problems */ 299 299 ATA_HORKAGE_NONCQ = (1 << 2), /* Don't use NCQ */ 300 300 ATA_HORKAGE_MAX_SEC_128 = (1 << 3), /* Limit max sects to 128 */ 301 - ATA_HORKAGE_DMA_RW_ONLY = (1 << 4), /* ATAPI DMA for RW only */ 302 301 }; 303 302 304 303 enum hsm_task_states { ··· 1087 1088 { 1088 1089 u8 status = ata_busy_wait(ap, ATA_BUSY | ATA_DRQ, 1000); 1089 1090 1090 - if (status != 0xff && (status & (ATA_BUSY | ATA_DRQ))) { 1091 - if (ata_msg_warn(ap)) 1092 - printk(KERN_WARNING "ATA: abnormal status 0x%X on port 0x%p\n", 1093 - status, ap->ioaddr.status_addr); 1094 - } 1091 + if (status != 0xff && (status & (ATA_BUSY | ATA_DRQ))) 1092 + DPRINTK("ATA: abnormal status 0x%X on port 0x%p\n", 1093 + status, ap->ioaddr.status_addr); 1095 1094 1096 1095 return status; 1097 1096 }