diff options
Diffstat (limited to 'drivers/scsi/qla2xxx/qla_isr.c')
-rw-r--r-- | drivers/scsi/qla2xxx/qla_isr.c | 36 |
1 files changed, 10 insertions, 26 deletions
diff --git a/drivers/scsi/qla2xxx/qla_isr.c b/drivers/scsi/qla2xxx/qla_isr.c index 14bcd7cc9ae2..ec63b79f900a 100644 --- a/drivers/scsi/qla2xxx/qla_isr.c +++ b/drivers/scsi/qla2xxx/qla_isr.c | |||
@@ -272,8 +272,6 @@ qla2x00_async_event(scsi_qla_host_t *ha, uint16_t *mb) | |||
272 | uint32_t rscn_entry, host_pid; | 272 | uint32_t rscn_entry, host_pid; |
273 | uint8_t rscn_queue_index; | 273 | uint8_t rscn_queue_index; |
274 | unsigned long flags; | 274 | unsigned long flags; |
275 | scsi_qla_host_t *vha; | ||
276 | int i; | ||
277 | 275 | ||
278 | /* Setup to process RIO completion. */ | 276 | /* Setup to process RIO completion. */ |
279 | handle_cnt = 0; | 277 | handle_cnt = 0; |
@@ -544,18 +542,10 @@ qla2x00_async_event(scsi_qla_host_t *ha, uint16_t *mb) | |||
544 | break; | 542 | break; |
545 | 543 | ||
546 | case MBA_PORT_UPDATE: /* Port database update */ | 544 | case MBA_PORT_UPDATE: /* Port database update */ |
547 | if ((ha->flags.npiv_supported) && (ha->num_vhosts)) { | 545 | /* Only handle SCNs for our Vport index. */ |
548 | for_each_mapped_vp_idx(ha, i) { | 546 | if (ha->parent && ha->vp_idx != (mb[3] & 0xff)) |
549 | list_for_each_entry(vha, &ha->vp_list, | 547 | break; |
550 | vp_list) { | 548 | |
551 | if ((mb[3] & 0xff) | ||
552 | == vha->vp_idx) { | ||
553 | ha = vha; | ||
554 | break; | ||
555 | } | ||
556 | } | ||
557 | } | ||
558 | } | ||
559 | /* | 549 | /* |
560 | * If PORT UPDATE is global (recieved LIP_OCCURED/LIP_RESET | 550 | * If PORT UPDATE is global (recieved LIP_OCCURED/LIP_RESET |
561 | * event etc. earlier indicating loop is down) then process | 551 | * event etc. earlier indicating loop is down) then process |
@@ -590,18 +580,12 @@ qla2x00_async_event(scsi_qla_host_t *ha, uint16_t *mb) | |||
590 | break; | 580 | break; |
591 | 581 | ||
592 | case MBA_RSCN_UPDATE: /* State Change Registration */ | 582 | case MBA_RSCN_UPDATE: /* State Change Registration */ |
593 | if ((ha->flags.npiv_supported) && (ha->num_vhosts)) { | 583 | /* Check if the Vport has issued a SCR */ |
594 | for_each_mapped_vp_idx(ha, i) { | 584 | if (ha->parent && test_bit(VP_SCR_NEEDED, &ha->vp_flags)) |
595 | list_for_each_entry(vha, &ha->vp_list, | 585 | break; |
596 | vp_list) { | 586 | /* Only handle SCNs for our Vport index. */ |
597 | if ((mb[3] & 0xff) | 587 | if (ha->parent && ha->vp_idx != (mb[3] & 0xff)) |
598 | == vha->vp_idx) { | 588 | break; |
599 | ha = vha; | ||
600 | break; | ||
601 | } | ||
602 | } | ||
603 | } | ||
604 | } | ||
605 | 589 | ||
606 | DEBUG2(printk("scsi(%ld): Asynchronous RSCR UPDATE.\n", | 590 | DEBUG2(printk("scsi(%ld): Asynchronous RSCR UPDATE.\n", |
607 | ha->host_no)); | 591 | ha->host_no)); |