diff options
author | Santosh Vernekar <santosh.vernekar@qlogic.com> | 2009-07-31 18:09:25 -0400 |
---|---|---|
committer | James Bottomley <James.Bottomley@suse.de> | 2009-08-22 18:52:16 -0400 |
commit | 55903b9d152e91d4df2ab242c33efbd33e03e499 (patch) | |
tree | d815e4b0badb365bf296d97c39716c1725138e05 /drivers/scsi/qla2xxx/qla_isr.c | |
parent | 9764ff8807a2455218e2ec5024e823cc09b01906 (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.c | 24 |
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) { |