[SCSI] qla2xxx: Ignore payload reserved-bits during RSCN processing.
authorRavi Anand <ravi.anand@qlogic.com>
Fri, 12 Sep 2008 04:22:53 +0000 (21:22 -0700)
committerJames Bottomley <James.Bottomley@HansenPartnership.com>
Fri, 3 Oct 2008 16:46:19 +0000 (11:46 -0500)
As the driver is only interested in bits 0-9 of the 1st
RSCN-payload word:

rsvd[15:14]RscnEventQualifier[13:10]Fmt[9:8]Domain[7:0]
Area[15:8]Alpa[7:0]

Signed-off-by: Ravi Anand <ravi.anand@qlogic.com>
Signed-off-by: Andrew Vasquez <andrew.vasquez@qlogic.com>
Signed-off-by: James Bottomley <James.Bottomley@HansenPartnership.com>
drivers/scsi/qla2xxx/qla_isr.c

index 9eb6ef3..fc4bfa7 100644 (file)
@@ -589,7 +589,7 @@ qla2x00_async_event(scsi_qla_host_t *ha, uint16_t *mb)
                    "scsi(%ld): RSCN database changed -- %04x %04x %04x.\n",
                    ha->host_no, mb[1], mb[2], mb[3]));
 
-               rscn_entry = (mb[1] << 16) | mb[2];
+               rscn_entry = ((mb[1] & 0xff) << 16) | mb[2];
                host_pid = (ha->d_id.b.domain << 16) | (ha->d_id.b.area << 8) |
                    ha->d_id.b.al_pa;
                if (rscn_entry == host_pid) {
@@ -600,6 +600,8 @@ qla2x00_async_event(scsi_qla_host_t *ha, uint16_t *mb)
                        break;
                }
 
+               /* Ignore reserved bits from RSCN-payload. */
+               rscn_entry = ((mb[1] & 0x3ff) << 16) | mb[2];
                rscn_queue_index = ha->rscn_in_ptr + 1;
                if (rscn_queue_index == MAX_RSCN_COUNT)
                        rscn_queue_index = 0;