diff options
Diffstat (limited to 'drivers/message')
-rw-r--r-- | drivers/message/fusion/mptsas.c | 11 |
1 files changed, 11 insertions, 0 deletions
diff --git a/drivers/message/fusion/mptsas.c b/drivers/message/fusion/mptsas.c index cea10aa50d4a..b6a6f27082b6 100644 --- a/drivers/message/fusion/mptsas.c +++ b/drivers/message/fusion/mptsas.c | |||
@@ -749,6 +749,9 @@ mptsas_sas_io_unit_pg0(MPT_ADAPTER *ioc, struct mptsas_portinfo *port_info) | |||
749 | goto out_free_consistent; | 749 | goto out_free_consistent; |
750 | } | 750 | } |
751 | 751 | ||
752 | if (port_info->num_phys) | ||
753 | port_info->handle = | ||
754 | le16_to_cpu(buffer->PhyData[0].ControllerDevHandle); | ||
752 | for (i = 0; i < port_info->num_phys; i++) { | 755 | for (i = 0; i < port_info->num_phys; i++) { |
753 | mptsas_print_phy_data(&buffer->PhyData[i]); | 756 | mptsas_print_phy_data(&buffer->PhyData[i]); |
754 | port_info->phy_info[i].phy_id = i; | 757 | port_info->phy_info[i].phy_id = i; |
@@ -855,6 +858,7 @@ mptsas_sas_device_pg0(MPT_ADAPTER *ioc, struct mptsas_devinfo *device_info, | |||
855 | cfg.dir = 0; /* read */ | 858 | cfg.dir = 0; /* read */ |
856 | cfg.timeout = 10; | 859 | cfg.timeout = 10; |
857 | 860 | ||
861 | memset(device_info, 0, sizeof(struct mptsas_devinfo)); | ||
858 | error = mpt_config(ioc, &cfg); | 862 | error = mpt_config(ioc, &cfg); |
859 | if (error) | 863 | if (error) |
860 | goto out; | 864 | goto out; |
@@ -925,6 +929,7 @@ mptsas_sas_expander_pg0(MPT_ADAPTER *ioc, struct mptsas_portinfo *port_info, | |||
925 | cfg.dir = 0; /* read */ | 929 | cfg.dir = 0; /* read */ |
926 | cfg.timeout = 10; | 930 | cfg.timeout = 10; |
927 | 931 | ||
932 | memset(port_info, 0, sizeof(struct mptsas_portinfo)); | ||
928 | error = mpt_config(ioc, &cfg); | 933 | error = mpt_config(ioc, &cfg); |
929 | if (error) | 934 | if (error) |
930 | goto out; | 935 | goto out; |
@@ -1334,6 +1339,8 @@ mptsas_probe_expander_phys(MPT_ADAPTER *ioc, u32 *handle, int *index) | |||
1334 | (MPI_SAS_DEVICE_PGAD_FORM_HANDLE << | 1339 | (MPI_SAS_DEVICE_PGAD_FORM_HANDLE << |
1335 | MPI_SAS_DEVICE_PGAD_FORM_SHIFT), | 1340 | MPI_SAS_DEVICE_PGAD_FORM_SHIFT), |
1336 | port_info->phy_info[i].attached.handle); | 1341 | port_info->phy_info[i].attached.handle); |
1342 | port_info->phy_info[i].attached.phy_id = | ||
1343 | port_info->phy_info[i].phy_id; | ||
1337 | } | 1344 | } |
1338 | 1345 | ||
1339 | /* | 1346 | /* |
@@ -1360,6 +1367,7 @@ mptsas_probe_expander_phys(MPT_ADAPTER *ioc, u32 *handle, int *index) | |||
1360 | return 0; | 1367 | return 0; |
1361 | 1368 | ||
1362 | out_free_port_info: | 1369 | out_free_port_info: |
1370 | kfree(port_info->phy_info); | ||
1363 | kfree(port_info); | 1371 | kfree(port_info); |
1364 | out: | 1372 | out: |
1365 | return error; | 1373 | return error; |
@@ -1485,6 +1493,7 @@ mptsas_hotplug_work(void *arg) | |||
1485 | 1493 | ||
1486 | if (phy_info->rphy) { | 1494 | if (phy_info->rphy) { |
1487 | sas_rphy_delete(phy_info->rphy); | 1495 | sas_rphy_delete(phy_info->rphy); |
1496 | memset(&phy_info->attached, 0, sizeof(struct mptsas_devinfo)); | ||
1488 | phy_info->rphy = NULL; | 1497 | phy_info->rphy = NULL; |
1489 | } | 1498 | } |
1490 | break; | 1499 | break; |
@@ -1955,6 +1964,8 @@ static void __devexit mptsas_remove(struct pci_dev *pdev) | |||
1955 | mutex_lock(&ioc->sas_topology_mutex); | 1964 | mutex_lock(&ioc->sas_topology_mutex); |
1956 | list_for_each_entry_safe(p, n, &ioc->sas_topology, list) { | 1965 | list_for_each_entry_safe(p, n, &ioc->sas_topology, list) { |
1957 | list_del(&p->list); | 1966 | list_del(&p->list); |
1967 | if (p->phy_info) | ||
1968 | kfree(p->phy_info); | ||
1958 | kfree(p); | 1969 | kfree(p); |
1959 | } | 1970 | } |
1960 | mutex_unlock(&ioc->sas_topology_mutex); | 1971 | mutex_unlock(&ioc->sas_topology_mutex); |