drivers/s390/scsi/zfcp_sysfs.c
Source file repositories/reference/linux-study-clean/drivers/s390/scsi/zfcp_sysfs.c
File Facts
- System
- Linux kernel
- Corpus path
drivers/s390/scsi/zfcp_sysfs.c- Extension
.c- Size
- 29022 bytes
- Lines
- 936
- Domain
- Driver Families
- Bucket
- drivers/s390
- Inferred role
- Driver Families: implementation source
- Status
- source implementation candidate
Why This File Exists
Repeatable hardware-adapter layer. Deep compatibility for every driver is out of scope; this atlas records patterns, probe lifecycles, bus glue, IRQ/DMA usage, and links back to core abstractions.
- Repeatable hardware-adapter layer. Deep compatibility for every driver is out of scope; this atlas records patterns, probe lifecycles, bus glue, IRQ/DMA usage, and links back to core abstractions.
- Uses kernel synchronization; read lock ordering, sleepability, and interrupt context assumptions before translating.
- Allocates kernel memory; connect allocation flags and lifetime to context constraints.
- Defines or uses C structs; map object ownership, embedded links, reference counts, and lock ownership.
Dependency Surface
linux/slab.hzfcp_diag.hzfcp_ext.h
Detected Declarations
function zfcp_sysfs_port_failed_showfunction zfcp_sysfs_port_failed_storefunction zfcp_sysfs_unit_failed_showfunction zfcp_sysfs_unit_failed_storefunction zfcp_sysfs_adapter_failed_showfunction zfcp_sysfs_adapter_failed_storefunction zfcp_sysfs_port_rescan_storefunction zfcp_sysfs_port_set_removingfunction zfcp_sysfs_port_is_removingfunction zfcp_sysfs_port_in_usefunction zfcp_sysfs_port_remove_storefunction zfcp_sysfs_adapter_diag_max_age_showfunction zfcp_sysfs_adapter_diag_max_age_storefunction zfcp_sysfs_adapter_fc_security_showfunction zfcp_sysfs_unit_add_storefunction zfcp_sysfs_unit_remove_storefunction zfcp_sysfs_port_fc_security_showfunction zfcp_sysfs_scsi_fcp_lun_showfunction zfcp_sysfs_scsi_zfcp_failed_showfunction zfcp_sysfs_scsi_zfcp_failed_storefunction zfcp_sysfs_adapter_util_showfunction zfcp_sysfs_adapter_ex_configfunction zfcp_sysfs_adapter_q_full_showfunction zfcp_sysfs_adapter_diag_b2b_credit_show
Annotated Snippet
if (!zfcp_diag_support_sfp(adapter)) { \
rc = -EOPNOTSUPP; \
goto out; \
} \
\
diag_hdr = &adapter->diagnostics->port_data.header; \
\
rc = zfcp_diag_update_buffer_limited( \
adapter, diag_hdr, zfcp_diag_update_port_data_buffer); \
if (rc != 0) \
goto out; \
\
spin_lock_irqsave(&diag_hdr->access_lock, flags); \
rc = sysfs_emit( \
buf, _prtfmt "\n", \
adapter->diagnostics->port_data.data._qtcb_member); \
spin_unlock_irqrestore(&diag_hdr->access_lock, flags); \
\
out: \
zfcp_ccw_adapter_put(adapter); \
return rc; \
} \
static ZFCP_DEV_ATTR(adapter_diag_sfp, _name, 0400, \
zfcp_sysfs_adapter_diag_sfp_##_name##_show, NULL)
ZFCP_DEFINE_DIAG_SFP_ATTR(temperature, temperature, "%hd");
ZFCP_DEFINE_DIAG_SFP_ATTR(vcc, vcc, "%hu");
ZFCP_DEFINE_DIAG_SFP_ATTR(tx_bias, tx_bias, "%hu");
ZFCP_DEFINE_DIAG_SFP_ATTR(tx_power, tx_power, "%hu");
ZFCP_DEFINE_DIAG_SFP_ATTR(rx_power, rx_power, "%hu");
ZFCP_DEFINE_DIAG_SFP_ATTR(port_tx_type, sfp_flags.port_tx_type, "%hu");
ZFCP_DEFINE_DIAG_SFP_ATTR(optical_port, sfp_flags.optical_port, "%hu");
ZFCP_DEFINE_DIAG_SFP_ATTR(sfp_invalid, sfp_flags.sfp_invalid, "%hu");
ZFCP_DEFINE_DIAG_SFP_ATTR(connector_type, sfp_flags.connector_type, "%hu");
ZFCP_DEFINE_DIAG_SFP_ATTR(fec_active, sfp_flags.fec_active, "%hu");
static struct attribute *zfcp_sysfs_diag_attrs[] = {
&dev_attr_adapter_diag_sfp_temperature.attr,
&dev_attr_adapter_diag_sfp_vcc.attr,
&dev_attr_adapter_diag_sfp_tx_bias.attr,
&dev_attr_adapter_diag_sfp_tx_power.attr,
&dev_attr_adapter_diag_sfp_rx_power.attr,
&dev_attr_adapter_diag_sfp_port_tx_type.attr,
&dev_attr_adapter_diag_sfp_optical_port.attr,
&dev_attr_adapter_diag_sfp_sfp_invalid.attr,
&dev_attr_adapter_diag_sfp_connector_type.attr,
&dev_attr_adapter_diag_sfp_fec_active.attr,
&dev_attr_adapter_diag_b2b_credit.attr,
NULL,
};
static const struct attribute_group zfcp_sysfs_diag_attr_group = {
.name = "diagnostics",
.attrs = zfcp_sysfs_diag_attrs,
};
const struct attribute_group *zfcp_sysfs_adapter_attr_groups[] = {
&zfcp_sysfs_adapter_attr_group,
&zfcp_sysfs_diag_attr_group,
NULL,
};
Annotation
- Immediate include surface: `linux/slab.h`, `zfcp_diag.h`, `zfcp_ext.h`.
- Detected declarations: `function zfcp_sysfs_port_failed_show`, `function zfcp_sysfs_port_failed_store`, `function zfcp_sysfs_unit_failed_show`, `function zfcp_sysfs_unit_failed_store`, `function zfcp_sysfs_adapter_failed_show`, `function zfcp_sysfs_adapter_failed_store`, `function zfcp_sysfs_port_rescan_store`, `function zfcp_sysfs_port_set_removing`, `function zfcp_sysfs_port_is_removing`, `function zfcp_sysfs_port_in_use`.
- Atlas domain: Driver Families / drivers/s390.
- Implementation status: source implementation candidate.
- Synchronization appears in or near this file; preserve lock ordering, sleepability, and interrupt-context constraints.
Implementation Notes
- This generated page is the file-by-file coverage layer; curated subsystem chapters should link here when they synthesize a multi-file control flow.
- Core OS pages should be promoted from atlas-only to deep-reviewed when they explain data structures, invariants, locking, lifecycle, and C implementation snippets.
- Driver-family pages are intentionally pattern-oriented unless they are part of the selected PCIe/NVMe representative device path.