diff options
author | Bartek Nowakowski <bartek.nowakowski@intel.com> | 2012-01-04 04:33:20 -0500 |
---|---|---|
committer | James Bottomley <JBottomley@Parallels.com> | 2012-01-16 02:45:43 -0500 |
commit | 7e629841b8f8f7bc84d74de994d748b0a3282225 (patch) | |
tree | 00c823b35c8c72f3b151c3eabef95255e59b4bc0 /drivers/scsi/isci/remote_device.c | |
parent | d4ec1cf61fb081a9dde0c0e0b2d0201f4005f937 (diff) |
[SCSI] isci: enable wide port targets
Arrange for task_contexts prepared for the wide targets to account for
all the attached phys in the port.
Signed-off-by: Bartek Nowakowski <bartek.nowakowski@intel.com>
Signed-off-by: Dan Williams <dan.j.williams@intel.com>
Signed-off-by: James Bottomley <JBottomley@Parallels.com>
Diffstat (limited to 'drivers/scsi/isci/remote_device.c')
-rw-r--r-- | drivers/scsi/isci/remote_device.c | 10 |
1 files changed, 7 insertions, 3 deletions
diff --git a/drivers/scsi/isci/remote_device.c b/drivers/scsi/isci/remote_device.c index b207cd3b15a0..dd74b6ceeb82 100644 --- a/drivers/scsi/isci/remote_device.c +++ b/drivers/scsi/isci/remote_device.c | |||
@@ -53,6 +53,7 @@ | |||
53 | * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | 53 | * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
54 | */ | 54 | */ |
55 | #include <scsi/sas.h> | 55 | #include <scsi/sas.h> |
56 | #include <linux/bitops.h> | ||
56 | #include "isci.h" | 57 | #include "isci.h" |
57 | #include "port.h" | 58 | #include "port.h" |
58 | #include "remote_device.h" | 59 | #include "remote_device.h" |
@@ -1101,6 +1102,7 @@ static enum sci_status sci_remote_device_da_construct(struct isci_port *iport, | |||
1101 | struct isci_remote_device *idev) | 1102 | struct isci_remote_device *idev) |
1102 | { | 1103 | { |
1103 | enum sci_status status; | 1104 | enum sci_status status; |
1105 | struct sci_port_properties properties; | ||
1104 | struct domain_device *dev = idev->domain_dev; | 1106 | struct domain_device *dev = idev->domain_dev; |
1105 | 1107 | ||
1106 | sci_remote_device_construct(iport, idev); | 1108 | sci_remote_device_construct(iport, idev); |
@@ -1110,6 +1112,11 @@ static enum sci_status sci_remote_device_da_construct(struct isci_port *iport, | |||
1110 | * entries will be needed to store the remote node. | 1112 | * entries will be needed to store the remote node. |
1111 | */ | 1113 | */ |
1112 | idev->is_direct_attached = true; | 1114 | idev->is_direct_attached = true; |
1115 | |||
1116 | sci_port_get_properties(iport, &properties); | ||
1117 | /* Get accurate port width from port's phy mask for a DA device. */ | ||
1118 | idev->device_port_width = hweight32(properties.phy_mask); | ||
1119 | |||
1113 | status = sci_controller_allocate_remote_node_context(iport->owning_controller, | 1120 | status = sci_controller_allocate_remote_node_context(iport->owning_controller, |
1114 | idev, | 1121 | idev, |
1115 | &idev->rnc.remote_node_index); | 1122 | &idev->rnc.remote_node_index); |
@@ -1125,9 +1132,6 @@ static enum sci_status sci_remote_device_da_construct(struct isci_port *iport, | |||
1125 | 1132 | ||
1126 | idev->connection_rate = sci_port_get_max_allowed_speed(iport); | 1133 | idev->connection_rate = sci_port_get_max_allowed_speed(iport); |
1127 | 1134 | ||
1128 | /* / @todo Should I assign the port width by reading all of the phys on the port? */ | ||
1129 | idev->device_port_width = 1; | ||
1130 | |||
1131 | return SCI_SUCCESS; | 1135 | return SCI_SUCCESS; |
1132 | } | 1136 | } |
1133 | 1137 | ||