mirror of
https://github.com/Fishwaldo/linux-bl808.git
synced 2025-03-30 19:07:15 +00:00
ata fixes for 5.17-rc4
A single patch in this pull request, from me, to fix a bug that is causing boot issues in the field (reports of problems with Fedora 35). The bug affects mostly old-ish drives that have issues with read log page command handling. -----BEGIN PGP SIGNATURE----- iHUEABYKAB0WIQSRPv8tYSvhwAzJdzjdoc3SxdoYdgUCYgEmtQAKCRDdoc3SxdoY dqucAP9P62XgGInmlT+8r4jWMoHQUjl7+s39eK9g1T8YG8R15AD/c3PUCFwZQpLx ndEGuH1qzHIMy2682ziFHUZ4qHBBlQA= =oV7s -----END PGP SIGNATURE----- Merge tag 'ata-5.17-rc4' of git://git.kernel.org/pub/scm/linux/kernel/git/dlemoal/libata Pull ata fix from Damien Le Moal: "A single patch from me, to fix a bug that is causing boot issues in the field (reports of problems with Fedora 35). The bug affects mostly old-ish drives that have issues with read log page command handling" * tag 'ata-5.17-rc4' of git://git.kernel.org/pub/scm/linux/kernel/git/dlemoal/libata: ata: libata-core: Fix ata_dev_config_cpr()
This commit is contained in:
commit
2ade8eef99
2 changed files with 7 additions and 9 deletions
|
@ -2448,23 +2448,21 @@ static void ata_dev_config_cpr(struct ata_device *dev)
|
||||||
struct ata_cpr_log *cpr_log = NULL;
|
struct ata_cpr_log *cpr_log = NULL;
|
||||||
u8 *desc, *buf = NULL;
|
u8 *desc, *buf = NULL;
|
||||||
|
|
||||||
if (!ata_identify_page_supported(dev,
|
if (ata_id_major_version(dev->id) < 11 ||
|
||||||
ATA_LOG_CONCURRENT_POSITIONING_RANGES))
|
!ata_log_supported(dev, ATA_LOG_CONCURRENT_POSITIONING_RANGES))
|
||||||
goto out;
|
goto out;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Read IDENTIFY DEVICE data log, page 0x47
|
* Read the concurrent positioning ranges log (0x47). We can have at
|
||||||
* (concurrent positioning ranges). We can have at most 255 32B range
|
* most 255 32B range descriptors plus a 64B header.
|
||||||
* descriptors plus a 64B header.
|
|
||||||
*/
|
*/
|
||||||
buf_len = (64 + 255 * 32 + 511) & ~511;
|
buf_len = (64 + 255 * 32 + 511) & ~511;
|
||||||
buf = kzalloc(buf_len, GFP_KERNEL);
|
buf = kzalloc(buf_len, GFP_KERNEL);
|
||||||
if (!buf)
|
if (!buf)
|
||||||
goto out;
|
goto out;
|
||||||
|
|
||||||
err_mask = ata_read_log_page(dev, ATA_LOG_IDENTIFY_DEVICE,
|
err_mask = ata_read_log_page(dev, ATA_LOG_CONCURRENT_POSITIONING_RANGES,
|
||||||
ATA_LOG_CONCURRENT_POSITIONING_RANGES,
|
0, buf, buf_len >> 9);
|
||||||
buf, buf_len >> 9);
|
|
||||||
if (err_mask)
|
if (err_mask)
|
||||||
goto out;
|
goto out;
|
||||||
|
|
||||||
|
|
|
@ -324,12 +324,12 @@ enum {
|
||||||
ATA_LOG_NCQ_NON_DATA = 0x12,
|
ATA_LOG_NCQ_NON_DATA = 0x12,
|
||||||
ATA_LOG_NCQ_SEND_RECV = 0x13,
|
ATA_LOG_NCQ_SEND_RECV = 0x13,
|
||||||
ATA_LOG_IDENTIFY_DEVICE = 0x30,
|
ATA_LOG_IDENTIFY_DEVICE = 0x30,
|
||||||
|
ATA_LOG_CONCURRENT_POSITIONING_RANGES = 0x47,
|
||||||
|
|
||||||
/* Identify device log pages: */
|
/* Identify device log pages: */
|
||||||
ATA_LOG_SECURITY = 0x06,
|
ATA_LOG_SECURITY = 0x06,
|
||||||
ATA_LOG_SATA_SETTINGS = 0x08,
|
ATA_LOG_SATA_SETTINGS = 0x08,
|
||||||
ATA_LOG_ZONED_INFORMATION = 0x09,
|
ATA_LOG_ZONED_INFORMATION = 0x09,
|
||||||
ATA_LOG_CONCURRENT_POSITIONING_RANGES = 0x47,
|
|
||||||
|
|
||||||
/* Identify device SATA settings log:*/
|
/* Identify device SATA settings log:*/
|
||||||
ATA_LOG_DEVSLP_OFFSET = 0x30,
|
ATA_LOG_DEVSLP_OFFSET = 0x30,
|
||||||
|
|
Loading…
Add table
Reference in a new issue