Skip to content

Commit f474c70

Browse files
floatiousdamien-lemoal
authored andcommitted
ata: libata: Allow more quirks
We have currently used up 30 out of the 32-bits in the struct ata_device struct member quirks. Thus, it is only possible to add two more quirks. Change the struct ata_device struct member quirks from an unsigned int to an u64. Doing this core level change now, will make it easier for us now, as we will not need to also do core level changes once the final two bits are used as well. Signed-off-by: Niklas Cassel <cassel@kernel.org> Reviewed-by: Martin K. Petersen <martin.petersen@oracle.com> Reviewed-by: Damien Le Moal <dlemoal@kernel.org> Signed-off-by: Damien Le Moal <dlemoal@kernel.org>
1 parent ad50d92 commit f474c70

2 files changed

Lines changed: 41 additions & 41 deletions

File tree

drivers/ata/libata-core.c

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -76,8 +76,8 @@ static unsigned int ata_dev_init_params(struct ata_device *dev,
7676
u16 heads, u16 sectors);
7777
static unsigned int ata_dev_set_xfermode(struct ata_device *dev);
7878
static void ata_dev_xfermask(struct ata_device *dev);
79-
static unsigned int ata_dev_quirks(const struct ata_device *dev);
80-
static u64 ata_dev_get_quirk_value(struct ata_device *dev, unsigned int quirk);
79+
static u64 ata_dev_quirks(const struct ata_device *dev);
80+
static u64 ata_dev_get_quirk_value(struct ata_device *dev, u64 quirk);
8181

8282
static DEFINE_IDA(ata_ida);
8383

