Commit 66df386d authored by Bart Van Assche's avatar Bart Van Assche Committed by Martin K. Petersen
Browse files

scsi: qla2xxx: Switch to attribute groups

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: default avatarBart Van Assche <bvanassche@acm.org>
Signed-off-by: default avatarMartin K. Petersen <martin.petersen@oracle.com>
parent f8f8f857
Loading
Loading
Loading
Loading
+65 −60
Original line number Diff line number Diff line
@@ -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. */

+1 −2
Original line number Diff line number Diff line
@@ -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.
 */
+1 −4
Original line number Diff line number Diff line
@@ -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) {