From 8796c3b176b4dcba48d71d659617ad6e03d94b94 Mon Sep 17 00:00:00 2001 From: Lalit Chandivade Date: Fri, 7 Oct 2011 16:55:43 -0700 Subject: [PATCH] --- yaml --- r: 271111 b: refs/heads/master c: 8de5b9582420acac5129ec7921711aded75406c0 h: refs/heads/master i: 271109: 04a0854bb4fe31900900526f4d0ce006cf41c5a0 271107: 453f73e352a2429ffa4d9a08fbe279958d27ead4 271103: c09c955e894276f830c6b8116c5c296d1b5e3b4c v: v3 --- [refs] | 2 +- trunk/drivers/scsi/qla4xxx/ql4_os.c | 37 ++++++++++++++++------------- 2 files changed, 22 insertions(+), 17 deletions(-) diff --git a/[refs] b/[refs] index ee818ab73960..5b7c3bfd17bf 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 4549415af6915017f5d3fbdbfd5edd1dfbe63fa9 +refs/heads/master: 8de5b9582420acac5129ec7921711aded75406c0 diff --git a/trunk/drivers/scsi/qla4xxx/ql4_os.c b/trunk/drivers/scsi/qla4xxx/ql4_os.c index 874621db4a98..0bcb6fdcc9a7 100644 --- a/trunk/drivers/scsi/qla4xxx/ql4_os.c +++ b/trunk/drivers/scsi/qla4xxx/ql4_os.c @@ -2812,15 +2812,11 @@ static int get_fw_boot_info(struct scsi_qla_host *ha, uint16_t ddb_index[]) val = rd_nvram_byte(ha, pri_addr); if (val & BIT_7) ddb_index[0] = (val & 0x7f); - else - ddb_index[0] = 0; /* get secondary valid target index */ val = rd_nvram_byte(ha, sec_addr); if (val & BIT_7) ddb_index[1] = (val & 0x7f); - else - ddb_index[1] = 1; } else if (is_qla8022(ha)) { buf = dma_alloc_coherent(&ha->pdev->dev, size, @@ -2862,15 +2858,10 @@ static int get_fw_boot_info(struct scsi_qla_host *ha, uint16_t ddb_index[]) /* get primary valid target index */ if (buf[2] & BIT_7) ddb_index[0] = buf[2] & 0x7f; - else - ddb_index[0] = 0; /* get secondary valid target index */ if (buf[11] & BIT_7) ddb_index[1] = buf[11] & 0x7f; - else - ddb_index[1] = 1; - } else { ret = QLA_ERROR; goto exit_boot_info; @@ -2980,9 +2971,12 @@ static int qla4xxx_get_boot_target(struct scsi_qla_host *ha, static int qla4xxx_get_boot_info(struct scsi_qla_host *ha) { uint16_t ddb_index[2]; - int ret = QLA_SUCCESS; + int ret = QLA_ERROR; + int rval; memset(ddb_index, 0, sizeof(ddb_index)); + ddb_index[0] = 0xffff; + ddb_index[1] = 0xffff; ret = get_fw_boot_info(ha, ddb_index); if (ret != QLA_SUCCESS) { DEBUG2(ql4_printk(KERN_ERR, ha, @@ -2990,19 +2984,30 @@ static int qla4xxx_get_boot_info(struct scsi_qla_host *ha) return ret; } - ret = qla4xxx_get_boot_target(ha, &(ha->boot_tgt.boot_pri_sess), + if (ddb_index[0] == 0xffff) + goto sec_target; + + rval = qla4xxx_get_boot_target(ha, &(ha->boot_tgt.boot_pri_sess), ddb_index[0]); - if (ret != QLA_SUCCESS) { + if (rval != QLA_SUCCESS) { DEBUG2(ql4_printk(KERN_ERR, ha, "%s: Failed to get " "primary target\n", __func__)); - } + } else + ret = QLA_SUCCESS; - ret = qla4xxx_get_boot_target(ha, &(ha->boot_tgt.boot_sec_sess), +sec_target: + if (ddb_index[1] == 0xffff) + goto exit_get_boot_info; + + rval = qla4xxx_get_boot_target(ha, &(ha->boot_tgt.boot_sec_sess), ddb_index[1]); - if (ret != QLA_SUCCESS) { + if (rval != QLA_SUCCESS) { DEBUG2(ql4_printk(KERN_ERR, ha, "%s: Failed to get " "secondary target\n", __func__)); - } + } else + ret = QLA_SUCCESS; + +exit_get_boot_info: return ret; }