mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-11-29 23:24:11 +08:00
libata: don't check whether to use DMA or not for no data commands
There's no reason to check whether to use DMA or not for no data commands. Don't do it. While at it, make local variable using_pio in atapi_xlat() set iff ATAPI_PROT_PIO is going to be used and rename ata_check_atapi_dma() to atapi_check_dma() for consistency. Signed-off-by: Tejun Heo <tj@kernel.org> Signed-off-by: Jeff Garzik <jgarzik@redhat.com>
This commit is contained in:
parent
d799e083a8
commit
5895ef9a5b
@ -4297,7 +4297,7 @@ void ata_sg_clean(struct ata_queued_cmd *qc)
|
||||
}
|
||||
|
||||
/**
|
||||
* ata_check_atapi_dma - Check whether ATAPI DMA can be supported
|
||||
* atapi_check_dma - Check whether ATAPI DMA can be supported
|
||||
* @qc: Metadata associated with taskfile to check
|
||||
*
|
||||
* Allow low-level driver to filter ATA PACKET commands, returning
|
||||
@ -4310,7 +4310,7 @@ void ata_sg_clean(struct ata_queued_cmd *qc)
|
||||
* RETURNS: 0 when ATAPI DMA can be used
|
||||
* nonzero otherwise
|
||||
*/
|
||||
int ata_check_atapi_dma(struct ata_queued_cmd *qc)
|
||||
int atapi_check_dma(struct ata_queued_cmd *qc)
|
||||
{
|
||||
struct ata_port *ap = qc->ap;
|
||||
|
||||
|
@ -2343,8 +2343,8 @@ static unsigned int atapi_xlat(struct ata_queued_cmd *qc)
|
||||
{
|
||||
struct scsi_cmnd *scmd = qc->scsicmd;
|
||||
struct ata_device *dev = qc->dev;
|
||||
int using_pio = (dev->flags & ATA_DFLAG_PIO);
|
||||
int nodata = (scmd->sc_data_direction == DMA_NONE);
|
||||
int using_pio = !nodata && (dev->flags & ATA_DFLAG_PIO);
|
||||
unsigned int nbytes;
|
||||
|
||||
memset(qc->cdb, 0, dev->cdb_len);
|
||||
@ -2362,7 +2362,7 @@ static unsigned int atapi_xlat(struct ata_queued_cmd *qc)
|
||||
ata_qc_set_pc_nbytes(qc);
|
||||
|
||||
/* check whether ATAPI DMA is safe */
|
||||
if (!using_pio && ata_check_atapi_dma(qc))
|
||||
if (!nodata && !using_pio && atapi_check_dma(qc))
|
||||
using_pio = 1;
|
||||
|
||||
/* Some controller variants snoop this value for Packet
|
||||
@ -2402,13 +2402,11 @@ static unsigned int atapi_xlat(struct ata_queued_cmd *qc)
|
||||
qc->tf.lbam = (nbytes & 0xFF);
|
||||
qc->tf.lbah = (nbytes >> 8);
|
||||
|
||||
if (using_pio || nodata) {
|
||||
/* no data, or PIO data xfer */
|
||||
if (nodata)
|
||||
qc->tf.protocol = ATAPI_PROT_NODATA;
|
||||
else
|
||||
qc->tf.protocol = ATAPI_PROT_PIO;
|
||||
} else {
|
||||
if (nodata)
|
||||
qc->tf.protocol = ATAPI_PROT_NODATA;
|
||||
else if (using_pio)
|
||||
qc->tf.protocol = ATAPI_PROT_PIO;
|
||||
else {
|
||||
/* DMA data xfer */
|
||||
qc->tf.protocol = ATAPI_PROT_DMA;
|
||||
qc->tf.feature |= ATAPI_PKT_DMA;
|
||||
|
@ -106,7 +106,7 @@ extern void ata_sg_clean(struct ata_queued_cmd *qc);
|
||||
extern void ata_qc_free(struct ata_queued_cmd *qc);
|
||||
extern void ata_qc_issue(struct ata_queued_cmd *qc);
|
||||
extern void __ata_qc_complete(struct ata_queued_cmd *qc);
|
||||
extern int ata_check_atapi_dma(struct ata_queued_cmd *qc);
|
||||
extern int atapi_check_dma(struct ata_queued_cmd *qc);
|
||||
extern void swap_buf_le16(u16 *buf, unsigned int buf_words);
|
||||
extern void ata_dev_init(struct ata_device *dev);
|
||||
extern void ata_link_init(struct ata_port *ap, struct ata_link *link, int pmp);
|
||||
|
Loading…
Reference in New Issue
Block a user