diff options
author | Albert Lee <albertcc@tw.ibm.com> | 2006-05-21 23:43:46 -0400 |
---|---|---|
committer | Jeff Garzik <jeff@garzik.org> | 2006-05-24 01:43:53 -0400 |
commit | bb31a8faa270beafcc51a65880c5564c6b718bd6 (patch) | |
tree | 6ca5371bbaa53f0ada68f5adda9e3321319ae68b /drivers | |
parent | 387e2b0439026aa738a9edca15a57e5c0bcb4dfc (diff) |
[PATCH] libata: add pio flush for via atapi (was: Re: TR: ASUS A8V Deluxe, x86_64)
Backport the "pio flush" from the libata major update to 2.6.17 for via atapi.
Signed-off-by: Albert Lee <albertcc@tw.ibm.com>
Signed-off-by: Jeff Garzik <jeff@garzik.org>
Diffstat (limited to 'drivers')
-rw-r--r-- | drivers/scsi/libata-core.c | 5 |
1 files changed, 5 insertions, 0 deletions
diff --git a/drivers/scsi/libata-core.c b/drivers/scsi/libata-core.c index 823dfa78c0ba..fa476e7e0a48 100644 --- a/drivers/scsi/libata-core.c +++ b/drivers/scsi/libata-core.c | |||
@@ -3643,6 +3643,8 @@ static void ata_pio_block(struct ata_port *ap) | |||
3643 | 3643 | ||
3644 | ata_pio_sector(qc); | 3644 | ata_pio_sector(qc); |
3645 | } | 3645 | } |
3646 | |||
3647 | ata_altstatus(ap); /* flush */ | ||
3646 | } | 3648 | } |
3647 | 3649 | ||
3648 | static void ata_pio_error(struct ata_port *ap) | 3650 | static void ata_pio_error(struct ata_port *ap) |
@@ -3759,11 +3761,14 @@ static void atapi_packet_task(void *_data) | |||
3759 | spin_lock_irqsave(&ap->host_set->lock, flags); | 3761 | spin_lock_irqsave(&ap->host_set->lock, flags); |
3760 | ap->flags &= ~ATA_FLAG_NOINTR; | 3762 | ap->flags &= ~ATA_FLAG_NOINTR; |
3761 | ata_data_xfer(ap, qc->cdb, qc->dev->cdb_len, 1); | 3763 | ata_data_xfer(ap, qc->cdb, qc->dev->cdb_len, 1); |
3764 | ata_altstatus(ap); /* flush */ | ||
3765 | |||
3762 | if (qc->tf.protocol == ATA_PROT_ATAPI_DMA) | 3766 | if (qc->tf.protocol == ATA_PROT_ATAPI_DMA) |
3763 | ap->ops->bmdma_start(qc); /* initiate bmdma */ | 3767 | ap->ops->bmdma_start(qc); /* initiate bmdma */ |
3764 | spin_unlock_irqrestore(&ap->host_set->lock, flags); | 3768 | spin_unlock_irqrestore(&ap->host_set->lock, flags); |
3765 | } else { | 3769 | } else { |
3766 | ata_data_xfer(ap, qc->cdb, qc->dev->cdb_len, 1); | 3770 | ata_data_xfer(ap, qc->cdb, qc->dev->cdb_len, 1); |
3771 | ata_altstatus(ap); /* flush */ | ||
3767 | 3772 | ||
3768 | /* PIO commands are handled by polling */ | 3773 | /* PIO commands are handled by polling */ |
3769 | ap->hsm_task_state = HSM_ST; | 3774 | ap->hsm_task_state = HSM_ST; |