ata: sata_fsl: fix scsi host initialization
authorDamien Le Moal <damien.lemoal@opensource.wdc.com>
Tue, 4 Jan 2022 07:14:46 +0000 (16:14 +0900)
committerDamien Le Moal <damien.lemoal@opensource.wdc.com>
Fri, 14 Jan 2022 06:17:16 +0000 (15:17 +0900)
When compiling with W=1, the sata_fsl driver compilation throws the
warning:

drivers/ata/sata_fsl.c:1385:22: error: initialized field overwritten
[-Werror=override-init]
 1385 |         .can_queue = SATA_FSL_QUEUE_DEPTH,

This is due to the driver scsi host template initialization overwriting
the can_queue field that is already set using the ATA_NCQ_SHT()
initializer macro, resulting in the same field being initialized twice
in the host template declaration.

To remove this warning, introduce the ATA_SUBBASE_SHT_QD() and
ATA_NCQ_SHT_QD() initialization macros to allow specifying a queue depth
different from the default ATA_DEF_QUEUE using an additional argument to
the macro.

Signed-off-by: Damien Le Moal <damien.lemoal@opensource.wdc.com>
Reviewed-by: Hannes Reinecke <hare@suse.de>
drivers/ata/sata_fsl.c
include/linux/libata.h

index 142e65d5efc75777c511774252505fab7fde455a..101d4dd79f629250913e7b3a7f3d0bbcec1e2216 100644 (file)
@@ -1380,8 +1380,7 @@ static void sata_fsl_host_stop(struct ata_host *host)
  * scsi mid-layer and libata interface structures
  */
 static struct scsi_host_template sata_fsl_sht = {
-       ATA_NCQ_SHT("sata_fsl"),
-       .can_queue = SATA_FSL_QUEUE_DEPTH,
+       ATA_NCQ_SHT_QD("sata_fsl", SATA_FSL_QUEUE_DEPTH),
        .sg_tablesize = SATA_FSL_MAX_PRD_USABLE,
        .dma_boundary = ATA_DMA_BOUNDARY,
 };
index c258f69106f49e493f1b810db09ce24c02fe9234..2e5e7c40c991a8a0741b9543ecde2344597cc635 100644 (file)
@@ -1385,6 +1385,12 @@ extern const struct attribute_group *ata_common_sdev_groups[];
        .tag_alloc_policy       = BLK_TAG_ALLOC_RR,             \
        .slave_configure        = ata_scsi_slave_config
 
+#define ATA_SUBBASE_SHT_QD(drv_name, drv_qd)                   \
+       __ATA_BASE_SHT(drv_name),                               \
+       .can_queue              = drv_qd,                       \
+       .tag_alloc_policy       = BLK_TAG_ALLOC_RR,             \
+       .slave_configure        = ata_scsi_slave_config
+
 #define ATA_BASE_SHT(drv_name)                                 \
        ATA_SUBBASE_SHT(drv_name),                              \
        .sdev_groups            = ata_common_sdev_groups
@@ -1396,6 +1402,11 @@ extern const struct attribute_group *ata_ncq_sdev_groups[];
        ATA_SUBBASE_SHT(drv_name),                              \
        .sdev_groups            = ata_ncq_sdev_groups,          \
        .change_queue_depth     = ata_scsi_change_queue_depth
+
+#define ATA_NCQ_SHT_QD(drv_name, drv_qd)                       \
+       ATA_SUBBASE_SHT_QD(drv_name, drv_qd),                   \
+       .sdev_groups            = ata_ncq_sdev_groups,          \
+       .change_queue_depth     = ata_scsi_change_queue_depth
 #endif
 
 /*