diff options
Diffstat (limited to 'drivers/scsi/scsi_transport_sas.c')
-rw-r--r-- | drivers/scsi/scsi_transport_sas.c | 23 |
1 files changed, 23 insertions, 0 deletions
diff --git a/drivers/scsi/scsi_transport_sas.c b/drivers/scsi/scsi_transport_sas.c index ab3bd0b5ffd9..7d69a25d2004 100644 --- a/drivers/scsi/scsi_transport_sas.c +++ b/drivers/scsi/scsi_transport_sas.c | |||
@@ -1060,6 +1060,29 @@ int scsi_is_sas_port(const struct device *dev) | |||
1060 | EXPORT_SYMBOL(scsi_is_sas_port); | 1060 | EXPORT_SYMBOL(scsi_is_sas_port); |
1061 | 1061 | ||
1062 | /** | 1062 | /** |
1063 | * sas_port_get_phy - try to take a reference on a port member | ||
1064 | * @port: port to check | ||
1065 | */ | ||
1066 | struct sas_phy *sas_port_get_phy(struct sas_port *port) | ||
1067 | { | ||
1068 | struct sas_phy *phy; | ||
1069 | |||
1070 | mutex_lock(&port->phy_list_mutex); | ||
1071 | if (list_empty(&port->phy_list)) | ||
1072 | phy = NULL; | ||
1073 | else { | ||
1074 | struct list_head *ent = port->phy_list.next; | ||
1075 | |||
1076 | phy = list_entry(ent, typeof(*phy), port_siblings); | ||
1077 | get_device(&phy->dev); | ||
1078 | } | ||
1079 | mutex_unlock(&port->phy_list_mutex); | ||
1080 | |||
1081 | return phy; | ||
1082 | } | ||
1083 | EXPORT_SYMBOL(sas_port_get_phy); | ||
1084 | |||
1085 | /** | ||
1063 | * sas_port_add_phy - add another phy to a port to form a wide port | 1086 | * sas_port_add_phy - add another phy to a port to form a wide port |
1064 | * @port: port to add the phy to | 1087 | * @port: port to add the phy to |
1065 | * @phy: phy to add | 1088 | * @phy: phy to add |