aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/scsi/qla2xxx/qla_isr.c
diff options
context:
space:
mode:
authorSantosh Vernekar <santosh.vernekar@qlogic.com>2009-07-31 18:09:25 -0400
committerJames Bottomley <James.Bottomley@suse.de>2009-08-22 18:52:16 -0400
commit55903b9d152e91d4df2ab242c33efbd33e03e499 (patch)
treed815e4b0badb365bf296d97c39716c1725138e05 /drivers/scsi/qla2xxx/qla_isr.c
parent9764ff8807a2455218e2ec5024e823cc09b01906 (diff)
[SCSI] qla2xxx: Skip RSCN processing on vha if event is global.
The RSCN processing is skipped if the event received is global and vha is not recipient. Signed-off-by: Santosh Vernekar <santosh.vernekar@qlogic.com> Signed-off-by: Giridhar Malavali <giridhar.malavali@qlogic.com> Signed-off-by: James Bottomley <James.Bottomley@HansenPartnership.com> Signed-off-by: James Bottomley <James.Bottomley@suse.de>
Diffstat (limited to 'drivers/scsi/qla2xxx/qla_isr.c')
-rw-r--r--drivers/scsi/qla2xxx/qla_isr.c24
1 files changed, 20 insertions, 4 deletions
diff --git a/drivers/scsi/qla2xxx/qla_isr.c b/drivers/scsi/qla2xxx/qla_isr.c
index 417a9b9fb19c..00f23d20a983 100644
--- a/drivers/scsi/qla2xxx/qla_isr.c
+++ b/drivers/scsi/qla2xxx/qla_isr.c
@@ -598,10 +598,26 @@ skip_rio:
598 break; 598 break;
599 599
600 case MBA_PORT_UPDATE: /* Port database update */ 600 case MBA_PORT_UPDATE: /* Port database update */
601 /* Only handle SCNs for our Vport index. */ 601 /*
602 if (mb[1] != 0xffff && 602 * Handle only global and vn-port update events
603 vha->vp_idx && vha->vp_idx != (mb[3] & 0xff)) 603 *
604 break; 604 * Relevant inputs:
605 * mb[1] = N_Port handle of changed port
606 * OR 0xffff for global event
607 * mb[2] = New login state
608 * 7 = Port logged out
609 * mb[3] = LSB is vp_idx, 0xff = all vps
610 *
611 * Skip processing if:
612 * Event is global, vp_idx is NOT all vps,
613 * vp_idx does not match
614 * Event is not global, vp_idx does not match
615 */
616 if ((mb[1] == 0xffff && (mb[3] & 0xff) != 0xff)
617 || (mb[1] != 0xffff)) {
618 if (vha->vp_idx != (mb[3] & 0xff))
619 break;
620 }
605 621
606 /* Global event -- port logout or port unavailable. */ 622 /* Global event -- port logout or port unavailable. */
607 if (mb[1] == 0xffff && mb[2] == 0x7) { 623 if (mb[1] == 0xffff && mb[2] == 0x7) {