Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

Merge tag 'ata-6.19-rc1-part2' of git://git.kernel.org/pub/scm/linux/kernel/git/libata/linux

Pull ata fix from Niklas Cassel:

- The DELLBOSS VD SATA controller times out when sending I/Os of size
4096 KiB or larger, even though it claims LBA48 support, which per
the ACS standard requires support for a maximum command size of
65535 sectors, i.e. 32 MiB - 512. Thus, quirk the device so that it
sets a lower maximum command size (me)

* tag 'ata-6.19-rc1-part2' of git://git.kernel.org/pub/scm/linux/kernel/git/libata/linux:
ata: libata-core: Quirk DELLBOSS VD max_sectors
ata: libata: Move quirk flags to their own enum

+52 -36
+11
drivers/ata/libata-core.c
··· 3146 3146 dev->max_sectors = min_t(unsigned int, ATA_MAX_SECTORS_1024, 3147 3147 dev->max_sectors); 3148 3148 3149 + if (dev->quirks & ATA_QUIRK_MAX_SEC_8191) 3150 + dev->max_sectors = min_t(unsigned int, ATA_MAX_SECTORS_8191, 3151 + dev->max_sectors); 3152 + 3149 3153 if (dev->quirks & ATA_QUIRK_MAX_SEC_LBA48) 3150 3154 dev->max_sectors = ATA_MAX_SECTORS_LBA48; 3151 3155 ··· 4002 3998 [__ATA_QUIRK_NO_DMA_LOG] = "nodmalog", 4003 3999 [__ATA_QUIRK_NOTRIM] = "notrim", 4004 4000 [__ATA_QUIRK_MAX_SEC_1024] = "maxsec1024", 4001 + [__ATA_QUIRK_MAX_SEC_8191] = "maxsec8191", 4005 4002 [__ATA_QUIRK_MAX_TRIM_128M] = "maxtrim128m", 4006 4003 [__ATA_QUIRK_NO_NCQ_ON_ATI] = "noncqonati", 4007 4004 [__ATA_QUIRK_NO_LPM_ON_ATI] = "nolpmonati", ··· 4108 4103 */ 4109 4104 { "LITEON CX1-JB*-HP", NULL, ATA_QUIRK_MAX_SEC_1024 }, 4110 4105 { "LITEON EP1-*", NULL, ATA_QUIRK_MAX_SEC_1024 }, 4106 + 4107 + /* 4108 + * These devices time out with higher max sects. 4109 + * https://bugzilla.kernel.org/show_bug.cgi?id=220693 4110 + */ 4111 + { "DELLBOSS VD", "MV.R00-0", ATA_QUIRK_MAX_SEC_8191 }, 4111 4112 4112 4113 /* Devices we expect to fail diagnostics */ 4113 4114
+1
include/linux/ata.h
··· 29 29 ATA_MAX_SECTORS_128 = 128, 30 30 ATA_MAX_SECTORS = 256, 31 31 ATA_MAX_SECTORS_1024 = 1024, 32 + ATA_MAX_SECTORS_8191 = 8191, 32 33 ATA_MAX_SECTORS_LBA48 = 65535,/* avoid count to be 0000h */ 33 34 ATA_MAX_SECTORS_TAPE = 65535, 34 35 ATA_MAX_TRIM_RNUM = 64, /* 512-byte payload / (6-byte LBA + 2-byte range per entry) */
+40 -36
include/linux/libata.h
··· 75 75 __ATA_QUIRK_NO_DMA_LOG, /* Do not use DMA for log read */ 76 76 __ATA_QUIRK_NOTRIM, /* Do not use TRIM */ 77 77 __ATA_QUIRK_MAX_SEC_1024, /* Limit max sects to 1024 */ 78 + __ATA_QUIRK_MAX_SEC_8191, /* Limit max sects to 8191 */ 78 79 __ATA_QUIRK_MAX_TRIM_128M, /* Limit max trim size to 128M */ 79 80 __ATA_QUIRK_NO_NCQ_ON_ATI, /* Disable NCQ on ATI chipset */ 80 81 __ATA_QUIRK_NO_LPM_ON_ATI, /* Disable LPM on ATI chipset */ ··· 84 83 __ATA_QUIRK_NO_FUA, /* Do not use FUA */ 85 84 86 85 __ATA_QUIRK_MAX, 86 + }; 87 + 88 + /* 89 + * Quirk flags: may be set by libata or controller drivers on drives. 90 + * Some quirks may be drive/controller pair dependent. 91 + */ 92 + enum { 93 + ATA_QUIRK_DIAGNOSTIC = (1U << __ATA_QUIRK_DIAGNOSTIC), 94 + ATA_QUIRK_NODMA = (1U << __ATA_QUIRK_NODMA), 95 + ATA_QUIRK_NONCQ = (1U << __ATA_QUIRK_NONCQ), 96 + ATA_QUIRK_MAX_SEC_128 = (1U << __ATA_QUIRK_MAX_SEC_128), 97 + ATA_QUIRK_BROKEN_HPA = (1U << __ATA_QUIRK_BROKEN_HPA), 98 + ATA_QUIRK_DISABLE = (1U << __ATA_QUIRK_DISABLE), 99 + ATA_QUIRK_HPA_SIZE = (1U << __ATA_QUIRK_HPA_SIZE), 100 + ATA_QUIRK_IVB = (1U << __ATA_QUIRK_IVB), 101 + ATA_QUIRK_STUCK_ERR = (1U << __ATA_QUIRK_STUCK_ERR), 102 + ATA_QUIRK_BRIDGE_OK = (1U << __ATA_QUIRK_BRIDGE_OK), 103 + ATA_QUIRK_ATAPI_MOD16_DMA = (1U << __ATA_QUIRK_ATAPI_MOD16_DMA), 104 + ATA_QUIRK_FIRMWARE_WARN = (1U << __ATA_QUIRK_FIRMWARE_WARN), 105 + ATA_QUIRK_1_5_GBPS = (1U << __ATA_QUIRK_1_5_GBPS), 106 + ATA_QUIRK_NOSETXFER = (1U << __ATA_QUIRK_NOSETXFER), 107 + ATA_QUIRK_BROKEN_FPDMA_AA = (1U << __ATA_QUIRK_BROKEN_FPDMA_AA), 108 + ATA_QUIRK_DUMP_ID = (1U << __ATA_QUIRK_DUMP_ID), 109 + ATA_QUIRK_MAX_SEC_LBA48 = (1U << __ATA_QUIRK_MAX_SEC_LBA48), 110 + ATA_QUIRK_ATAPI_DMADIR = (1U << __ATA_QUIRK_ATAPI_DMADIR), 111 + ATA_QUIRK_NO_NCQ_TRIM = (1U << __ATA_QUIRK_NO_NCQ_TRIM), 112 + ATA_QUIRK_NOLPM = (1U << __ATA_QUIRK_NOLPM), 113 + ATA_QUIRK_WD_BROKEN_LPM = (1U << __ATA_QUIRK_WD_BROKEN_LPM), 114 + ATA_QUIRK_ZERO_AFTER_TRIM = (1U << __ATA_QUIRK_ZERO_AFTER_TRIM), 115 + ATA_QUIRK_NO_DMA_LOG = (1U << __ATA_QUIRK_NO_DMA_LOG), 116 + ATA_QUIRK_NOTRIM = (1U << __ATA_QUIRK_NOTRIM), 117 + ATA_QUIRK_MAX_SEC_1024 = (1U << __ATA_QUIRK_MAX_SEC_1024), 118 + ATA_QUIRK_MAX_SEC_8191 = (1U << __ATA_QUIRK_MAX_SEC_8191), 119 + ATA_QUIRK_MAX_TRIM_128M = (1U << __ATA_QUIRK_MAX_TRIM_128M), 120 + ATA_QUIRK_NO_NCQ_ON_ATI = (1U << __ATA_QUIRK_NO_NCQ_ON_ATI), 121 + ATA_QUIRK_NO_LPM_ON_ATI = (1U << __ATA_QUIRK_NO_LPM_ON_ATI), 122 + ATA_QUIRK_NO_ID_DEV_LOG = (1U << __ATA_QUIRK_NO_ID_DEV_LOG), 123 + ATA_QUIRK_NO_LOG_DIR = (1U << __ATA_QUIRK_NO_LOG_DIR), 124 + ATA_QUIRK_NO_FUA = (1U << __ATA_QUIRK_NO_FUA), 87 125 }; 88 126 89 127 enum { ··· 429 389 * ata_eh_cmd_timeout_table in libata-eh.c. 430 390 */ 431 391 ATA_EH_CMD_TIMEOUT_TABLE_SIZE = 8, 432 - 433 - /* 434 - * Quirk flags: may be set by libata or controller drivers on drives. 435 - * Some quirks may be drive/controller pair dependent. 436 - */ 437 - ATA_QUIRK_DIAGNOSTIC = (1U << __ATA_QUIRK_DIAGNOSTIC), 438 - ATA_QUIRK_NODMA = (1U << __ATA_QUIRK_NODMA), 439 - ATA_QUIRK_NONCQ = (1U << __ATA_QUIRK_NONCQ), 440 - ATA_QUIRK_MAX_SEC_128 = (1U << __ATA_QUIRK_MAX_SEC_128), 441 - ATA_QUIRK_BROKEN_HPA = (1U << __ATA_QUIRK_BROKEN_HPA), 442 - ATA_QUIRK_DISABLE = (1U << __ATA_QUIRK_DISABLE), 443 - ATA_QUIRK_HPA_SIZE = (1U << __ATA_QUIRK_HPA_SIZE), 444 - ATA_QUIRK_IVB = (1U << __ATA_QUIRK_IVB), 445 - ATA_QUIRK_STUCK_ERR = (1U << __ATA_QUIRK_STUCK_ERR), 446 - ATA_QUIRK_BRIDGE_OK = (1U << __ATA_QUIRK_BRIDGE_OK), 447 - ATA_QUIRK_ATAPI_MOD16_DMA = (1U << __ATA_QUIRK_ATAPI_MOD16_DMA), 448 - ATA_QUIRK_FIRMWARE_WARN = (1U << __ATA_QUIRK_FIRMWARE_WARN), 449 - ATA_QUIRK_1_5_GBPS = (1U << __ATA_QUIRK_1_5_GBPS), 450 - ATA_QUIRK_NOSETXFER = (1U << __ATA_QUIRK_NOSETXFER), 451 - ATA_QUIRK_BROKEN_FPDMA_AA = (1U << __ATA_QUIRK_BROKEN_FPDMA_AA), 452 - ATA_QUIRK_DUMP_ID = (1U << __ATA_QUIRK_DUMP_ID), 453 - ATA_QUIRK_MAX_SEC_LBA48 = (1U << __ATA_QUIRK_MAX_SEC_LBA48), 454 - ATA_QUIRK_ATAPI_DMADIR = (1U << __ATA_QUIRK_ATAPI_DMADIR), 455 - ATA_QUIRK_NO_NCQ_TRIM = (1U << __ATA_QUIRK_NO_NCQ_TRIM), 456 - ATA_QUIRK_NOLPM = (1U << __ATA_QUIRK_NOLPM), 457 - ATA_QUIRK_WD_BROKEN_LPM = (1U << __ATA_QUIRK_WD_BROKEN_LPM), 458 - ATA_QUIRK_ZERO_AFTER_TRIM = (1U << __ATA_QUIRK_ZERO_AFTER_TRIM), 459 - ATA_QUIRK_NO_DMA_LOG = (1U << __ATA_QUIRK_NO_DMA_LOG), 460 - ATA_QUIRK_NOTRIM = (1U << __ATA_QUIRK_NOTRIM), 461 - ATA_QUIRK_MAX_SEC_1024 = (1U << __ATA_QUIRK_MAX_SEC_1024), 462 - ATA_QUIRK_MAX_TRIM_128M = (1U << __ATA_QUIRK_MAX_TRIM_128M), 463 - ATA_QUIRK_NO_NCQ_ON_ATI = (1U << __ATA_QUIRK_NO_NCQ_ON_ATI), 464 - ATA_QUIRK_NO_LPM_ON_ATI = (1U << __ATA_QUIRK_NO_LPM_ON_ATI), 465 - ATA_QUIRK_NO_ID_DEV_LOG = (1U << __ATA_QUIRK_NO_ID_DEV_LOG), 466 - ATA_QUIRK_NO_LOG_DIR = (1U << __ATA_QUIRK_NO_LOG_DIR), 467 - ATA_QUIRK_NO_FUA = (1U << __ATA_QUIRK_NO_FUA), 468 392 469 393 /* User visible DMA mask for DMA control. DO NOT renumber. */ 470 394 ATA_DMA_MASK_ATA = (1 << 0), /* DMA on ATA Disk */