forked from Minki/linux
[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>
This commit is contained in:
parent
d4ec1cf61f
commit
7e629841b8
@ -114,7 +114,7 @@ static u32 sci_port_get_phys(struct isci_port *iport)
|
||||
* value is returned if the specified port is not valid. When this value is
|
||||
* returned, no data is copied to the properties output parameter.
|
||||
*/
|
||||
static enum sci_status sci_port_get_properties(struct isci_port *iport,
|
||||
enum sci_status sci_port_get_properties(struct isci_port *iport,
|
||||
struct sci_port_properties *prop)
|
||||
{
|
||||
if (!iport || iport->logical_port_index == SCIC_SDS_DUMMY_PORT)
|
||||
|
@ -250,6 +250,10 @@ bool sci_port_link_detected(
|
||||
struct isci_port *iport,
|
||||
struct isci_phy *iphy);
|
||||
|
||||
enum sci_status sci_port_get_properties(
|
||||
struct isci_port *iport,
|
||||
struct sci_port_properties *prop);
|
||||
|
||||
enum sci_status sci_port_link_up(struct isci_port *iport,
|
||||
struct isci_phy *iphy);
|
||||
enum sci_status sci_port_link_down(struct isci_port *iport,
|
||||
|
@ -53,6 +53,7 @@
|
||||
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*/
|
||||
#include <scsi/sas.h>
|
||||
#include <linux/bitops.h>
|
||||
#include "isci.h"
|
||||
#include "port.h"
|
||||
#include "remote_device.h"
|
||||
@ -1101,6 +1102,7 @@ static enum sci_status sci_remote_device_da_construct(struct isci_port *iport,
|
||||
struct isci_remote_device *idev)
|
||||
{
|
||||
enum sci_status status;
|
||||
struct sci_port_properties properties;
|
||||
struct domain_device *dev = idev->domain_dev;
|
||||
|
||||
sci_remote_device_construct(iport, idev);
|
||||
@ -1110,6 +1112,11 @@ static enum sci_status sci_remote_device_da_construct(struct isci_port *iport,
|
||||
* entries will be needed to store the remote node.
|
||||
*/
|
||||
idev->is_direct_attached = true;
|
||||
|
||||
sci_port_get_properties(iport, &properties);
|
||||
/* Get accurate port width from port's phy mask for a DA device. */
|
||||
idev->device_port_width = hweight32(properties.phy_mask);
|
||||
|
||||
status = sci_controller_allocate_remote_node_context(iport->owning_controller,
|
||||
idev,
|
||||
&idev->rnc.remote_node_index);
|
||||
@ -1125,9 +1132,6 @@ static enum sci_status sci_remote_device_da_construct(struct isci_port *iport,
|
||||
|
||||
idev->connection_rate = sci_port_get_max_allowed_speed(iport);
|
||||
|
||||
/* / @todo Should I assign the port width by reading all of the phys on the port? */
|
||||
idev->device_port_width = 1;
|
||||
|
||||
return SCI_SUCCESS;
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user