[PATCH] aic94xx: fix routing algorithms

James Bottomley
2006-07-09T20:41:25Z

I've been trying to work out for a while why certain cascaded expander
configurations work with the mptsas, but don't with the aic94xx.
Eventually I discovered that the non-functional configurations are the
ones where the cascaded expander is connected to the parent on table
routed ports. The problem is that the aic94xx routing algorithms never
seem to consider the necessity of a route back to the HBA. This patch
adds such a routing configuration, and now (at least for all my
configurations) the hitherto unseen disks become visible.

James

diff --git a/drivers/scsi/sas/sas_expander.c b/drivers/scsi/sas/sas_expander.c
index 10e0879..0dbeca5 100644
--- a/drivers/scsi/sas/sas_expander.c
+++ b/drivers/scsi/sas/sas_expander.c
@@ -33,6 +33,8 @@ #include "../scsi_sas_internal.h"

static int sas_discover_expander(struct domain_device *dev);
static int sas_configure_routing(struct domain_device *dev, u8 *sas_addr);
+static int sas_configure_phy(struct domain_device *dev, int phy_id,
+ u8 *sas_addr, int include);
static int sas_disable_routing(struct domain_device *dev, u8 *sas_addr);

#if 0
@@ -723,6 +725,8 @@ static int sas_ex_discover_dev(struct do
if (dev->parent && (SAS_ADDR(ex_phy->attached_sas_addr) ==
SAS_ADDR(dev->parent->sas_addr))) {
sas_add_parent_port(dev, phy_id);
+ if (ex_phy->routing_attr == TABLE_ROUTING)
+ sas_configure_phy(dev, phy_id, dev->port->sas_addr, 1);
return 0;
}