diff options
| author | Ingo Molnar <mingo@kernel.org> | 2013-04-19 13:03:08 +0200 |
|---|---|---|
| committer | Ingo Molnar <mingo@kernel.org> | 2013-04-19 13:03:08 +0200 |
| commit | 5379f8c0d72cab43bbe6d974ceb3ad84dddc2b8e (patch) | |
| tree | 524d8ac34cc8c7ef68b43e3ee6e08e27db86299c /drivers/scsi/libsas/sas_expander.c | |
| parent | b6d5278dc8385eaf2e3904a4af444a04f6ae4e71 (diff) | |
| parent | 94c1acf2c85b03a59a42d931a94a13a76c123a62 (diff) | |
| download | olio-linux-3.10-5379f8c0d72cab43bbe6d974ceb3ad84dddc2b8e.tar.xz olio-linux-3.10-5379f8c0d72cab43bbe6d974ceb3ad84dddc2b8e.zip | |
Merge tag 'edac_amd_f16h' of git://git.kernel.org/pub/scm/linux/kernel/git/ras/ras into x86/ras
Pull AMD F16h support for amd64_edac from Borislav Petkov.
Signed-off-by: Ingo Molnar <mingo@kernel.org>
Diffstat (limited to 'drivers/scsi/libsas/sas_expander.c')
| -rw-r--r-- | drivers/scsi/libsas/sas_expander.c | 14 |
1 files changed, 13 insertions, 1 deletions
diff --git a/drivers/scsi/libsas/sas_expander.c b/drivers/scsi/libsas/sas_expander.c index aec2e0da501..55cbd018015 100644 --- a/drivers/scsi/libsas/sas_expander.c +++ b/drivers/scsi/libsas/sas_expander.c @@ -235,6 +235,17 @@ static void sas_set_ex_phy(struct domain_device *dev, int phy_id, void *rsp) linkrate = phy->linkrate; memcpy(sas_addr, phy->attached_sas_addr, SAS_ADDR_SIZE); + /* Handle vacant phy - rest of dr data is not valid so skip it */ + if (phy->phy_state == PHY_VACANT) { + memset(phy->attached_sas_addr, 0, SAS_ADDR_SIZE); + phy->attached_dev_type = NO_DEVICE; + if (!test_bit(SAS_HA_ATA_EH_ACTIVE, &ha->state)) { + phy->phy_id = phy_id; + goto skip; + } else + goto out; + } + phy->attached_dev_type = to_dev_type(dr); if (test_bit(SAS_HA_ATA_EH_ACTIVE, &ha->state)) goto out; @@ -272,6 +283,7 @@ static void sas_set_ex_phy(struct domain_device *dev, int phy_id, void *rsp) phy->phy->maximum_linkrate = dr->pmax_linkrate; phy->phy->negotiated_linkrate = phy->linkrate; + skip: if (new_phy) if (sas_phy_add(phy->phy)) { sas_phy_free(phy->phy); @@ -388,7 +400,7 @@ int sas_ex_phy_discover(struct domain_device *dev, int single) if (!disc_req) return -ENOMEM; - disc_resp = alloc_smp_req(DISCOVER_RESP_SIZE); + disc_resp = alloc_smp_resp(DISCOVER_RESP_SIZE); if (!disc_resp) { kfree(disc_req); return -ENOMEM; |