aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/ata/libata-core.c4
-rw-r--r--include/linux/libata.h15
2 files changed, 16 insertions, 3 deletions
diff --git a/drivers/ata/libata-core.c b/drivers/ata/libata-core.c
index b71a7ef3f92a..63c808d17c28 100644
--- a/drivers/ata/libata-core.c
+++ b/drivers/ata/libata-core.c
@@ -315,9 +315,7 @@ int ata_build_rw_tf(struct ata_taskfile *tf, struct ata_device *dev,
315 tf->flags |= ATA_TFLAG_ISADDR | ATA_TFLAG_DEVICE; 315 tf->flags |= ATA_TFLAG_ISADDR | ATA_TFLAG_DEVICE;
316 tf->flags |= tf_flags; 316 tf->flags |= tf_flags;
317 317
318 if ((dev->flags & (ATA_DFLAG_PIO | ATA_DFLAG_NCQ_OFF | 318 if (ata_ncq_enabled(dev) && likely(tag != ATA_TAG_INTERNAL)) {
319 ATA_DFLAG_NCQ)) == ATA_DFLAG_NCQ &&
320 likely(tag != ATA_TAG_INTERNAL)) {
321 /* yay, NCQ */ 319 /* yay, NCQ */
322 if (!lba_48_ok(block, n_block)) 320 if (!lba_48_ok(block, n_block))
323 return -ERANGE; 321 return -ERANGE;
diff --git a/include/linux/libata.h b/include/linux/libata.h
index 5db50fa594ac..5233e47eeb89 100644
--- a/include/linux/libata.h
+++ b/include/linux/libata.h
@@ -1033,6 +1033,21 @@ static inline u8 ata_chk_status(struct ata_port *ap)
1033 return ap->ops->check_status(ap); 1033 return ap->ops->check_status(ap);
1034} 1034}
1035 1035
1036/**
1037 * ata_ncq_enabled - Test whether NCQ is enabled
1038 * @dev: ATA device to test for
1039 *
1040 * LOCKING:
1041 * spin_lock_irqsave(host lock)
1042 *
1043 * RETURNS:
1044 * 1 if NCQ is enabled for @dev, 0 otherwise.
1045 */
1046static inline int ata_ncq_enabled(struct ata_device *dev)
1047{
1048 return (dev->flags & (ATA_DFLAG_PIO | ATA_DFLAG_NCQ_OFF |
1049 ATA_DFLAG_NCQ)) == ATA_DFLAG_NCQ;
1050}
1036 1051
1037/** 1052/**
1038 * ata_pause - Flush writes and pause 400 nanoseconds. 1053 * ata_pause - Flush writes and pause 400 nanoseconds.