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

Configure Feed

Select the types of activity you want to include in your feed.

ata: libata: Change libata.force to use the generic ATA_QUIRK_MAX_SEC quirk

Modify the existing libata.force parameters "max_sec_128" and
"max_sec_1024" to use the generic ATA_QUIRK_MAX_SEC quirk rather than
individual quirks.

This also allows us to remove the individual quirks ATA_QUIRK_MAX_SEC_128
and ATA_QUIRK_MAX_SEC_1024.

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>

authored by

Niklas Cassel and committed by
Damien Le Moal
dfd97515 873abd72

+16 -18
+16 -12
drivers/ata/libata-core.c
··· 84 84 #ifdef CONFIG_ATA_FORCE 85 85 struct ata_force_param { 86 86 const char *name; 87 + u64 value; 87 88 u8 cbl; 88 89 u8 spd_limit; 89 90 unsigned int xfer_mask; ··· 3170 3169 dev->quirks |= ATA_QUIRK_STUCK_ERR; 3171 3170 } 3172 3171 3173 - if (dev->quirks & ATA_QUIRK_MAX_SEC_128) 3174 - dev->max_sectors = min_t(unsigned int, ATA_MAX_SECTORS_128, 3175 - dev->max_sectors); 3176 - 3177 - if (dev->quirks & ATA_QUIRK_MAX_SEC_1024) 3178 - dev->max_sectors = min_t(unsigned int, ATA_MAX_SECTORS_1024, 3179 - dev->max_sectors); 3180 - 3181 3172 if (dev->quirks & ATA_QUIRK_MAX_SEC) 3182 3173 dev->max_sectors = min_t(unsigned int, dev->max_sectors, 3183 3174 ata_dev_get_quirk_value(dev, ··· 4005 4012 [__ATA_QUIRK_DIAGNOSTIC] = "diagnostic", 4006 4013 [__ATA_QUIRK_NODMA] = "nodma", 4007 4014 [__ATA_QUIRK_NONCQ] = "noncq", 4008 - [__ATA_QUIRK_MAX_SEC_128] = "maxsec128", 4009 4015 [__ATA_QUIRK_BROKEN_HPA] = "brokenhpa", 4010 4016 [__ATA_QUIRK_DISABLE] = "disable", 4011 4017 [__ATA_QUIRK_HPA_SIZE] = "hpasize", ··· 4025 4033 [__ATA_QUIRK_ZERO_AFTER_TRIM] = "zeroaftertrim", 4026 4034 [__ATA_QUIRK_NO_DMA_LOG] = "nodmalog", 4027 4035 [__ATA_QUIRK_NOTRIM] = "notrim", 4028 - [__ATA_QUIRK_MAX_SEC_1024] = "maxsec1024", 4029 4036 [__ATA_QUIRK_MAX_SEC] = "maxsec", 4030 4037 [__ATA_QUIRK_MAX_TRIM_128M] = "maxtrim128m", 4031 4038 [__ATA_QUIRK_NO_NCQ_ON_ATI] = "noncqonati", ··· 4408 4417 const struct ata_dev_quirk_value *ad = __ata_dev_max_sec_quirks; 4409 4418 u64 val = 0; 4410 4419 4420 + #ifdef CONFIG_ATA_FORCE 4421 + const struct ata_force_ent *fe = ata_force_get_fe_for_dev(dev); 4422 + if (fe && (fe->param.quirk_on & ATA_QUIRK_MAX_SEC) && fe->param.value) 4423 + val = fe->param.value; 4424 + #endif 4425 + if (val) 4426 + goto out; 4427 + 4411 4428 ata_id_c_string(dev->id, model_num, ATA_ID_PROD, sizeof(model_num)); 4412 4429 ata_id_c_string(dev->id, model_rev, ATA_ID_FW_REV, sizeof(model_rev)); 4413 4430 ··· 4428 4429 ad++; 4429 4430 } 4430 4431 4432 + out: 4431 4433 ata_dev_warn(dev, "%s quirk is using value: %llu\n", 4432 4434 ata_quirk_names[__ATA_QUIRK_MAX_SEC], val); 4433 4435 ··· 6482 6482 #define force_quirk_on(name, flag) \ 6483 6483 { #name, .quirk_on = (flag) } 6484 6484 6485 + #define force_quirk_val(name, flag, val) \ 6486 + { #name, .quirk_on = (flag), \ 6487 + .value = (val) } 6488 + 6485 6489 #define force_quirk_onoff(name, flag) \ 6486 6490 { "no" #name, .quirk_on = (flag) }, \ 6487 6491 { #name, .quirk_off = (flag) } ··· 6560 6556 force_quirk_onoff(iddevlog, ATA_QUIRK_NO_ID_DEV_LOG), 6561 6557 force_quirk_onoff(logdir, ATA_QUIRK_NO_LOG_DIR), 6562 6558 6563 - force_quirk_on(max_sec_128, ATA_QUIRK_MAX_SEC_128), 6564 - force_quirk_on(max_sec_1024, ATA_QUIRK_MAX_SEC_1024), 6559 + force_quirk_val(max_sec_128, ATA_QUIRK_MAX_SEC, 128), 6560 + force_quirk_val(max_sec_1024, ATA_QUIRK_MAX_SEC, 1024), 6565 6561 force_quirk_on(max_sec_lba48, ATA_QUIRK_MAX_SEC_LBA48), 6566 6562 6567 6563 force_quirk_onoff(lpm, ATA_QUIRK_NOLPM),
-2
include/linux/ata.h
··· 26 26 ATA_MAX_DEVICES = 2, /* per bus/port */ 27 27 ATA_MAX_PRD = 256, /* we could make these 256/256 */ 28 28 ATA_SECT_SIZE = 512, 29 - ATA_MAX_SECTORS_128 = 128, 30 29 ATA_MAX_SECTORS = 256, 31 - ATA_MAX_SECTORS_1024 = 1024, 32 30 ATA_MAX_SECTORS_LBA48 = 65535,/* avoid count to be 0000h */ 33 31 ATA_MAX_SECTORS_TAPE = 65535, 34 32 ATA_MAX_TRIM_RNUM = 64, /* 512-byte payload / (6-byte LBA + 2-byte range per entry) */
-4
include/linux/libata.h
··· 52 52 __ATA_QUIRK_DIAGNOSTIC, /* Failed boot diag */ 53 53 __ATA_QUIRK_NODMA, /* DMA problems */ 54 54 __ATA_QUIRK_NONCQ, /* Don't use NCQ */ 55 - __ATA_QUIRK_MAX_SEC_128, /* Limit max sects to 128 */ 56 55 __ATA_QUIRK_BROKEN_HPA, /* Broken HPA */ 57 56 __ATA_QUIRK_DISABLE, /* Disable it */ 58 57 __ATA_QUIRK_HPA_SIZE, /* Native size off by one */ ··· 73 74 __ATA_QUIRK_ZERO_AFTER_TRIM, /* Guarantees zero after trim */ 74 75 __ATA_QUIRK_NO_DMA_LOG, /* Do not use DMA for log read */ 75 76 __ATA_QUIRK_NOTRIM, /* Do not use TRIM */ 76 - __ATA_QUIRK_MAX_SEC_1024, /* Limit max sects to 1024 */ 77 77 __ATA_QUIRK_MAX_SEC, /* Limit max sectors */ 78 78 __ATA_QUIRK_MAX_TRIM_128M, /* Limit max trim size to 128M */ 79 79 __ATA_QUIRK_NO_NCQ_ON_ATI, /* Disable NCQ on ATI chipset */ ··· 92 94 ATA_QUIRK_DIAGNOSTIC = (1U << __ATA_QUIRK_DIAGNOSTIC), 93 95 ATA_QUIRK_NODMA = (1U << __ATA_QUIRK_NODMA), 94 96 ATA_QUIRK_NONCQ = (1U << __ATA_QUIRK_NONCQ), 95 - ATA_QUIRK_MAX_SEC_128 = (1U << __ATA_QUIRK_MAX_SEC_128), 96 97 ATA_QUIRK_BROKEN_HPA = (1U << __ATA_QUIRK_BROKEN_HPA), 97 98 ATA_QUIRK_DISABLE = (1U << __ATA_QUIRK_DISABLE), 98 99 ATA_QUIRK_HPA_SIZE = (1U << __ATA_QUIRK_HPA_SIZE), ··· 112 115 ATA_QUIRK_ZERO_AFTER_TRIM = (1U << __ATA_QUIRK_ZERO_AFTER_TRIM), 113 116 ATA_QUIRK_NO_DMA_LOG = (1U << __ATA_QUIRK_NO_DMA_LOG), 114 117 ATA_QUIRK_NOTRIM = (1U << __ATA_QUIRK_NOTRIM), 115 - ATA_QUIRK_MAX_SEC_1024 = (1U << __ATA_QUIRK_MAX_SEC_1024), 116 118 ATA_QUIRK_MAX_SEC = (1U << __ATA_QUIRK_MAX_SEC), 117 119 ATA_QUIRK_MAX_TRIM_128M = (1U << __ATA_QUIRK_MAX_TRIM_128M), 118 120 ATA_QUIRK_NO_NCQ_ON_ATI = (1U << __ATA_QUIRK_NO_NCQ_ON_ATI),