Skip to content

Commit a42b71d

Browse files
committed
ata: libata: Move quirk flags to their own enum
The anonymous enum in include/linux/libata.h that is used to store various global constants can currently be backed by type int. (It contains both negative and positive constants.) __ATA_QUIRK_MAX is currently 31. The quirk flags in the various global constants enum are defined as "1U << quirk_flag_bit". Thus if we simply add an additional quirk, the quirk flag will be 1 << 31, which is a value that is too large to be represented by a signed int. The various global constants enum will thus therefore be backed by type long. This will lead to error prints like e.g.: ata_port_err(ap, "EH pending after %d tries, giving up\n", ATA_EH_MAX_TRIES); now failing to build, with build error: error: format ‘%d’ expects argument of type ‘int’, but argument 4 has type ‘long int’ [-Werror=format=] This is because all constants in the various global constants enum now has to be printed as a long, as that is now the backing type of the enum. Since the compiler will use the smallest possible backing type for an enum, it is good practice to not mix unrelated things in a single enum. Move the quirk flags to a separate enum, so that we don't need to change the printf specifier for all other constants in the "various global constants" enum when adding an additional quirk. Reviewed-by: Damien Le Moal <dlemoal@kernel.org> Reviewed-by: Martin K. Petersen <martin.petersen@oracle.com> Signed-off-by: Niklas Cassel <cassel@kernel.org>
1 parent 6ce0dd9 commit a42b71d

1 file changed

Lines changed: 38 additions & 36 deletions

File tree

include/linux/libata.h

Lines changed: 38 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -85,6 +85,44 @@ enum ata_quirks {
8585
__ATA_QUIRK_MAX,
8686
};
8787

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_TRIM_128M = (1U << __ATA_QUIRK_MAX_TRIM_128M),
119+
ATA_QUIRK_NO_NCQ_ON_ATI = (1U << __ATA_QUIRK_NO_NCQ_ON_ATI),
120+
ATA_QUIRK_NO_LPM_ON_ATI = (1U << __ATA_QUIRK_NO_LPM_ON_ATI),
121+
ATA_QUIRK_NO_ID_DEV_LOG = (1U << __ATA_QUIRK_NO_ID_DEV_LOG),
122+
ATA_QUIRK_NO_LOG_DIR = (1U << __ATA_QUIRK_NO_LOG_DIR),
123+
ATA_QUIRK_NO_FUA = (1U << __ATA_QUIRK_NO_FUA),
124+
};
125+
88126
enum {
89127
/* various global constants */
90128
LIBATA_MAX_PRD = ATA_MAX_PRD / 2,
@@ -390,42 +428,6 @@ enum {
390428
*/
391429
ATA_EH_CMD_TIMEOUT_TABLE_SIZE = 8,
392430

393-
/*
394-
* Quirk flags: may be set by libata or controller drivers on drives.
395-
* Some quirks may be drive/controller pair dependent.
396-
*/
397-
ATA_QUIRK_DIAGNOSTIC = (1U << __ATA_QUIRK_DIAGNOSTIC),
398-
ATA_QUIRK_NODMA = (1U << __ATA_QUIRK_NODMA),
399-
ATA_QUIRK_NONCQ = (1U << __ATA_QUIRK_NONCQ),
400-
ATA_QUIRK_MAX_SEC_128 = (1U << __ATA_QUIRK_MAX_SEC_128),
401-
ATA_QUIRK_BROKEN_HPA = (1U << __ATA_QUIRK_BROKEN_HPA),
402-
ATA_QUIRK_DISABLE = (1U << __ATA_QUIRK_DISABLE),
403-
ATA_QUIRK_HPA_SIZE = (1U << __ATA_QUIRK_HPA_SIZE),
404-
ATA_QUIRK_IVB = (1U << __ATA_QUIRK_IVB),
405-
ATA_QUIRK_STUCK_ERR = (1U << __ATA_QUIRK_STUCK_ERR),
406-
ATA_QUIRK_BRIDGE_OK = (1U << __ATA_QUIRK_BRIDGE_OK),
407-
ATA_QUIRK_ATAPI_MOD16_DMA = (1U << __ATA_QUIRK_ATAPI_MOD16_DMA),
408-
ATA_QUIRK_FIRMWARE_WARN = (1U << __ATA_QUIRK_FIRMWARE_WARN),
409-
ATA_QUIRK_1_5_GBPS = (1U << __ATA_QUIRK_1_5_GBPS),
410-
ATA_QUIRK_NOSETXFER = (1U << __ATA_QUIRK_NOSETXFER),
411-
ATA_QUIRK_BROKEN_FPDMA_AA = (1U << __ATA_QUIRK_BROKEN_FPDMA_AA),
412-
ATA_QUIRK_DUMP_ID = (1U << __ATA_QUIRK_DUMP_ID),
413-
ATA_QUIRK_MAX_SEC_LBA48 = (1U << __ATA_QUIRK_MAX_SEC_LBA48),
414-
ATA_QUIRK_ATAPI_DMADIR = (1U << __ATA_QUIRK_ATAPI_DMADIR),
415-
ATA_QUIRK_NO_NCQ_TRIM = (1U << __ATA_QUIRK_NO_NCQ_TRIM),
416-
ATA_QUIRK_NOLPM = (1U << __ATA_QUIRK_NOLPM),
417-
ATA_QUIRK_WD_BROKEN_LPM = (1U << __ATA_QUIRK_WD_BROKEN_LPM),
418-
ATA_QUIRK_ZERO_AFTER_TRIM = (1U << __ATA_QUIRK_ZERO_AFTER_TRIM),
419-
ATA_QUIRK_NO_DMA_LOG = (1U << __ATA_QUIRK_NO_DMA_LOG),
420-
ATA_QUIRK_NOTRIM = (1U << __ATA_QUIRK_NOTRIM),
421-
ATA_QUIRK_MAX_SEC_1024 = (1U << __ATA_QUIRK_MAX_SEC_1024),
422-
ATA_QUIRK_MAX_TRIM_128M = (1U << __ATA_QUIRK_MAX_TRIM_128M),
423-
ATA_QUIRK_NO_NCQ_ON_ATI = (1U << __ATA_QUIRK_NO_NCQ_ON_ATI),
424-
ATA_QUIRK_NO_LPM_ON_ATI = (1U << __ATA_QUIRK_NO_LPM_ON_ATI),
425-
ATA_QUIRK_NO_ID_DEV_LOG = (1U << __ATA_QUIRK_NO_ID_DEV_LOG),
426-
ATA_QUIRK_NO_LOG_DIR = (1U << __ATA_QUIRK_NO_LOG_DIR),
427-
ATA_QUIRK_NO_FUA = (1U << __ATA_QUIRK_NO_FUA),
428-
429431
/* User visible DMA mask for DMA control. DO NOT renumber. */
430432
ATA_DMA_MASK_ATA = (1 << 0), /* DMA on ATA Disk */
431433
ATA_DMA_MASK_ATAPI = (1 << 1), /* DMA on ATAPI */

0 commit comments

Comments
 (0)