]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
ata: libata-sata: Simplify sense_valid fetching
authorNiklas Cassel <cassel@kernel.org>
Wed, 16 Apr 2025 09:31:30 +0000 (11:31 +0200)
committerDamien Le Moal <dlemoal@kernel.org>
Sun, 20 Apr 2025 23:59:00 +0000 (08:59 +0900)
While the SENSE DATA VALID field in the ACS-6 specification is 47 bits,
we are currently only fetching 32 bits, because these are the only bits
that we care about (these bits represent the tags (which can be 0-31)).

Thus, replace the existing logic with a simple get_unaligned_le32().

While at it, change the type of sense_valid to u32.

Signed-off-by: Niklas Cassel <cassel@kernel.org>
Reviewed-by: Hannes Reinecke <hare@suse.de>
Reviewed-by: Igor Pylypiv <ipylypiv@google.com>
Signed-off-by: Damien Le Moal <dlemoal@kernel.org>
drivers/ata/libata-sata.c

index 2e4463d3a3561f4526b551edb180b6bfca103a8d..89d3b784706babe13e5f29249c3c69f5fbc4be94 100644 (file)
@@ -1509,9 +1509,10 @@ int ata_eh_get_ncq_success_sense(struct ata_link *link)
        struct ata_queued_cmd *qc;
        unsigned int err_mask, tag;
        u8 *sense, sk = 0, asc = 0, ascq = 0;
-       u64 sense_valid, val;
        u16 extended_sense;
        bool aux_icc_valid;
+       u32 sense_valid;
+       u64 val;
        int ret = 0;
 
        err_mask = ata_read_log_page(dev, ATA_LOG_SENSE_NCQ, 0, buf, 2);
@@ -1529,8 +1530,7 @@ int ata_eh_get_ncq_success_sense(struct ata_link *link)
                return -EIO;
        }
 
-       sense_valid = (u64)buf[8] | ((u64)buf[9] << 8) |
-               ((u64)buf[10] << 16) | ((u64)buf[11] << 24);
+       sense_valid = get_unaligned_le32(&buf[8]);
        extended_sense = get_unaligned_le16(&buf[14]);
        aux_icc_valid = extended_sense & BIT(15);
 
@@ -1545,7 +1545,7 @@ int ata_eh_get_ncq_success_sense(struct ata_link *link)
                 * If the command does not have any sense data, clear ATA_SENSE.
                 * Keep ATA_QCFLAG_EH_SUCCESS_CMD so that command is finished.
                 */
-               if (!(sense_valid & (1ULL << tag))) {
+               if (!(sense_valid & (1 << tag))) {
                        qc->result_tf.status &= ~ATA_SENSE;
                        continue;
                }