aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/scsi/qla2xxx/qla_isr.c
diff options
context:
space:
mode:
authorChad Dupuis <chad.dupuis@qlogic.com>2012-05-15 14:34:23 -0400
committerJames Bottomley <JBottomley@Parallels.com>2012-05-22 06:41:17 -0400
commitdaae62a33e4f9b998cc8bf985fdf9eda62c10e57 (patch)
tree7c206436f651f310ac97e86b1d2083885cb4d37a /drivers/scsi/qla2xxx/qla_isr.c
parent00adc9a034e0b8e2307316ae49754f7ba35f93df (diff)
[SCSI] qla2xxx: Log link up and link down messages to track link flops.
Signed-off-by: Giridhar Malavali <giridhar.malavali@qlogic.com> Signed-off-by: Chad Dupuis <chad.dupuis@qlogic.com> Signed-off-by: James Bottomley <JBottomley@Parallels.com>
Diffstat (limited to 'drivers/scsi/qla2xxx/qla_isr.c')
-rw-r--r--drivers/scsi/qla2xxx/qla_isr.c44
1 files changed, 31 insertions, 13 deletions
diff --git a/drivers/scsi/qla2xxx/qla_isr.c b/drivers/scsi/qla2xxx/qla_isr.c
index f4b8a5f7840a..0e716dcea944 100644
--- a/drivers/scsi/qla2xxx/qla_isr.c
+++ b/drivers/scsi/qla2xxx/qla_isr.c
@@ -309,6 +309,28 @@ qla81xx_idc_event(scsi_qla_host_t *vha, uint16_t aen, uint16_t descr)
309 "IDC failed to post ACK.\n"); 309 "IDC failed to post ACK.\n");
310} 310}
311 311
312#define LS_UNKNOWN 2
313char *
314qla2x00_get_link_speed_str(struct qla_hw_data *ha)
315{
316 static char *link_speeds[] = {"1", "2", "?", "4", "8", "16", "10"};
317 char *link_speed;
318 int fw_speed = ha->link_data_rate;
319
320 if (IS_QLA2100(ha) || IS_QLA2200(ha))
321 link_speed = link_speeds[0];
322 else if (fw_speed == 0x13)
323 link_speed = link_speeds[6];
324 else {
325 link_speed = link_speeds[LS_UNKNOWN];
326 if (fw_speed < 6)
327 link_speed =
328 link_speeds[fw_speed];
329 }
330
331 return link_speed;
332}
333
312/** 334/**
313 * qla2x00_async_event() - Process aynchronous events. 335 * qla2x00_async_event() - Process aynchronous events.
314 * @ha: SCSI driver HA context 336 * @ha: SCSI driver HA context
@@ -317,9 +339,6 @@ qla81xx_idc_event(scsi_qla_host_t *vha, uint16_t aen, uint16_t descr)
317void 339void
318qla2x00_async_event(scsi_qla_host_t *vha, struct rsp_que *rsp, uint16_t *mb) 340qla2x00_async_event(scsi_qla_host_t *vha, struct rsp_que *rsp, uint16_t *mb)
319{ 341{
320#define LS_UNKNOWN 2
321 static char *link_speeds[] = { "1", "2", "?", "4", "8", "16", "10" };
322 char *link_speed;
323 uint16_t handle_cnt; 342 uint16_t handle_cnt;
324 uint16_t cnt, mbx; 343 uint16_t cnt, mbx;
325 uint32_t handles[5]; 344 uint32_t handles[5];
@@ -479,20 +498,14 @@ skip_rio:
479 break; 498 break;
480 499
481 case MBA_LOOP_UP: /* Loop Up Event */ 500 case MBA_LOOP_UP: /* Loop Up Event */
482 if (IS_QLA2100(ha) || IS_QLA2200(ha)) { 501 if (IS_QLA2100(ha) || IS_QLA2200(ha))
483 link_speed = link_speeds[0];
484 ha->link_data_rate = PORT_SPEED_1GB; 502 ha->link_data_rate = PORT_SPEED_1GB;
485 } else { 503 else
486 link_speed = link_speeds[LS_UNKNOWN];
487 if (mb[1] < 6)
488 link_speed = link_speeds[mb[1]];
489 else if (mb[1] == 0x13)
490 link_speed = link_speeds[6];
491 ha->link_data_rate = mb[1]; 504 ha->link_data_rate = mb[1];
492 }
493 505
494 ql_dbg(ql_dbg_async, vha, 0x500a, 506 ql_dbg(ql_dbg_async, vha, 0x500a,
495 "LOOP UP detected (%s Gbps).\n", link_speed); 507 "LOOP UP detected (%s Gbps).\n",
508 qla2x00_get_link_speed_str(ha));
496 509
497 vha->flags.management_server_logged_in = 0; 510 vha->flags.management_server_logged_in = 0;
498 qla2x00_post_aen_work(vha, FCH_EVT_LINKUP, ha->link_data_rate); 511 qla2x00_post_aen_work(vha, FCH_EVT_LINKUP, ha->link_data_rate);
@@ -638,6 +651,8 @@ skip_rio:
638 ql_dbg(ql_dbg_async, vha, 0x5010, 651 ql_dbg(ql_dbg_async, vha, 0x5010,
639 "Port unavailable %04x %04x %04x.\n", 652 "Port unavailable %04x %04x %04x.\n",
640 mb[1], mb[2], mb[3]); 653 mb[1], mb[2], mb[3]);
654 ql_log(ql_log_warn, vha, 0x505e,
655 "Link is offline.\n");
641 656
642 if (atomic_read(&vha->loop_state) != LOOP_DOWN) { 657 if (atomic_read(&vha->loop_state) != LOOP_DOWN) {
643 atomic_set(&vha->loop_state, LOOP_DOWN); 658 atomic_set(&vha->loop_state, LOOP_DOWN);
@@ -676,6 +691,9 @@ skip_rio:
676 ql_dbg(ql_dbg_async, vha, 0x5012, 691 ql_dbg(ql_dbg_async, vha, 0x5012,
677 "Port database changed %04x %04x %04x.\n", 692 "Port database changed %04x %04x %04x.\n",
678 mb[1], mb[2], mb[3]); 693 mb[1], mb[2], mb[3]);
694 ql_log(ql_log_warn, vha, 0x505f,
695 "Link is operational (%s Gbps).\n",
696 qla2x00_get_link_speed_str(ha));
679 697
680 /* 698 /*
681 * Mark all devices as missing so we will login again. 699 * Mark all devices as missing so we will login again.