scsi: lpfc: Switch to attribute groups
authorBart Van Assche <bvanassche@acm.org>
Tue, 12 Oct 2021 23:35:39 +0000 (16:35 -0700)
committerMartin K. Petersen <martin.petersen@oracle.com>
Sun, 17 Oct 2021 01:45:56 +0000 (21:45 -0400)
struct device supports attribute groups directly but does not support
struct device_attribute directly. Hence switch to attribute groups.

Link: https://lore.kernel.org/r/20211012233558.4066756-28-bvanassche@acm.org
Signed-off-by: Bart Van Assche <bvanassche@acm.org>
Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
drivers/scsi/lpfc/lpfc_attr.c
drivers/scsi/lpfc/lpfc_crtn.h
drivers/scsi/lpfc/lpfc_init.c
drivers/scsi/lpfc/lpfc_scsi.c

index ebe4179..dd4c51b 100644 (file)
@@ -6394,160 +6394,178 @@ LPFC_ATTR_RW(vmid_priority_tagging, LPFC_VMID_PRIO_TAG_DISABLE,
             LPFC_VMID_PRIO_TAG_ALL_TARGETS,
             "Enable Priority Tagging VMID support");
 
-struct device_attribute *lpfc_hba_attrs[] = {
-       &dev_attr_nvme_info,
-       &dev_attr_scsi_stat,
-       &dev_attr_bg_info,
-       &dev_attr_bg_guard_err,
-       &dev_attr_bg_apptag_err,
-       &dev_attr_bg_reftag_err,
-       &dev_attr_info,
-       &dev_attr_serialnum,
-       &dev_attr_modeldesc,
-       &dev_attr_modelname,
-       &dev_attr_programtype,
-       &dev_attr_portnum,
-       &dev_attr_fwrev,
-       &dev_attr_hdw,
-       &dev_attr_option_rom_version,
-       &dev_attr_link_state,
-       &dev_attr_num_discovered_ports,
-       &dev_attr_menlo_mgmt_mode,
-       &dev_attr_lpfc_drvr_version,
-       &dev_attr_lpfc_enable_fip,
-       &dev_attr_lpfc_temp_sensor,
-       &dev_attr_lpfc_log_verbose,
-       &dev_attr_lpfc_lun_queue_depth,
-       &dev_attr_lpfc_tgt_queue_depth,
-       &dev_attr_lpfc_hba_queue_depth,
-       &dev_attr_lpfc_peer_port_login,
-       &dev_attr_lpfc_nodev_tmo,
-       &dev_attr_lpfc_devloss_tmo,
-       &dev_attr_lpfc_enable_fc4_type,
-       &dev_attr_lpfc_fcp_class,
-       &dev_attr_lpfc_use_adisc,
-       &dev_attr_lpfc_first_burst_size,
-       &dev_attr_lpfc_ack0,
-       &dev_attr_lpfc_xri_rebalancing,
-       &dev_attr_lpfc_topology,
-       &dev_attr_lpfc_scan_down,
-       &dev_attr_lpfc_link_speed,
-       &dev_attr_lpfc_fcp_io_sched,
-       &dev_attr_lpfc_ns_query,
-       &dev_attr_lpfc_fcp2_no_tgt_reset,
-       &dev_attr_lpfc_cr_delay,
-       &dev_attr_lpfc_cr_count,
-       &dev_attr_lpfc_multi_ring_support,
-       &dev_attr_lpfc_multi_ring_rctl,
-       &dev_attr_lpfc_multi_ring_type,
-       &dev_attr_lpfc_fdmi_on,
-       &dev_attr_lpfc_enable_SmartSAN,
-       &dev_attr_lpfc_max_luns,
-       &dev_attr_lpfc_enable_npiv,
-       &dev_attr_lpfc_fcf_failover_policy,
-       &dev_attr_lpfc_enable_rrq,
-       &dev_attr_lpfc_fcp_wait_abts_rsp,
-       &dev_attr_nport_evt_cnt,
-       &dev_attr_board_mode,
-       &dev_attr_max_vpi,
-       &dev_attr_used_vpi,
-       &dev_attr_max_rpi,
-       &dev_attr_used_rpi,
-       &dev_attr_max_xri,
-       &dev_attr_used_xri,
-       &dev_attr_npiv_info,
-       &dev_attr_issue_reset,
-       &dev_attr_lpfc_poll,
-       &dev_attr_lpfc_poll_tmo,
-       &dev_attr_lpfc_task_mgmt_tmo,
-       &dev_attr_lpfc_use_msi,
-       &dev_attr_lpfc_nvme_oas,
-       &dev_attr_lpfc_nvme_embed_cmd,
-       &dev_attr_lpfc_fcp_imax,
-       &dev_attr_lpfc_force_rscn,
-       &dev_attr_lpfc_cq_poll_threshold,
-       &dev_attr_lpfc_cq_max_proc_limit,
-       &dev_attr_lpfc_fcp_cpu_map,
-       &dev_attr_lpfc_fcp_mq_threshold,
-       &dev_attr_lpfc_hdw_queue,
-       &dev_attr_lpfc_irq_chann,
-       &dev_attr_lpfc_suppress_rsp,
-       &dev_attr_lpfc_nvmet_mrq,
-       &dev_attr_lpfc_nvmet_mrq_post,
-       &dev_attr_lpfc_nvme_enable_fb,
-       &dev_attr_lpfc_nvmet_fb_size,
-       &dev_attr_lpfc_enable_bg,
-       &dev_attr_lpfc_soft_wwnn,
-       &dev_attr_lpfc_soft_wwpn,
-       &dev_attr_lpfc_soft_wwn_enable,
-       &dev_attr_lpfc_enable_hba_reset,
-       &dev_attr_lpfc_enable_hba_heartbeat,
-       &dev_attr_lpfc_EnableXLane,
-       &dev_attr_lpfc_XLanePriority,
-       &dev_attr_lpfc_xlane_lun,
-       &dev_attr_lpfc_xlane_tgt,
-       &dev_attr_lpfc_xlane_vpt,
-       &dev_attr_lpfc_xlane_lun_state,
-       &dev_attr_lpfc_xlane_lun_status,
-       &dev_attr_lpfc_xlane_priority,
-       &dev_attr_lpfc_sg_seg_cnt,
-       &dev_attr_lpfc_max_scsicmpl_time,
-       &dev_attr_lpfc_stat_data_ctrl,
-       &dev_attr_lpfc_aer_support,
-       &dev_attr_lpfc_aer_state_cleanup,
-       &dev_attr_lpfc_sriov_nr_virtfn,
-       &dev_attr_lpfc_req_fw_upgrade,
-       &dev_attr_lpfc_suppress_link_up,
-       &dev_attr_iocb_hw,
-       &dev_attr_pls,
-       &dev_attr_pt,
-       &dev_attr_txq_hw,
-       &dev_attr_txcmplq_hw,
-       &dev_attr_lpfc_sriov_hw_max_virtfn,
-       &dev_attr_protocol,
-       &dev_attr_lpfc_xlane_supported,
-       &dev_attr_lpfc_enable_mds_diags,
-       &dev_attr_lpfc_ras_fwlog_buffsize,
-       &dev_attr_lpfc_ras_fwlog_level,
-       &dev_attr_lpfc_ras_fwlog_func,
-       &dev_attr_lpfc_enable_bbcr,
-       &dev_attr_lpfc_enable_dpp,
-       &dev_attr_lpfc_enable_mi,
-       &dev_attr_cmf_info,
-       &dev_attr_lpfc_max_vmid,
-       &dev_attr_lpfc_vmid_inactivity_timeout,
-       &dev_attr_lpfc_vmid_app_header,
-       &dev_attr_lpfc_vmid_priority_tagging,
+static struct attribute *lpfc_hba_attrs[] = {
+       &dev_attr_nvme_info.attr,
+       &dev_attr_scsi_stat.attr,
+       &dev_attr_bg_info.attr,
+       &dev_attr_bg_guard_err.attr,
+       &dev_attr_bg_apptag_err.attr,
+       &dev_attr_bg_reftag_err.attr,
+       &dev_attr_info.attr,
+       &dev_attr_serialnum.attr,
+       &dev_attr_modeldesc.attr,
+       &dev_attr_modelname.attr,
+       &dev_attr_programtype.attr,
+       &dev_attr_portnum.attr,
+       &dev_attr_fwrev.attr,
+       &dev_attr_hdw.attr,
+       &dev_attr_option_rom_version.attr,
+       &dev_attr_link_state.attr,
+       &dev_attr_num_discovered_ports.attr,
+       &dev_attr_menlo_mgmt_mode.attr,
+       &dev_attr_lpfc_drvr_version.attr,
+       &dev_attr_lpfc_enable_fip.attr,
+       &dev_attr_lpfc_temp_sensor.attr,
+       &dev_attr_lpfc_log_verbose.attr,
+       &dev_attr_lpfc_lun_queue_depth.attr,
+       &dev_attr_lpfc_tgt_queue_depth.attr,
+       &dev_attr_lpfc_hba_queue_depth.attr,
+       &dev_attr_lpfc_peer_port_login.attr,
+       &dev_attr_lpfc_nodev_tmo.attr,
+       &dev_attr_lpfc_devloss_tmo.attr,
+       &dev_attr_lpfc_enable_fc4_type.attr,
+       &dev_attr_lpfc_fcp_class.attr,
+       &dev_attr_lpfc_use_adisc.attr,
+       &dev_attr_lpfc_first_burst_size.attr,
+       &dev_attr_lpfc_ack0.attr,
+       &dev_attr_lpfc_xri_rebalancing.attr,
+       &dev_attr_lpfc_topology.attr,
+       &dev_attr_lpfc_scan_down.attr,
+       &dev_attr_lpfc_link_speed.attr,
+       &dev_attr_lpfc_fcp_io_sched.attr,
+       &dev_attr_lpfc_ns_query.attr,
+       &dev_attr_lpfc_fcp2_no_tgt_reset.attr,
+       &dev_attr_lpfc_cr_delay.attr,
+       &dev_attr_lpfc_cr_count.attr,
+       &dev_attr_lpfc_multi_ring_support.attr,
+       &dev_attr_lpfc_multi_ring_rctl.attr,
+       &dev_attr_lpfc_multi_ring_type.attr,
+       &dev_attr_lpfc_fdmi_on.attr,
+       &dev_attr_lpfc_enable_SmartSAN.attr,
+       &dev_attr_lpfc_max_luns.attr,
+       &dev_attr_lpfc_enable_npiv.attr,
+       &dev_attr_lpfc_fcf_failover_policy.attr,
+       &dev_attr_lpfc_enable_rrq.attr,
+       &dev_attr_lpfc_fcp_wait_abts_rsp.attr,
+       &dev_attr_nport_evt_cnt.attr,
+       &dev_attr_board_mode.attr,
+       &dev_attr_max_vpi.attr,
+       &dev_attr_used_vpi.attr,
+       &dev_attr_max_rpi.attr,
+       &dev_attr_used_rpi.attr,
+       &dev_attr_max_xri.attr,
+       &dev_attr_used_xri.attr,
+       &dev_attr_npiv_info.attr,
+       &dev_attr_issue_reset.attr,
+       &dev_attr_lpfc_poll.attr,
+       &dev_attr_lpfc_poll_tmo.attr,
+       &dev_attr_lpfc_task_mgmt_tmo.attr,
+       &dev_attr_lpfc_use_msi.attr,
+       &dev_attr_lpfc_nvme_oas.attr,
+       &dev_attr_lpfc_nvme_embed_cmd.attr,
+       &dev_attr_lpfc_fcp_imax.attr,
+       &dev_attr_lpfc_force_rscn.attr,
+       &dev_attr_lpfc_cq_poll_threshold.attr,
+       &dev_attr_lpfc_cq_max_proc_limit.attr,
+       &dev_attr_lpfc_fcp_cpu_map.attr,
+       &dev_attr_lpfc_fcp_mq_threshold.attr,
+       &dev_attr_lpfc_hdw_queue.attr,
+       &dev_attr_lpfc_irq_chann.attr,
+       &dev_attr_lpfc_suppress_rsp.attr,
+       &dev_attr_lpfc_nvmet_mrq.attr,
+       &dev_attr_lpfc_nvmet_mrq_post.attr,
+       &dev_attr_lpfc_nvme_enable_fb.attr,
+       &dev_attr_lpfc_nvmet_fb_size.attr,
+       &dev_attr_lpfc_enable_bg.attr,
+       &dev_attr_lpfc_soft_wwnn.attr,
+       &dev_attr_lpfc_soft_wwpn.attr,
+       &dev_attr_lpfc_soft_wwn_enable.attr,
+       &dev_attr_lpfc_enable_hba_reset.attr,
+       &dev_attr_lpfc_enable_hba_heartbeat.attr,
+       &dev_attr_lpfc_EnableXLane.attr,
+       &dev_attr_lpfc_XLanePriority.attr,
+       &dev_attr_lpfc_xlane_lun.attr,
+       &dev_attr_lpfc_xlane_tgt.attr,
+       &dev_attr_lpfc_xlane_vpt.attr,
+       &dev_attr_lpfc_xlane_lun_state.attr,
+       &dev_attr_lpfc_xlane_lun_status.attr,
+       &dev_attr_lpfc_xlane_priority.attr,
+       &dev_attr_lpfc_sg_seg_cnt.attr,
+       &dev_attr_lpfc_max_scsicmpl_time.attr,
+       &dev_attr_lpfc_stat_data_ctrl.attr,
+       &dev_attr_lpfc_aer_support.attr,
+       &dev_attr_lpfc_aer_state_cleanup.attr,
+       &dev_attr_lpfc_sriov_nr_virtfn.attr,
+       &dev_attr_lpfc_req_fw_upgrade.attr,
+       &dev_attr_lpfc_suppress_link_up.attr,
+       &dev_attr_iocb_hw.attr,
+       &dev_attr_pls.attr,
+       &dev_attr_pt.attr,
+       &dev_attr_txq_hw.attr,
+       &dev_attr_txcmplq_hw.attr,
+       &dev_attr_lpfc_sriov_hw_max_virtfn.attr,
+       &dev_attr_protocol.attr,
+       &dev_attr_lpfc_xlane_supported.attr,
+       &dev_attr_lpfc_enable_mds_diags.attr,
+       &dev_attr_lpfc_ras_fwlog_buffsize.attr,
+       &dev_attr_lpfc_ras_fwlog_level.attr,
+       &dev_attr_lpfc_ras_fwlog_func.attr,
+       &dev_attr_lpfc_enable_bbcr.attr,
+       &dev_attr_lpfc_enable_dpp.attr,
+       &dev_attr_lpfc_enable_mi.attr,
+       &dev_attr_cmf_info.attr,
+       &dev_attr_lpfc_max_vmid.attr,
+       &dev_attr_lpfc_vmid_inactivity_timeout.attr,
+       &dev_attr_lpfc_vmid_app_header.attr,
+       &dev_attr_lpfc_vmid_priority_tagging.attr,
        NULL,
 };
 
-struct device_attribute *lpfc_vport_attrs[] = {
-       &dev_attr_info,
-       &dev_attr_link_state,
-       &dev_attr_num_discovered_ports,
-       &dev_attr_lpfc_drvr_version,
-       &dev_attr_lpfc_log_verbose,
-       &dev_attr_lpfc_lun_queue_depth,
-       &dev_attr_lpfc_tgt_queue_depth,
-       &dev_attr_lpfc_nodev_tmo,
-       &dev_attr_lpfc_devloss_tmo,
-       &dev_attr_lpfc_hba_queue_depth,
-       &dev_attr_lpfc_peer_port_login,
-       &dev_attr_lpfc_restrict_login,
-       &dev_attr_lpfc_fcp_class,
-       &dev_attr_lpfc_use_adisc,
-       &dev_attr_lpfc_first_burst_size,
-       &dev_attr_lpfc_max_luns,
-       &dev_attr_nport_evt_cnt,
-       &dev_attr_npiv_info,
-       &dev_attr_lpfc_enable_da_id,
-       &dev_attr_lpfc_max_scsicmpl_time,
-       &dev_attr_lpfc_stat_data_ctrl,
-       &dev_attr_lpfc_static_vport,
-       &dev_attr_cmf_info,
+static const struct attribute_group lpfc_hba_attr_group = {
+       .attrs = lpfc_hba_attrs
+};
+
+const struct attribute_group *lpfc_hba_groups[] = {
+       &lpfc_hba_attr_group,
+       NULL
+};
+
+static struct attribute *lpfc_vport_attrs[] = {
+       &dev_attr_info.attr,
+       &dev_attr_link_state.attr,
+       &dev_attr_num_discovered_ports.attr,
+       &dev_attr_lpfc_drvr_version.attr,
+       &dev_attr_lpfc_log_verbose.attr,
+       &dev_attr_lpfc_lun_queue_depth.attr,
+       &dev_attr_lpfc_tgt_queue_depth.attr,
+       &dev_attr_lpfc_nodev_tmo.attr,
+       &dev_attr_lpfc_devloss_tmo.attr,
+       &dev_attr_lpfc_hba_queue_depth.attr,
+       &dev_attr_lpfc_peer_port_login.attr,
+       &dev_attr_lpfc_restrict_login.attr,
+       &dev_attr_lpfc_fcp_class.attr,
+       &dev_attr_lpfc_use_adisc.attr,
+       &dev_attr_lpfc_first_burst_size.attr,
+       &dev_attr_lpfc_max_luns.attr,
+       &dev_attr_nport_evt_cnt.attr,
+       &dev_attr_npiv_info.attr,
+       &dev_attr_lpfc_enable_da_id.attr,
+       &dev_attr_lpfc_max_scsicmpl_time.attr,
+       &dev_attr_lpfc_stat_data_ctrl.attr,
+       &dev_attr_lpfc_static_vport.attr,
+       &dev_attr_cmf_info.attr,
        NULL,
 };
 
+static const struct attribute_group lpfc_vport_attr_group = {
+       .attrs = lpfc_vport_attrs
+};
+
+const struct attribute_group *lpfc_vport_groups[] = {
+       &lpfc_vport_attr_group,
+       NULL
+};
+
 /**
  * sysfs_ctlreg_write - Write method for writing to ctlreg
  * @filp: open sysfs file
index c512f41..ad4a954 100644 (file)
@@ -428,8 +428,8 @@ void lpfc_get_cfgparam(struct lpfc_hba *);
 void lpfc_get_vport_cfgparam(struct lpfc_vport *);
 int lpfc_alloc_sysfs_attr(struct lpfc_vport *);
 void lpfc_free_sysfs_attr(struct lpfc_vport *);
-extern struct device_attribute *lpfc_hba_attrs[];
-extern struct device_attribute *lpfc_vport_attrs[];
+extern const struct attribute_group *lpfc_hba_groups[];
+extern const struct attribute_group *lpfc_vport_groups[];
 extern struct scsi_host_template lpfc_template;
 extern struct scsi_host_template lpfc_template_nvme;
 extern struct fc_function_template lpfc_transport_functions;
index b7de66f..34b5d04 100644 (file)
@@ -4574,7 +4574,7 @@ lpfc_create_port(struct lpfc_hba *phba, int instance, struct device *dev)
                        /* Template for all vports this physical port creates */
                        memcpy(&phba->vport_template, &lpfc_template,
                               sizeof(*template));
-                       phba->vport_template.shost_attrs = lpfc_vport_attrs;
+                       phba->vport_template.shost_groups = lpfc_vport_groups;
                        phba->vport_template.eh_bus_reset_handler = NULL;
                        phba->vport_template.eh_host_reset_handler = NULL;
                        phba->vport_template.vendor_id = 0;
index 35df919..67844fc 100644 (file)
@@ -7202,7 +7202,7 @@ struct scsi_host_template lpfc_template_nvme = {
        .this_id                = -1,
        .sg_tablesize           = 1,
        .cmd_per_lun            = 1,
-       .shost_attrs            = lpfc_hba_attrs,
+       .shost_groups           = lpfc_hba_groups,
        .max_sectors            = 0xFFFFFFFF,
        .vendor_id              = LPFC_NL_VENDOR_ID,
        .track_queue_depth      = 0,
@@ -7228,7 +7228,7 @@ struct scsi_host_template lpfc_template = {
        .this_id                = -1,
        .sg_tablesize           = LPFC_DEFAULT_SG_SEG_CNT,
        .cmd_per_lun            = LPFC_CMD_PER_LUN,
-       .shost_attrs            = lpfc_hba_attrs,
+       .shost_groups           = lpfc_hba_groups,
        .max_sectors            = 0xFFFFFFFF,
        .vendor_id              = LPFC_NL_VENDOR_ID,
        .change_queue_depth     = scsi_change_queue_depth,