From c10c2a62cf0236b2cf83e925b69667c324ba77e2 Mon Sep 17 00:00:00 2001 From: "Stephen M. Cameron" Date: Thu, 19 Jan 2012 14:01:14 -0600 Subject: [PATCH] --- yaml --- r: 292895 b: refs/heads/master c: 1f310bde4631185d4462dbd544b3fa82513cdb6f h: refs/heads/master i: 292893: 7be7805fed4b42e25739e54f3846a36749fe5172 292891: 10df2533f0fdfa3d9d94a8d19714af8fda21d5e7 292887: 1967a6c0a8588e2f0e087205f392f488c7c39f60 292879: d40b21c69e1083b381ba11de8e363943e3bc3a3f 292863: 44970fd2b3baeece76e8c59e7f007b958ccb32f3 v: v3 --- [refs] | 2 +- trunk/drivers/scsi/hpsa.c | 68 +++++++++++++++++---------------------- 2 files changed, 31 insertions(+), 39 deletions(-) diff --git a/[refs] b/[refs] index 757215782894..08de46f28a0e 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: bbef6c0ce8046114c07f5b6a62ce6a239503dd61 +refs/heads/master: 1f310bde4631185d4462dbd544b3fa82513cdb6f diff --git a/trunk/drivers/scsi/hpsa.c b/trunk/drivers/scsi/hpsa.c index 264c1764befe..5a795e6e9947 100644 --- a/trunk/drivers/scsi/hpsa.c +++ b/trunk/drivers/scsi/hpsa.c @@ -1630,35 +1630,30 @@ static int is_msa2xxx(struct ctlr_info *h, struct hpsa_scsi_dev_t *device) * in hpsa_find_target_lun, called by hpsa_scsi_add_entry.) */ static void figure_bus_target_lun(struct ctlr_info *h, - u8 *lunaddrbytes, int *bus, int *target, int *lun, - struct hpsa_scsi_dev_t *device) -{ - u32 lunid; - - if (is_logical_dev_addr_mode(lunaddrbytes)) { - /* logical device */ - lunid = le32_to_cpu(*((__le32 *) lunaddrbytes)); - if (is_msa2xxx(h, device)) { - /* msa2xxx way, put logicals on bus 1 - * and match target/lun numbers box - * reports. - */ - *bus = 1; - *target = (lunid >> 16) & 0x3fff; - *lun = lunid & 0x00ff; - } else { - *bus = 0; - *target = 0; - *lun = (lunid & 0x3fff); - } - } else { + u8 *lunaddrbytes, struct hpsa_scsi_dev_t *device) +{ + u32 lunid = le32_to_cpu(*((__le32 *) lunaddrbytes)); + + if (!is_logical_dev_addr_mode(lunaddrbytes)) { + /* physical device, target and lun filled in later */ if (is_hba_lunid(lunaddrbytes)) - *bus = 3; /* controller */ + hpsa_set_bus_target_lun(device, 3, 0, lunid & 0x3fff); else - *bus = 2; /* physical device */ - *target = -1; - *lun = -1; /* we will fill these in later. */ + /* defer target, lun assignment for physical devices */ + hpsa_set_bus_target_lun(device, 2, -1, -1); + return; + } + /* It's a logical device */ + if (is_msa2xxx(h, device)) { + /* msa2xxx way, put logicals on bus 1 + * and match target/lun numbers box + * reports, other smart array, bus 0, target 0, match lunid + */ + hpsa_set_bus_target_lun(device, + 1, (lunid >> 16) & 0x3fff, lunid & 0x00ff); + return; } + hpsa_set_bus_target_lun(device, 0, 0, lunid & 0x3fff); } /* @@ -1675,12 +1670,11 @@ static void figure_bus_target_lun(struct ctlr_info *h, static int add_msa2xxx_enclosure_device(struct ctlr_info *h, struct hpsa_scsi_dev_t *tmpdevice, struct hpsa_scsi_dev_t *this_device, u8 *lunaddrbytes, - int bus, int target, int lun, unsigned long lunzerobits[], - int *nmsa2xxx_enclosures) + unsigned long lunzerobits[], int *nmsa2xxx_enclosures) { unsigned char scsi3addr[8]; - if (test_bit(target, lunzerobits)) + if (test_bit(tmpdevice->target, lunzerobits)) return 0; /* There is already a lun 0 on this target. */ if (!is_logical_dev_addr_mode(lunaddrbytes)) @@ -1689,11 +1683,11 @@ static int add_msa2xxx_enclosure_device(struct ctlr_info *h, if (!is_msa2xxx(h, tmpdevice)) return 0; /* It's only the MSA2xxx that have this problem. */ - if (lun == 0) /* if lun is 0, then obviously we have a lun 0. */ + if (tmpdevice->lun == 0) /* if lun is 0, then we have a lun 0. */ return 0; memset(scsi3addr, 0, 8); - scsi3addr[3] = target; + scsi3addr[3] = tmpdevice->target; if (is_hba_lunid(scsi3addr)) return 0; /* Don't add the RAID controller here. */ @@ -1710,8 +1704,9 @@ static int add_msa2xxx_enclosure_device(struct ctlr_info *h, if (hpsa_update_device_info(h, scsi3addr, this_device, NULL)) return 0; (*nmsa2xxx_enclosures)++; - hpsa_set_bus_target_lun(this_device, bus, target, 0); - set_bit(target, lunzerobits); + hpsa_set_bus_target_lun(this_device, + tmpdevice->bus, tmpdevice->target, 0); + set_bit(tmpdevice->target, lunzerobits); return 1; } @@ -1806,7 +1801,6 @@ static void hpsa_update_scsi_devices(struct ctlr_info *h, int hostno) int ncurrent = 0; int reportlunsize = sizeof(*physdev_list) + HPSA_MAX_PHYS_LUN * 8; int i, nmsa2xxx_enclosures, ndevs_to_allocate; - int bus, target, lun; int raid_ctlr_position; DECLARE_BITMAP(lunzerobits, HPSA_MAX_TARGETS_PER_CTLR); @@ -1871,8 +1865,7 @@ static void hpsa_update_scsi_devices(struct ctlr_info *h, int hostno) if (hpsa_update_device_info(h, lunaddrbytes, tmpdevice, &is_OBDR)) continue; /* skip it if we can't talk to it. */ - figure_bus_target_lun(h, lunaddrbytes, &bus, &target, &lun, - tmpdevice); + figure_bus_target_lun(h, lunaddrbytes, tmpdevice); this_device = currentsd[ncurrent]; /* @@ -1883,14 +1876,13 @@ static void hpsa_update_scsi_devices(struct ctlr_info *h, int hostno) * there is no lun 0. */ if (add_msa2xxx_enclosure_device(h, tmpdevice, this_device, - lunaddrbytes, bus, target, lun, lunzerobits, + lunaddrbytes, lunzerobits, &nmsa2xxx_enclosures)) { ncurrent++; this_device = currentsd[ncurrent]; } *this_device = *tmpdevice; - hpsa_set_bus_target_lun(this_device, bus, target, lun); switch (this_device->devtype) { case TYPE_ROM: