mirror of
https://github.com/torvalds/linux.git
synced 2026-09-27 11:02:03 +02:00
ata fixes for 7.3-rc5
- Extend the quirk "no LPM on ATI" quirk, that is currently only
applied for Samsung drives, to include AMD controllers as well.
The AMD AHCI controllers are newer versions of the ATI AHCI
controllers, and these controllers still have LPM issues with
Samsung drives - LPM works with drives from other vendors (me)
- Fix errors in the libata.force parameter documentation (me)
- Verify the sense data descriptor lengths for ATA PASS-THROUGH
command, so that a malicious device cannot write past the buffer
length (Matthias)
- Mention the libata for-next branch in MAINTAINERS such that the
git ls-remote command done by get_maintainer.pl --self-test=scm
can verify it (Matthias)
-----BEGIN PGP SIGNATURE-----
iHUEABYKAB0WIQRN+ES/c4tHlMch3DzJZDGjmcZNcgUCargFGAAKCRDJZDGjmcZN
cm3QAP97hnUqqmFfM20u4KSVo/1KV93S/uJ4kVGdsDf5HNvsZgEApw/OlB7lZ8dE
hZ3otv4Yv1bxC4rdOs6RIJrz8aDCBQU=
=q1Z4
-----END PGP SIGNATURE-----
Merge tag 'ata-7.3-rc5' of git://git.kernel.org/pub/scm/linux/kernel/git/libata/linux
Pull ata fixes from Niklas Cassel:
- Extend the quirk "no LPM on ATI" quirk, that is currently only
applied for Samsung drives, to include AMD controllers as well.
The AMD AHCI controllers are newer versions of the ATI AHCI
controllers, and these controllers still have LPM issues with
Samsung drives - LPM works with drives from other vendors (me)
- Fix errors in the libata.force parameter documentation (me)
- Verify the sense data descriptor lengths for ATA PASS-THROUGH
command, so that a malicious device cannot write past the buffer
length (Matthias)
- Mention the libata for-next branch in MAINTAINERS such that the
git ls-remote command done by get_maintainer.pl --self-test=scm
can verify it (Matthias)
* tag 'ata-7.3-rc5' of git://git.kernel.org/pub/scm/linux/kernel/git/libata/linux:
MAINTAINERS: name the libata/linux for-next branch
ata: libata-scsi: bound the ATA passthru sense descriptor writes
ata: libata: Correct libata.force parameter documentation
ata: libata-core: Extend Samsung LPM quirk to AMD controllers
This commit is contained in:
commit
fd179f8a05
|
|
@ -3494,7 +3494,7 @@ Kernel parameters
|
|||
|
||||
* SATA link speed limit: 1.5Gbps or 3.0Gbps.
|
||||
|
||||
* Transfer mode: pio[0-7], mwdma[0-4] and udma[0-7].
|
||||
* Transfer mode: pio[0-6], mwdma[0-4] and udma[0-7].
|
||||
udma[/][16,25,33,44,66,100,133] notation is also
|
||||
allowed.
|
||||
|
||||
|
|
@ -3512,7 +3512,7 @@ Kernel parameters
|
|||
|
||||
* [no]ncqtrim: Enable or disable queued DSM TRIM.
|
||||
|
||||
* [no]ncqati: Enable or disable NCQ trim on ATI chipset.
|
||||
* [no]ncqati: Enable or disable NCQ on ATI chipsets.
|
||||
|
||||
* [no]trim: Enable or disable (unqueued) TRIM.
|
||||
|
||||
|
|
@ -3543,11 +3543,9 @@ Kernel parameters
|
|||
|
||||
* max_sec_128: Set transfer size limit to 128 sectors.
|
||||
|
||||
* max_sec_1024: Set or clear transfer size limit to
|
||||
1024 sectors.
|
||||
* max_sec_1024: Set transfer size limit to 1024 sectors.
|
||||
|
||||
* max_sec_lba48: Set or clear transfer size limit to
|
||||
65535 sectors.
|
||||
* max_sec_lba48: Set transfer size limit to 65535 sectors.
|
||||
|
||||
* external: Mark port as external (hotplug-capable).
|
||||
|
||||
|
|
|
|||
|
|
@ -14906,7 +14906,7 @@ M: Damien Le Moal <dlemoal@kernel.org>
|
|||
M: Niklas Cassel <cassel@kernel.org>
|
||||
L: linux-ide@vger.kernel.org
|
||||
S: Maintained
|
||||
T: git git://git.kernel.org/pub/scm/linux/kernel/git/libata/linux.git
|
||||
T: git git://git.kernel.org/pub/scm/linux/kernel/git/libata/linux.git for-next
|
||||
F: Documentation/ABI/testing/sysfs-ata
|
||||
F: Documentation/devicetree/bindings/ata/
|
||||
F: drivers/ata/
|
||||
|
|
|
|||
|
|
@ -2972,9 +2972,10 @@ static void ata_dev_config_lpm(struct ata_device *dev)
|
|||
(dev->id[ATA_ID_SATA_CAPABILITY] & 0xe) == 0x2)
|
||||
dev->quirks |= ATA_QUIRK_NOLPM;
|
||||
|
||||
/* ATI specific quirk */
|
||||
if ((dev->quirks & ATA_QUIRK_NO_LPM_ON_ATI) &&
|
||||
ata_dev_check_adapter(dev, PCI_VENDOR_ID_ATI))
|
||||
/* ATI and AMD specific quirk */
|
||||
if ((dev->quirks & ATA_QUIRK_NO_LPM_ON_ATI_AND_AMD) &&
|
||||
(ata_dev_check_adapter(dev, PCI_VENDOR_ID_ATI) ||
|
||||
ata_dev_check_adapter(dev, PCI_VENDOR_ID_AMD)))
|
||||
dev->quirks |= ATA_QUIRK_NOLPM;
|
||||
}
|
||||
|
||||
|
|
@ -4136,7 +4137,7 @@ static const char * const ata_quirk_names[] = {
|
|||
[__ATA_QUIRK_MAX_SEC] = "maxsec",
|
||||
[__ATA_QUIRK_MAX_TRIM_128M] = "maxtrim128m",
|
||||
[__ATA_QUIRK_NO_NCQ_ON_ATI] = "noncqonati",
|
||||
[__ATA_QUIRK_NO_LPM_ON_ATI] = "nolpmonati",
|
||||
[__ATA_QUIRK_NO_LPM_ON_ATI_AND_AMD] = "nolpmonatiandamd",
|
||||
[__ATA_QUIRK_NO_ID_DEV_LOG] = "noiddevlog",
|
||||
[__ATA_QUIRK_NO_LOG_DIR] = "nologdir",
|
||||
[__ATA_QUIRK_NO_FUA] = "nofua",
|
||||
|
|
@ -4420,15 +4421,15 @@ static const struct ata_dev_quirks_entry __ata_dev_quirks[] = {
|
|||
{ "Samsung SSD 860*", NULL, ATA_QUIRK_NO_NCQ_TRIM |
|
||||
ATA_QUIRK_ZERO_AFTER_TRIM |
|
||||
ATA_QUIRK_NO_NCQ_ON_ATI |
|
||||
ATA_QUIRK_NO_LPM_ON_ATI },
|
||||
ATA_QUIRK_NO_LPM_ON_ATI_AND_AMD },
|
||||
{ "Samsung SSD 870*", NULL, ATA_QUIRK_NO_NCQ_TRIM |
|
||||
ATA_QUIRK_ZERO_AFTER_TRIM |
|
||||
ATA_QUIRK_NO_NCQ_ON_ATI |
|
||||
ATA_QUIRK_NO_LPM_ON_ATI },
|
||||
ATA_QUIRK_NO_LPM_ON_ATI_AND_AMD },
|
||||
{ "SAMSUNG*MZ7LH*", NULL, ATA_QUIRK_NO_NCQ_TRIM |
|
||||
ATA_QUIRK_ZERO_AFTER_TRIM |
|
||||
ATA_QUIRK_NO_NCQ_ON_ATI |
|
||||
ATA_QUIRK_NO_LPM_ON_ATI },
|
||||
ATA_QUIRK_NO_LPM_ON_ATI_AND_AMD },
|
||||
{ "FCCT*M500*", NULL, ATA_QUIRK_NO_NCQ_TRIM |
|
||||
ATA_QUIRK_ZERO_AFTER_TRIM },
|
||||
|
||||
|
|
|
|||
|
|
@ -261,12 +261,18 @@ static void ata_scsi_set_passthru_sense_fields(struct ata_queued_cmd *qc)
|
|||
|
||||
/* descriptor format */
|
||||
len = sb[7];
|
||||
desc = (char *)scsi_sense_desc_find(sb, len + 8, 9);
|
||||
desc = (char *)scsi_sense_desc_find(sb, SCSI_SENSE_BUFFERSIZE, 9);
|
||||
if (!desc) {
|
||||
if (SCSI_SENSE_BUFFERSIZE < len + 14)
|
||||
/*
|
||||
* The descriptor is written at sb[8 + len] and is 14
|
||||
* bytes long, so it needs len + 22 bytes of buffer.
|
||||
*/
|
||||
if (len + 22 > SCSI_SENSE_BUFFERSIZE)
|
||||
return;
|
||||
sb[7] = len + 14;
|
||||
desc = sb + 8 + len;
|
||||
} else if (desc - sb > SCSI_SENSE_BUFFERSIZE - 14) {
|
||||
return;
|
||||
}
|
||||
desc[0] = 9;
|
||||
desc[1] = 12;
|
||||
|
|
|
|||
|
|
@ -76,7 +76,7 @@ enum ata_quirks {
|
|||
__ATA_QUIRK_MAX_SEC, /* Limit max sectors */
|
||||
__ATA_QUIRK_MAX_TRIM_128M, /* Limit max trim size to 128M */
|
||||
__ATA_QUIRK_NO_NCQ_ON_ATI, /* Disable NCQ on ATI chipset */
|
||||
__ATA_QUIRK_NO_LPM_ON_ATI, /* Disable LPM on ATI chipset */
|
||||
__ATA_QUIRK_NO_LPM_ON_ATI_AND_AMD, /* Disable LPM on ATI and AMD chipsets */
|
||||
__ATA_QUIRK_NO_ID_DEV_LOG, /* Identify device log missing */
|
||||
__ATA_QUIRK_NO_LOG_DIR, /* Do not read log directory */
|
||||
__ATA_QUIRK_NO_FUA, /* Do not use FUA */
|
||||
|
|
@ -115,7 +115,7 @@ enum {
|
|||
ATA_QUIRK_MAX_SEC = BIT_ULL(__ATA_QUIRK_MAX_SEC),
|
||||
ATA_QUIRK_MAX_TRIM_128M = BIT_ULL(__ATA_QUIRK_MAX_TRIM_128M),
|
||||
ATA_QUIRK_NO_NCQ_ON_ATI = BIT_ULL(__ATA_QUIRK_NO_NCQ_ON_ATI),
|
||||
ATA_QUIRK_NO_LPM_ON_ATI = BIT_ULL(__ATA_QUIRK_NO_LPM_ON_ATI),
|
||||
ATA_QUIRK_NO_LPM_ON_ATI_AND_AMD = BIT_ULL(__ATA_QUIRK_NO_LPM_ON_ATI_AND_AMD),
|
||||
ATA_QUIRK_NO_ID_DEV_LOG = BIT_ULL(__ATA_QUIRK_NO_ID_DEV_LOG),
|
||||
ATA_QUIRK_NO_LOG_DIR = BIT_ULL(__ATA_QUIRK_NO_LOG_DIR),
|
||||
ATA_QUIRK_NO_FUA = BIT_ULL(__ATA_QUIRK_NO_FUA),
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user