aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/message/fusion/mptbase.h1
-rw-r--r--drivers/message/fusion/mptsas.c22
2 files changed, 17 insertions, 6 deletions
diff --git a/drivers/message/fusion/mptbase.h b/drivers/message/fusion/mptbase.h
index 0041ab3e5e80..a8f617447d22 100644
--- a/drivers/message/fusion/mptbase.h
+++ b/drivers/message/fusion/mptbase.h
@@ -695,7 +695,6 @@ typedef struct _MPT_ADAPTER
695 struct mutex sas_discovery_mutex; 695 struct mutex sas_discovery_mutex;
696 u8 sas_discovery_runtime; 696 u8 sas_discovery_runtime;
697 u8 sas_discovery_ignore_events; 697 u8 sas_discovery_ignore_events;
698 u16 handle;
699 int sas_index; /* index refrencing */ 698 int sas_index; /* index refrencing */
700 MPT_SAS_MGMT sas_mgmt; 699 MPT_SAS_MGMT sas_mgmt;
701 struct work_struct sas_persist_task; 700 struct work_struct sas_persist_task;
diff --git a/drivers/message/fusion/mptsas.c b/drivers/message/fusion/mptsas.c
index 78734e25edd5..468480771f13 100644
--- a/drivers/message/fusion/mptsas.c
+++ b/drivers/message/fusion/mptsas.c
@@ -230,6 +230,20 @@ static inline MPT_ADAPTER *rphy_to_ioc(struct sas_rphy *rphy)
230 return ((MPT_SCSI_HOST *)shost->hostdata)->ioc; 230 return ((MPT_SCSI_HOST *)shost->hostdata)->ioc;
231} 231}
232 232
233static struct mptsas_portinfo *
234mptsas_get_hba_portinfo(MPT_ADAPTER *ioc)
235{
236 struct list_head *head = &ioc->sas_topology;
237 struct mptsas_portinfo *pi = NULL;
238
239 /* always the first entry on sas_topology list */
240
241 if (!list_empty(head))
242 pi = list_entry(head->next, struct mptsas_portinfo, list);
243
244 return pi;
245}
246
233/* 247/*
234 * mptsas_find_portinfo_by_handle 248 * mptsas_find_portinfo_by_handle
235 * 249 *
@@ -1290,7 +1304,7 @@ static int mptsas_smp_handler(struct Scsi_Host *shost, struct sas_rphy *rphy,
1290 struct mptsas_portinfo *port_info; 1304 struct mptsas_portinfo *port_info;
1291 1305
1292 mutex_lock(&ioc->sas_topology_mutex); 1306 mutex_lock(&ioc->sas_topology_mutex);
1293 port_info = mptsas_find_portinfo_by_handle(ioc, ioc->handle); 1307 port_info = mptsas_get_hba_portinfo(ioc);
1294 if (port_info && port_info->phy_info) 1308 if (port_info && port_info->phy_info)
1295 sas_address = 1309 sas_address =
1296 port_info->phy_info[0].phy->identify.sas_address; 1310 port_info->phy_info[0].phy->identify.sas_address;
@@ -2028,8 +2042,7 @@ static int mptsas_probe_one_phy(struct device *dev,
2028 int i; 2042 int i;
2029 2043
2030 mutex_lock(&ioc->sas_topology_mutex); 2044 mutex_lock(&ioc->sas_topology_mutex);
2031 port_info = mptsas_find_portinfo_by_handle(ioc, 2045 port_info = mptsas_get_hba_portinfo(ioc);
2032 ioc->handle);
2033 mutex_unlock(&ioc->sas_topology_mutex); 2046 mutex_unlock(&ioc->sas_topology_mutex);
2034 2047
2035 for (i = 0; i < port_info->num_phys; i++) 2048 for (i = 0; i < port_info->num_phys; i++)
@@ -2099,8 +2112,7 @@ mptsas_probe_hba_phys(MPT_ADAPTER *ioc)
2099 2112
2100 mptsas_sas_io_unit_pg1(ioc); 2113 mptsas_sas_io_unit_pg1(ioc);
2101 mutex_lock(&ioc->sas_topology_mutex); 2114 mutex_lock(&ioc->sas_topology_mutex);
2102 ioc->handle = hba->phy_info[0].handle; 2115 port_info = mptsas_get_hba_portinfo(ioc);
2103 port_info = mptsas_find_portinfo_by_handle(ioc, ioc->handle);
2104 if (!port_info) { 2116 if (!port_info) {
2105 port_info = hba; 2117 port_info = hba;
2106 list_add_tail(&port_info->list, &ioc->sas_topology); 2118 list_add_tail(&port_info->list, &ioc->sas_topology);