]> git.karo-electronics.de Git - karo-tx-linux.git/commitdiff
[SCSI] qla2xxx: Explicitly set the execution-throttle with recent ISPs.
authorAndrew Vasquez <andrew.vasquez@qlogic.com>
Tue, 24 Mar 2009 16:08:16 +0000 (09:08 -0700)
committerJames Bottomley <James.Bottomley@HansenPartnership.com>
Fri, 3 Apr 2009 14:22:52 +0000 (09:22 -0500)
Firmware semantics changed for 24xx and above ISPs in their
handling of the specified execution-throttle passed during
firmware initialization.  The original codes use of a theoretical
maximum (0xffff, as carried over from earlier ISPs) could in fact
act as a throttle in some circumstances.  Now set the value based
of the firmware's own 'resource' (exchange IOCBs) capabilities.

Signed-off-by: Andrew Vasquez <andrew.vasquez@qlogic.com>
Signed-off-by: James Bottomley <James.Bottomley@HansenPartnership.com>
drivers/scsi/qla2xxx/qla_def.h
drivers/scsi/qla2xxx/qla_init.c

index 1a84dbf8251014dcc830eeb880a5eabe4b798550..e3d4d48905eea260db29caf2c8cedf0c8448c9d4 100644 (file)
@@ -2432,6 +2432,7 @@ struct qla_hw_data {
 #define RISC_START_ADDRESS_2100 0x1000
 #define RISC_START_ADDRESS_2300 0x800
 #define RISC_START_ADDRESS_2400 0x100000
+       uint16_t        fw_xcb_count;
 
        uint16_t        fw_options[16];         /* slots: 1,2,3,10,11 */
        uint8_t         fw_seriallink_options[4];
index f90fd3774f19348bc13ef8242a089dbc5ab41dec..bd7dd84c06485b4947ef4f38b66a799ff7230305 100644 (file)
@@ -948,8 +948,9 @@ qla2x00_setup_chip(scsi_qla_host_t *vha)
                                                ha->max_npiv_vports =
                                                    MIN_MULTI_ID_FABRIC - 1;
                                }
-                               qla2x00_get_resource_cnts(vha, NULL, NULL,
-                                   NULL, NULL, &ha->max_npiv_vports);
+                               qla2x00_get_resource_cnts(vha, NULL,
+                                   &ha->fw_xcb_count, NULL, NULL,
+                                   &ha->max_npiv_vports);
 
                                if (!fw_major_version && ql2xallocfwdump)
                                        qla2x00_alloc_fw_dump(vha);
@@ -1275,8 +1276,11 @@ qla2x00_init_rings(scsi_qla_host_t *vha)
                mid_init_cb->count = cpu_to_le16(ha->max_npiv_vports);
        }
 
-
-       mid_init_cb->options = __constant_cpu_to_le16(BIT_1);
+       if (IS_FWI2_CAPABLE(ha)) {
+               mid_init_cb->options = __constant_cpu_to_le16(BIT_1);
+               mid_init_cb->init_cb.execution_throttle =
+                   cpu_to_le16(ha->fw_xcb_count);
+       }
 
        rval = qla2x00_init_firmware(vha, ha->init_cb_size);
        if (rval) {