aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/message/fusion/mptsas.c11
-rw-r--r--drivers/scsi/scsi_transport_sas.c10
-rw-r--r--include/scsi/scsi_transport_sas.h5
3 files changed, 12 insertions, 14 deletions
diff --git a/drivers/message/fusion/mptsas.c b/drivers/message/fusion/mptsas.c
index dfdd1e445768..b752a479f6db 100644
--- a/drivers/message/fusion/mptsas.c
+++ b/drivers/message/fusion/mptsas.c
@@ -852,6 +852,10 @@ static int mptsas_get_linkerrors(struct sas_phy *phy)
852 dma_addr_t dma_handle; 852 dma_addr_t dma_handle;
853 int error; 853 int error;
854 854
855 /* FIXME: only have link errors on local phys */
856 if (!scsi_is_sas_phy_local(phy))
857 return -EINVAL;
858
855 hdr.PageVersion = MPI_SASPHY1_PAGEVERSION; 859 hdr.PageVersion = MPI_SASPHY1_PAGEVERSION;
856 hdr.ExtPageLength = 0; 860 hdr.ExtPageLength = 0;
857 hdr.PageNumber = 1 /* page number 1*/; 861 hdr.PageNumber = 1 /* page number 1*/;
@@ -924,6 +928,10 @@ static int mptsas_phy_reset(struct sas_phy *phy, int hard_reset)
924 unsigned long timeleft; 928 unsigned long timeleft;
925 int error = -ERESTARTSYS; 929 int error = -ERESTARTSYS;
926 930
931 /* FIXME: fusion doesn't allow non-local phy reset */
932 if (!scsi_is_sas_phy_local(phy))
933 return -EINVAL;
934
927 /* not implemented for expanders */ 935 /* not implemented for expanders */
928 if (phy->identify.target_port_protocols & SAS_PROTOCOL_SMP) 936 if (phy->identify.target_port_protocols & SAS_PROTOCOL_SMP)
929 return -ENXIO; 937 return -ENXIO;
@@ -1570,9 +1578,6 @@ static int mptsas_probe_one_phy(struct device *dev,
1570 1578
1571 if (!phy_info->phy) { 1579 if (!phy_info->phy) {
1572 1580
1573 if (local)
1574 phy->local_attached = 1;
1575
1576 error = sas_phy_add(phy); 1581 error = sas_phy_add(phy);
1577 if (error) { 1582 if (error) {
1578 sas_phy_free(phy); 1583 sas_phy_free(phy);
diff --git a/drivers/scsi/scsi_transport_sas.c b/drivers/scsi/scsi_transport_sas.c
index 5a625c3fddae..d518c1207fb4 100644
--- a/drivers/scsi/scsi_transport_sas.c
+++ b/drivers/scsi/scsi_transport_sas.c
@@ -266,9 +266,6 @@ show_sas_phy_##field(struct class_device *cdev, char *buf) \
266 struct sas_internal *i = to_sas_internal(shost->transportt); \ 266 struct sas_internal *i = to_sas_internal(shost->transportt); \
267 int error; \ 267 int error; \
268 \ 268 \
269 if (!phy->local_attached) \
270 return -EINVAL; \
271 \
272 error = i->f->get_linkerrors ? i->f->get_linkerrors(phy) : 0; \ 269 error = i->f->get_linkerrors ? i->f->get_linkerrors(phy) : 0; \
273 if (error) \ 270 if (error) \
274 return error; \ 271 return error; \
@@ -299,9 +296,6 @@ static ssize_t do_sas_phy_reset(struct class_device *cdev,
299 struct sas_internal *i = to_sas_internal(shost->transportt); 296 struct sas_internal *i = to_sas_internal(shost->transportt);
300 int error; 297 int error;
301 298
302 if (!phy->local_attached)
303 return -EINVAL;
304
305 error = i->f->phy_reset(phy, hard_reset); 299 error = i->f->phy_reset(phy, hard_reset);
306 if (error) 300 if (error)
307 return error; 301 return error;
@@ -849,7 +843,7 @@ show_sas_rphy_enclosure_identifier(struct class_device *cdev, char *buf)
849 * Only devices behind an expander are supported, because the 843 * Only devices behind an expander are supported, because the
850 * enclosure identifier is a SMP feature. 844 * enclosure identifier is a SMP feature.
851 */ 845 */
852 if (phy->local_attached) 846 if (scsi_is_sas_phy_local(phy))
853 return -EINVAL; 847 return -EINVAL;
854 848
855 error = i->f->get_enclosure_identifier(rphy, &identifier); 849 error = i->f->get_enclosure_identifier(rphy, &identifier);
@@ -870,7 +864,7 @@ show_sas_rphy_bay_identifier(struct class_device *cdev, char *buf)
870 struct sas_internal *i = to_sas_internal(shost->transportt); 864 struct sas_internal *i = to_sas_internal(shost->transportt);
871 int val; 865 int val;
872 866
873 if (phy->local_attached) 867 if (scsi_is_sas_phy_local(phy))
874 return -EINVAL; 868 return -EINVAL;
875 869
876 val = i->f->get_bay_identifier(rphy); 870 val = i->f->get_bay_identifier(rphy);
diff --git a/include/scsi/scsi_transport_sas.h b/include/scsi/scsi_transport_sas.h
index 6cc2314098cf..eeb2200de855 100644
--- a/include/scsi/scsi_transport_sas.h
+++ b/include/scsi/scsi_transport_sas.h
@@ -57,9 +57,6 @@ struct sas_phy {
57 enum sas_linkrate maximum_linkrate_hw; 57 enum sas_linkrate maximum_linkrate_hw;
58 enum sas_linkrate maximum_linkrate; 58 enum sas_linkrate maximum_linkrate;
59 59
60 /* internal state */
61 unsigned int local_attached : 1;
62
63 /* link error statistics */ 60 /* link error statistics */
64 u32 invalid_dword_count; 61 u32 invalid_dword_count;
65 u32 running_disparity_error_count; 62 u32 running_disparity_error_count;
@@ -196,4 +193,6 @@ scsi_is_sas_expander_device(struct device *dev)
196 rphy->identify.device_type == SAS_EDGE_EXPANDER_DEVICE; 193 rphy->identify.device_type == SAS_EDGE_EXPANDER_DEVICE;
197} 194}
198 195
196#define scsi_is_sas_phy_local(phy) scsi_is_host_device((phy)->dev.parent)
197
199#endif /* SCSI_TRANSPORT_SAS_H */ 198#endif /* SCSI_TRANSPORT_SAS_H */