scsi: qla2xxx: Switch to attribute groups
authorBart Van Assche <bvanassche@acm.org>
Tue, 12 Oct 2021 23:35:52 +0000 (16:35 -0700)
committerMartin K. Petersen <martin.petersen@oracle.com>
Sun, 17 Oct 2021 01:45:58 +0000 (21:45 -0400)
struct device supports attribute groups directly but does not support
struct device_attribute directly. Hence switch to attribute groups.
Additionally, remove qla_insert_tgt_attrs() and replace it with
qla_host_attr_is_visible().

Link: https://lore.kernel.org/r/20211012233558.4066756-41-bvanassche@acm.org
Signed-off-by: Bart Van Assche <bvanassche@acm.org>
Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
drivers/scsi/qla2xxx/qla_attr.c
drivers/scsi/qla2xxx/qla_gbl.h
drivers/scsi/qla2xxx/qla_os.c

index cb5f2ecb652d3514ab8c94f2603a5db45d26b600..30f9545d22856073ed996c5e47d34a06caa4d870 100644 (file)
@@ -2481,72 +2481,77 @@ static DEVICE_ATTR(port_no, 0444, qla2x00_port_no_show, NULL);
 static DEVICE_ATTR(fw_attr, 0444, qla2x00_fw_attr_show, NULL);
 static DEVICE_ATTR_RO(edif_doorbell);
 
-
-struct device_attribute *qla2x00_host_attrs[] = {
-       &dev_attr_driver_version,
-       &dev_attr_fw_version,
-       &dev_attr_serial_num,
-       &dev_attr_isp_name,
-       &dev_attr_isp_id,
-       &dev_attr_model_name,
-       &dev_attr_model_desc,
-       &dev_attr_pci_info,
-       &dev_attr_link_state,
-       &dev_attr_zio,
-       &dev_attr_zio_timer,
-       &dev_attr_beacon,
-       &dev_attr_beacon_config,
-       &dev_attr_optrom_bios_version,
-       &dev_attr_optrom_efi_version,
-       &dev_attr_optrom_fcode_version,
-       &dev_attr_optrom_fw_version,
-       &dev_attr_84xx_fw_version,
-       &dev_attr_total_isp_aborts,
-       &dev_attr_serdes_version,
-       &dev_attr_mpi_version,
-       &dev_attr_phy_version,
-       &dev_attr_flash_block_size,
-       &dev_attr_vlan_id,
-       &dev_attr_vn_port_mac_address,
-       &dev_attr_fabric_param,
-       &dev_attr_fw_state,
-       &dev_attr_optrom_gold_fw_version,
-       &dev_attr_thermal_temp,
-       &dev_attr_diag_requests,
-       &dev_attr_diag_megabytes,
-       &dev_attr_fw_dump_size,
-       &dev_attr_allow_cna_fw_dump,
-       &dev_attr_pep_version,
-       &dev_attr_min_supported_speed,
-       &dev_attr_max_supported_speed,
-       &dev_attr_zio_threshold,
-       &dev_attr_dif_bundle_statistics,
-       &dev_attr_port_speed,
-       &dev_attr_port_no,
-       &dev_attr_fw_attr,
-       &dev_attr_dport_diagnostics,
-       &dev_attr_edif_doorbell,
-       &dev_attr_mpi_pause,
-       NULL, /* reserve for qlini_mode */
-       NULL, /* reserve for ql2xiniexchg */
-       NULL, /* reserve for ql2xexchoffld */
+static struct attribute *qla2x00_host_attrs[] = {
+       &dev_attr_driver_version.attr,
+       &dev_attr_fw_version.attr,
+       &dev_attr_serial_num.attr,
+       &dev_attr_isp_name.attr,
+       &dev_attr_isp_id.attr,
+       &dev_attr_model_name.attr,
+       &dev_attr_model_desc.attr,
+       &dev_attr_pci_info.attr,
+       &dev_attr_link_state.attr,
+       &dev_attr_zio.attr,
+       &dev_attr_zio_timer.attr,
+       &dev_attr_beacon.attr,
+       &dev_attr_beacon_config.attr,
+       &dev_attr_optrom_bios_version.attr,
+       &dev_attr_optrom_efi_version.attr,
+       &dev_attr_optrom_fcode_version.attr,
+       &dev_attr_optrom_fw_version.attr,
+       &dev_attr_84xx_fw_version.attr,
+       &dev_attr_total_isp_aborts.attr,
+       &dev_attr_serdes_version.attr,
+       &dev_attr_mpi_version.attr,
+       &dev_attr_phy_version.attr,
+       &dev_attr_flash_block_size.attr,
+       &dev_attr_vlan_id.attr,
+       &dev_attr_vn_port_mac_address.attr,
+       &dev_attr_fabric_param.attr,
+       &dev_attr_fw_state.attr,
+       &dev_attr_optrom_gold_fw_version.attr,
+       &dev_attr_thermal_temp.attr,
+       &dev_attr_diag_requests.attr,
+       &dev_attr_diag_megabytes.attr,
+       &dev_attr_fw_dump_size.attr,
+       &dev_attr_allow_cna_fw_dump.attr,
+       &dev_attr_pep_version.attr,
+       &dev_attr_min_supported_speed.attr,
+       &dev_attr_max_supported_speed.attr,
+       &dev_attr_zio_threshold.attr,
+       &dev_attr_dif_bundle_statistics.attr,
+       &dev_attr_port_speed.attr,
+       &dev_attr_port_no.attr,
+       &dev_attr_fw_attr.attr,
+       &dev_attr_dport_diagnostics.attr,
+       &dev_attr_edif_doorbell.attr,
+       &dev_attr_mpi_pause.attr,
+       &dev_attr_qlini_mode.attr,
+       &dev_attr_ql2xiniexchg.attr,
+       &dev_attr_ql2xexchoffld.attr,
        NULL,
 };
 
-void qla_insert_tgt_attrs(void)
+static umode_t qla_host_attr_is_visible(struct kobject *kobj,
+                                       struct attribute *attr, int i)
 {
-       struct device_attribute **attr;
+       if (ql2x_ini_mode != QLA2XXX_INI_MODE_DUAL &&
+           (attr == &dev_attr_qlini_mode.attr ||
+            attr == &dev_attr_ql2xiniexchg.attr ||
+            attr == &dev_attr_ql2xexchoffld.attr))
+               return 0;
+       return attr->mode;
+}
 
-       /* advance to empty slot */
-       for (attr = &qla2x00_host_attrs[0]; *attr; ++attr)
-               continue;
+static const struct attribute_group qla2x00_host_attr_group = {
+       .is_visible = qla_host_attr_is_visible,
+       .attrs = qla2x00_host_attrs
+};
 
-       *attr = &dev_attr_qlini_mode;
-       attr++;
-       *attr = &dev_attr_ql2xiniexchg;
-       attr++;
-       *attr = &dev_attr_ql2xexchoffld;
-}
+const struct attribute_group *qla2x00_host_groups[] = {
+       &qla2x00_host_attr_group,
+       NULL
+};
 
 /* Host attributes. */
 
