Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

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:
[PATCH] libata: Fixup ata_sas_queuecmd to handle __ata_scsi_queuecmd failure
[PATCH] ahci: AHCI mode SATA patch for Intel ICH9
[PATCH] libata: don't schedule EH on wcache on/off if old EH

+24 -8
+11
drivers/ata/ahci.c
··· 314 314 { PCI_VDEVICE(INTEL, 0x2824), board_ahci }, /* ICH8 */ 315 315 { PCI_VDEVICE(INTEL, 0x2829), board_ahci }, /* ICH8M */ 316 316 { PCI_VDEVICE(INTEL, 0x282a), board_ahci }, /* ICH8M */ 317 + { PCI_VDEVICE(INTEL, 0x2922), board_ahci }, /* ICH9 */ 318 + { PCI_VDEVICE(INTEL, 0x2923), board_ahci }, /* ICH9 */ 319 + { PCI_VDEVICE(INTEL, 0x2924), board_ahci }, /* ICH9 */ 320 + { PCI_VDEVICE(INTEL, 0x2925), board_ahci }, /* ICH9 */ 321 + { PCI_VDEVICE(INTEL, 0x2927), board_ahci }, /* ICH9 */ 322 + { PCI_VDEVICE(INTEL, 0x2929), board_ahci }, /* ICH9M */ 323 + { PCI_VDEVICE(INTEL, 0x292a), board_ahci }, /* ICH9M */ 324 + { PCI_VDEVICE(INTEL, 0x292b), board_ahci }, /* ICH9M */ 325 + { PCI_VDEVICE(INTEL, 0x292f), board_ahci }, /* ICH9M */ 326 + { PCI_VDEVICE(INTEL, 0x294d), board_ahci }, /* ICH9 */ 327 + { PCI_VDEVICE(INTEL, 0x294e), board_ahci }, /* ICH9M */ 317 328 318 329 /* JMicron */ 319 330 { PCI_VDEVICE(JMICRON, 0x2360), board_ahci }, /* JMicron JMB360 */
+13 -8
drivers/ata/libata-scsi.c
··· 1451 1451 1452 1452 static void ata_scsi_qc_complete(struct ata_queued_cmd *qc) 1453 1453 { 1454 + struct ata_port *ap = qc->ap; 1454 1455 struct scsi_cmnd *cmd = qc->scsicmd; 1455 1456 u8 *cdb = cmd->cmnd; 1456 1457 int need_sense = (qc->err_mask != 0); ··· 1460 1459 * schedule EH_REVALIDATE operation to update the IDENTIFY DEVICE 1461 1460 * cache 1462 1461 */ 1463 - if (!need_sense && (qc->tf.command == ATA_CMD_SET_FEATURES) && 1462 + if (ap->ops->error_handler && 1463 + !need_sense && (qc->tf.command == ATA_CMD_SET_FEATURES) && 1464 1464 ((qc->tf.feature == SETFEATURES_WC_ON) || 1465 1465 (qc->tf.feature == SETFEATURES_WC_OFF))) { 1466 - qc->ap->eh_info.action |= ATA_EH_REVALIDATE; 1467 - ata_port_schedule_eh(qc->ap); 1466 + ap->eh_info.action |= ATA_EH_REVALIDATE; 1467 + ata_port_schedule_eh(ap); 1468 1468 } 1469 1469 1470 1470 /* For ATA pass thru (SAT) commands, generate a sense block if ··· 1492 1490 } 1493 1491 } 1494 1492 1495 - if (need_sense && !qc->ap->ops->error_handler) 1496 - ata_dump_status(qc->ap->id, &qc->result_tf); 1493 + if (need_sense && !ap->ops->error_handler) 1494 + ata_dump_status(ap->id, &qc->result_tf); 1497 1495 1498 1496 qc->scsidone(cmd); 1499 1497 ··· 3347 3345 * @ap: ATA port to which the command is being sent 3348 3346 * 3349 3347 * RETURNS: 3350 - * Zero. 3348 + * Return value from __ata_scsi_queuecmd() if @cmd can be queued, 3349 + * 0 otherwise. 3351 3350 */ 3352 3351 3353 3352 int ata_sas_queuecmd(struct scsi_cmnd *cmd, void (*done)(struct scsi_cmnd *), 3354 3353 struct ata_port *ap) 3355 3354 { 3355 + int rc = 0; 3356 + 3356 3357 ata_scsi_dump_cdb(ap, cmd); 3357 3358 3358 3359 if (likely(ata_scsi_dev_enabled(ap->device))) 3359 - __ata_scsi_queuecmd(cmd, done, ap->device); 3360 + rc = __ata_scsi_queuecmd(cmd, done, ap->device); 3360 3361 else { 3361 3362 cmd->result = (DID_BAD_TARGET << 16); 3362 3363 done(cmd); 3363 3364 } 3364 - return 0; 3365 + return rc; 3365 3366 } 3366 3367 EXPORT_SYMBOL_GPL(ata_sas_queuecmd);