summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--drivers/scsi/aacraid/aacraid.h4
-rw-r--r--drivers/scsi/aacraid/commsup.c34
2 files changed, 21 insertions, 17 deletions
diff --git a/drivers/scsi/aacraid/aacraid.h b/drivers/scsi/aacraid/aacraid.h
index 17c6cdd52806..a8fe1e1272c1 100644
--- a/drivers/scsi/aacraid/aacraid.h
+++ b/drivers/scsi/aacraid/aacraid.h
@@ -117,9 +117,13 @@ enum {
/* Thor: 5 phys. buses: #0: empty, 1-4: 256 targets each */
#define AAC_MAX_BUSES 5
#define AAC_MAX_TARGETS 256
+#define AAC_BUS_TARGET_LOOP (AAC_MAX_BUSES * AAC_MAX_TARGETS)
#define AAC_MAX_NATIVE_SIZE 2048
#define FW_ERROR_BUFFER_SIZE 512
+#define get_bus_number(x) (x/AAC_MAX_TARGETS)
+#define get_target_number(x) (x%AAC_MAX_TARGETS)
+
/* Thor AIF events */
#define SA_AIF_HOTPLUG (1<<1)
#define SA_AIF_HARDWARE (1<<2)
diff --git a/drivers/scsi/aacraid/commsup.c b/drivers/scsi/aacraid/commsup.c
index ed79159db752..8966371ec103 100644
--- a/drivers/scsi/aacraid/commsup.c
+++ b/drivers/scsi/aacraid/commsup.c
@@ -1890,31 +1890,31 @@ static int aac_is_safw_target_valid(struct aac_dev *dev, int bus, int target)
static void aac_resolve_luns(struct aac_dev *dev)
{
+ int i;
int bus, target, channel;
struct scsi_device *sdev;
- for (bus = 0; bus < AAC_MAX_BUSES; bus++) {
- for (target = 0; target < AAC_MAX_TARGETS; target++) {
+ for (i = 0; i < AAC_BUS_TARGET_LOOP; i++) {
- if (bus == CONTAINER_CHANNEL)
- channel = CONTAINER_CHANNEL;
- else
- channel = aac_phys_to_logical(bus);
+ bus = get_bus_number(i);
+ target = get_target_number(i);
- sdev = scsi_device_lookup(dev->scsi_host_ptr, channel,
- target, 0);
+ if (bus == CONTAINER_CHANNEL)
+ channel = CONTAINER_CHANNEL;
+ else
+ channel = aac_phys_to_logical(bus);
- if (!sdev && aac_is_safw_target_valid(dev, bus, target))
- scsi_add_device(dev->scsi_host_ptr, channel,
- target, 0);
- else if (sdev && aac_is_safw_target_valid(dev,
- bus, target))
- scsi_remove_device(sdev);
+ sdev = scsi_device_lookup(dev->scsi_host_ptr, channel,
+ target, 0);
- if (sdev)
- scsi_device_put(sdev);
+ if (!sdev && aac_is_safw_target_valid(dev, bus, target))
+ scsi_add_device(dev->scsi_host_ptr, channel,
+ target, 0);
+ else if (sdev && aac_is_safw_target_valid(dev, bus, target))
+ scsi_remove_device(sdev);
- }
+ if (sdev)
+ scsi_device_put(sdev);
}
}