On 12/19/14, 6:51 PM, John Soni Jose wrote:
  Increment the retry count to get the boot target info when
  port async event is received by the driver. Update sysfs enteries
  with the boot target  parameters.

Signed-off-by: Minh Tran <minhduc.t...@emulex.com>
Signed-off-by: John Soni Jose <sony.joh...@emulex.com>
Signed-off-by: Jayamohan Kallickal <jayamohan.kallic...@emulex.com>
---
  drivers/scsi/be2iscsi/be_cmds.c |    4 ++++
  drivers/scsi/be2iscsi/be_main.c |   23 ++++++++++++++++++++---
  drivers/scsi/be2iscsi/be_main.h |    4 ++++
  3 files changed, 28 insertions(+), 3 deletions(-)

diff --git a/drivers/scsi/be2iscsi/be_cmds.c b/drivers/scsi/be2iscsi/be_cmds.c
index 80d97f3..8e16c49 100644
--- a/drivers/scsi/be2iscsi/be_cmds.c
+++ b/drivers/scsi/be2iscsi/be_cmds.c
@@ -452,6 +452,7 @@ void beiscsi_async_link_state_process(struct beiscsi_hba 
*phba,
                    ((evt->port_link_status & ASYNC_EVENT_LOGICAL) &&
                     (evt->port_fault == BEISCSI_PHY_LINK_FAULT_NONE))) {
                phba->state = BE_ADAPTER_LINK_UP | BE_ADAPTER_CHECK_BOOT;
+               phba->get_boot = BE_GET_BOOT_RETRIES;

                beiscsi_log(phba, KERN_ERR,
                            BEISCSI_LOG_CONFIG | BEISCSI_LOG_INIT,
@@ -480,6 +481,7 @@ int beiscsi_process_mcc(struct beiscsi_hba *phba)
                                case ASYNC_EVENT_NEW_ISCSI_CONN:
                                case ASYNC_EVENT_NEW_TCP_CONN:
                                        phba->state |= BE_ADAPTER_CHECK_BOOT;
+                                       phba->get_boot = BE_GET_BOOT_RETRIES;
                                        beiscsi_log(phba, KERN_ERR,
                                                    BEISCSI_LOG_CONFIG |
                                                    BEISCSI_LOG_MBOX,
@@ -488,6 +490,8 @@ int beiscsi_process_mcc(struct beiscsi_hba *phba)
                                                    compl->flags);
                                        break;
                                default:
+                                       phba->state |= BE_ADAPTER_CHECK_BOOT;
+                                       phba->get_boot = BE_GET_BOOT_RETRIES;
                                        beiscsi_log(phba, KERN_ERR,
                                                    BEISCSI_LOG_CONFIG |
                                                    BEISCSI_LOG_MBOX,
diff --git a/drivers/scsi/be2iscsi/be_main.c b/drivers/scsi/be2iscsi/be_main.c
index f319340..98490da 100644
--- a/drivers/scsi/be2iscsi/be_main.c
+++ b/drivers/scsi/be2iscsi/be_main.c
@@ -2039,11 +2039,16 @@ static void  beiscsi_process_mcc_isr(struct beiscsi_hba 
*phba)
                                /* Interpret compl as a async link evt */
                                beiscsi_async_link_state_process(phba,
                                (struct be_async_event_link_state *) mcc_compl);
-                       else
+                       else {
                                beiscsi_log(phba, KERN_ERR, BEISCSI_LOG_MBOX,
                                            "BM_%d :  Unsupported Async Event, 
flags"
                                            " = 0x%08x\n",
                                            mcc_compl->flags);
+                               if (phba->state & BE_ADAPTER_LINK_UP) {
+                                       phba->state |= BE_ADAPTER_CHECK_BOOT;
+                                       phba->get_boot = BE_GET_BOOT_RETRIES;
+                               }
+                       }
                } else if (mcc_compl->flags & CQE_FLAGS_COMPLETED_MASK) {
                        be_mcc_compl_process_isr(&phba->ctrl, mcc_compl);
                        atomic_dec(&phba->ctrl.mcc_obj.q.used);
@@ -4330,8 +4335,14 @@ static int beiscsi_get_boot_info(struct beiscsi_hba 
*phba)
                beiscsi_log(phba, KERN_ERR,
                            BEISCSI_LOG_INIT | BEISCSI_LOG_CONFIG,
                            "BM_%d : No boot session\n");
+
+               if (ret == -ENXIO)
+                       phba->get_boot = 0;
+
+
                return ret;
        }
+       phba->get_boot = 0;
        nonemb_cmd.va = pci_zalloc_consistent(phba->ctrl.pdev,
                                              sizeof(*session_resp),
                                              &nonemb_cmd.dma);
@@ -5376,8 +5387,14 @@ beiscsi_hw_health_check(struct work_struct *work)
        be_eqd_update(phba);

        if (phba->state & BE_ADAPTER_CHECK_BOOT) {
-               phba->state &= ~BE_ADAPTER_CHECK_BOOT;
-               be_check_boot_session(phba);
+               if ((phba->get_boot > 0) && (!phba->boot_kset)) {
+                       phba->get_boot--;
+                       if (!(phba->get_boot % BE_GET_BOOT_TO))
+                               be_check_boot_session(phba);
+               } else {
+                       phba->state &= ~BE_ADAPTER_CHECK_BOOT;
+                       phba->get_boot = 0;
+               }
        }

        beiscsi_ue_detect(phba);
diff --git a/drivers/scsi/be2iscsi/be_main.h b/drivers/scsi/be2iscsi/be_main.h
index 7ee0ffc..0aa0cb3 100644
--- a/drivers/scsi/be2iscsi/be_main.h
+++ b/drivers/scsi/be2iscsi/be_main.h
@@ -109,6 +109,9 @@

  #define BEISCSI_CLEAN_UNLOAD  0x01
  #define BEISCSI_EEH_UNLOAD    0x02
+
+#define BE_GET_BOOT_RETRIES    45
+#define BE_GET_BOOT_TO         20
  /**
   * hardware needs the async PDU buffers to be posted in multiples of 8
   * So have atleast 8 of them by default
@@ -413,6 +416,7 @@ struct beiscsi_hba {
        } fw_config;

        unsigned int state;
+       int get_boot;
        bool fw_timeout;
        bool ue_detected;
        struct delayed_work beiscsi_hw_check_task;


Looks ok to me.

Reviewed-by: Mike Christie <micha...@cs.wisc.edu>
--
To unsubscribe from this list: send the line "unsubscribe linux-scsi" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to