index 5ff974e987837459c2b09dba520bac481259d2a2..3c4fa8bac88de03c01490db2a572a5ca274d6069 100644 (file)
@@ -742,7 +742,7 @@ uint qla25xx_fdmi_port_speed_currently(struct qla_hw_data *);
  * Global Function Prototypes in qla_attr.c source file.
  */
 struct device_attribute;
-extern struct device_attribute *qla2x00_host_attrs[];
+extern const struct attribute_group *qla2x00_host_groups[];
 struct fc_function_template;
 extern struct fc_function_template qla2xxx_transport_functions;
 extern struct fc_function_template qla2xxx_transport_vport_functions;
@@ -756,7 +756,6 @@ extern int qla2x00_echo_test(scsi_qla_host_t *,
 extern int qla24xx_update_all_fcp_prio(scsi_qla_host_t *);
 extern int qla24xx_fcp_prio_cfg_valid(scsi_qla_host_t *,
        struct qla_fcp_prio_cfg *, uint8_t);
-void qla_insert_tgt_attrs(void);
 /*
  * Global Function Prototypes in qla_dfs.c source file.
  */
index 5d576a3ba14f4df1159e48be3ea5e0538c799075..04fd98f60c9127f2c233e70d85ec7d2661dc4aae 100644 (file)
@@ -7943,7 +7943,7 @@ struct scsi_host_template qla2xxx_driver_template = {
        .sg_tablesize           = SG_ALL,
 
        .max_sectors            = 0xFFFF,
-       .shost_attrs            = qla2x00_host_attrs,
+       .shost_groups           = qla2x00_host_groups,
 
        .supported_mode         = MODE_INITIATOR,
        .track_queue_depth      = 1,
@@ -8131,9 +8131,6 @@ qla2x00_module_init(void)
        if (ql2xextended_error_logging == 1)
                ql2xextended_error_logging = QL_DBG_DEFAULT1_MASK;
 
-       if (ql2x_ini_mode == QLA2XXX_INI_MODE_DUAL)
-               qla_insert_tgt_attrs();
-
        qla2xxx_transport_template =
            fc_attach_transport(&qla2xxx_transport_functions);
        if (!qla2xxx_transport_template) {