@@ -88,8 +88,8 @@ struct ata_force_param {
8888
u8 cbl;
8989
u8 spd_limit;
9090
unsigned int xfer_mask;
91-
unsigned int quirk_on;
92-
unsigned int quirk_off;
91+
u64 quirk_on;
92+
u64 quirk_off;
9393
unsigned int pflags_on;
9494
u16 lflags_on;
9595
u16 lflags_off;
@@ -4088,7 +4088,7 @@ static const struct ata_dev_quirk_value __ata_dev_max_sec_quirks[] = {
40884088
struct ata_dev_quirks_entry {
40894089
const char *model_num;
40904090
const char *model_rev;
4091-
unsigned int quirks;
4091+
u64 quirks;
40924092
};
40934093

40944094
static const struct ata_dev_quirks_entry __ata_dev_quirks[] = {
@@ -4377,14 +4377,14 @@ static const struct ata_dev_quirks_entry __ata_dev_quirks[] = {
43774377
{ }
43784378
};
43794379

4380-
static unsigned int ata_dev_quirks(const struct ata_device *dev)
4380+
static u64 ata_dev_quirks(const struct ata_device *dev)
43814381
{
43824382
unsigned char model_num[ATA_ID_PROD_LEN + 1];
43834383
unsigned char model_rev[ATA_ID_FW_REV_LEN + 1];
43844384
const struct ata_dev_quirks_entry *ad = __ata_dev_quirks;
43854385

4386-
/* dev->quirks is an unsigned int. */
4387-
BUILD_BUG_ON(__ATA_QUIRK_MAX > 32);
4386+
/* dev->quirks is an u64. */
4387+
BUILD_BUG_ON(__ATA_QUIRK_MAX > 64);
43884388

43894389
ata_id_c_string(dev->id, model_num, ATA_ID_PROD, sizeof(model_num));
43904390
ata_id_c_string(dev->id, model_rev, ATA_ID_FW_REV, sizeof(model_rev));
@@ -4435,7 +4435,7 @@ static u64 ata_dev_get_max_sec_quirk_value(struct ata_device *dev)
44354435
return val;
44364436
}
44374437

4438-
static u64 ata_dev_get_quirk_value(struct ata_device *dev, unsigned int quirk)
4438+
static u64 ata_dev_get_quirk_value(struct ata_device *dev, u64 quirk)
44394439
{
44404440
if (quirk == ATA_QUIRK_MAX_SEC)
44414441
return ata_dev_get_max_sec_quirk_value(dev);

include/linux/libata.h

Lines changed: 32 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@
4646

4747
/*
4848
* Quirk flags bits.
49-
* ata_device->quirks is an unsigned int, so __ATA_QUIRK_MAX must not exceed 32.
49+
* ata_device->quirks is an u64, so __ATA_QUIRK_MAX must not exceed 64.
5050
*/
5151
enum ata_quirks {
5252
__ATA_QUIRK_DIAGNOSTIC, /* Failed boot diag */
@@ -89,36 +89,36 @@ enum ata_quirks {
8989
* Some quirks may be drive/controller pair dependent.
9090
*/
9191
enum {
92-
ATA_QUIRK_DIAGNOSTIC = (1U << __ATA_QUIRK_DIAGNOSTIC),
93-
ATA_QUIRK_NODMA = (1U << __ATA_QUIRK_NODMA),
94-
ATA_QUIRK_NONCQ = (1U << __ATA_QUIRK_NONCQ),
95-
ATA_QUIRK_BROKEN_HPA = (1U << __ATA_QUIRK_BROKEN_HPA),
96-
ATA_QUIRK_DISABLE = (1U << __ATA_QUIRK_DISABLE),
97-
ATA_QUIRK_HPA_SIZE = (1U << __ATA_QUIRK_HPA_SIZE),
98-
ATA_QUIRK_IVB = (1U << __ATA_QUIRK_IVB),
99-
ATA_QUIRK_STUCK_ERR = (1U << __ATA_QUIRK_STUCK_ERR),
100-
ATA_QUIRK_BRIDGE_OK = (1U << __ATA_QUIRK_BRIDGE_OK),
101-
ATA_QUIRK_ATAPI_MOD16_DMA = (1U << __ATA_QUIRK_ATAPI_MOD16_DMA),
102-
ATA_QUIRK_FIRMWARE_WARN = (1U << __ATA_QUIRK_FIRMWARE_WARN),
103-
ATA_QUIRK_1_5_GBPS = (1U << __ATA_QUIRK_1_5_GBPS),
104-
ATA_QUIRK_NOSETXFER = (1U << __ATA_QUIRK_NOSETXFER),
105-
ATA_QUIRK_BROKEN_FPDMA_AA = (1U << __ATA_QUIRK_BROKEN_FPDMA_AA),
106-
ATA_QUIRK_DUMP_ID = (1U << __ATA_QUIRK_DUMP_ID),
107-
ATA_QUIRK_MAX_SEC_LBA48 = (1U << __ATA_QUIRK_MAX_SEC_LBA48),
108-
ATA_QUIRK_ATAPI_DMADIR = (1U << __ATA_QUIRK_ATAPI_DMADIR),
109-
ATA_QUIRK_NO_NCQ_TRIM = (1U << __ATA_QUIRK_NO_NCQ_TRIM),
110-
ATA_QUIRK_NOLPM = (1U << __ATA_QUIRK_NOLPM),
111-
ATA_QUIRK_WD_BROKEN_LPM = (1U << __ATA_QUIRK_WD_BROKEN_LPM),
112-
ATA_QUIRK_ZERO_AFTER_TRIM = (1U << __ATA_QUIRK_ZERO_AFTER_TRIM),
113-
ATA_QUIRK_NO_DMA_LOG = (1U << __ATA_QUIRK_NO_DMA_LOG),
114-
ATA_QUIRK_NOTRIM = (1U << __ATA_QUIRK_NOTRIM),
115-
ATA_QUIRK_MAX_SEC = (1U << __ATA_QUIRK_MAX_SEC),
116-
ATA_QUIRK_MAX_TRIM_128M = (1U << __ATA_QUIRK_MAX_TRIM_128M),
117-
ATA_QUIRK_NO_NCQ_ON_ATI = (1U << __ATA_QUIRK_NO_NCQ_ON_ATI),
118-
ATA_QUIRK_NO_LPM_ON_ATI = (1U << __ATA_QUIRK_NO_LPM_ON_ATI),
119-
ATA_QUIRK_NO_ID_DEV_LOG = (1U << __ATA_QUIRK_NO_ID_DEV_LOG),
120-
ATA_QUIRK_NO_LOG_DIR = (1U << __ATA_QUIRK_NO_LOG_DIR),
121-
ATA_QUIRK_NO_FUA = (1U << __ATA_QUIRK_NO_FUA),
92+
ATA_QUIRK_DIAGNOSTIC = BIT_ULL(__ATA_QUIRK_DIAGNOSTIC),
93+
ATA_QUIRK_NODMA = BIT_ULL(__ATA_QUIRK_NODMA),
94+
ATA_QUIRK_NONCQ = BIT_ULL(__ATA_QUIRK_NONCQ),
95+
ATA_QUIRK_BROKEN_HPA = BIT_ULL(__ATA_QUIRK_BROKEN_HPA),
96+
ATA_QUIRK_DISABLE = BIT_ULL(__ATA_QUIRK_DISABLE),
97+
ATA_QUIRK_HPA_SIZE = BIT_ULL(__ATA_QUIRK_HPA_SIZE),
98+
ATA_QUIRK_IVB = BIT_ULL(__ATA_QUIRK_IVB),
99+
ATA_QUIRK_STUCK_ERR = BIT_ULL(__ATA_QUIRK_STUCK_ERR),
100+
ATA_QUIRK_BRIDGE_OK = BIT_ULL(__ATA_QUIRK_BRIDGE_OK),
101+
ATA_QUIRK_ATAPI_MOD16_DMA = BIT_ULL(__ATA_QUIRK_ATAPI_MOD16_DMA),
102+
ATA_QUIRK_FIRMWARE_WARN = BIT_ULL(__ATA_QUIRK_FIRMWARE_WARN),
103+
ATA_QUIRK_1_5_GBPS = BIT_ULL(__ATA_QUIRK_1_5_GBPS),
104+
ATA_QUIRK_NOSETXFER = BIT_ULL(__ATA_QUIRK_NOSETXFER),
105+
ATA_QUIRK_BROKEN_FPDMA_AA = BIT_ULL(__ATA_QUIRK_BROKEN_FPDMA_AA),
106+
ATA_QUIRK_DUMP_ID = BIT_ULL(__ATA_QUIRK_DUMP_ID),
107+
ATA_QUIRK_MAX_SEC_LBA48 = BIT_ULL(__ATA_QUIRK_MAX_SEC_LBA48),
108+
ATA_QUIRK_ATAPI_DMADIR = BIT_ULL(__ATA_QUIRK_ATAPI_DMADIR),
109+
ATA_QUIRK_NO_NCQ_TRIM = BIT_ULL(__ATA_QUIRK_NO_NCQ_TRIM),
110+
ATA_QUIRK_NOLPM = BIT_ULL(__ATA_QUIRK_NOLPM),
111+
ATA_QUIRK_WD_BROKEN_LPM = BIT_ULL(__ATA_QUIRK_WD_BROKEN_LPM),
112+
ATA_QUIRK_ZERO_AFTER_TRIM = BIT_ULL(__ATA_QUIRK_ZERO_AFTER_TRIM),
113+
ATA_QUIRK_NO_DMA_LOG = BIT_ULL(__ATA_QUIRK_NO_DMA_LOG),
114+
ATA_QUIRK_NOTRIM = BIT_ULL(__ATA_QUIRK_NOTRIM),
115+
ATA_QUIRK_MAX_SEC = BIT_ULL(__ATA_QUIRK_MAX_SEC),
116+
ATA_QUIRK_MAX_TRIM_128M = BIT_ULL(__ATA_QUIRK_MAX_TRIM_128M),
117+
ATA_QUIRK_NO_NCQ_ON_ATI = BIT_ULL(__ATA_QUIRK_NO_NCQ_ON_ATI),
118+
ATA_QUIRK_NO_LPM_ON_ATI = BIT_ULL(__ATA_QUIRK_NO_LPM_ON_ATI),
119+
ATA_QUIRK_NO_ID_DEV_LOG = BIT_ULL(__ATA_QUIRK_NO_ID_DEV_LOG),
120+
ATA_QUIRK_NO_LOG_DIR = BIT_ULL(__ATA_QUIRK_NO_LOG_DIR),
121+
ATA_QUIRK_NO_FUA = BIT_ULL(__ATA_QUIRK_NO_FUA),
122122
};
123123

124124
enum {
@@ -719,7 +719,7 @@ struct ata_cdl {
719719
struct ata_device {
720720
struct ata_link *link;
721721
unsigned int devno; /* 0 or 1 */
722-
unsigned int quirks; /* List of broken features */
722+
u64 quirks; /* List of broken features */
723723
unsigned long flags; /* ATA_DFLAG_xxx */
724724
struct scsi_device *sdev; /* attached SCSI device */
725725
void *private_data;

0 commit comments

Comments
 (0)